如何在文本中搜索字符串和相似的单词?

时间:2015-06-03 09:36:42

标签: java string contain

我必须在文本文件中查找单词“age”和类似单词。

我有以下句子:

  • 18岁
  • 51岁的男子
  • 年龄在25至50岁之间的男性
  • 5至75岁。(带点)
  • 5至75岁,(逗号)
  • 代理商名称为xyz(代理商包含年龄)。

String.contains在每种情况下都会返回true。我的要求是传递前五个句子,并在最后一种情况下返回false。

我将通过编写一些包含一串字符串“age”,“age”的代码来解决这个问题。 ,“年龄”,“年龄”,“年龄”等。

有没有更好的方法来解决这个问题。

3 个答案:

答案 0 :(得分:3)

如果你使用正则表达式,你必须把所有可能性。

string.matches("(?i).*\\bage[ds]?\\b.*");

答案 1 :(得分:1)

一个天真的解决方案(昂贵的)将是以下:

  1. 标记每一行(例如,用“”拆分,或者甚至是非字母数字字符,这已经删除了标点符号)。
  2. 计算单词年龄
  3. 的每个单词的编辑距离
  4. 如果当前单词的编辑距离较小(例如,波纹管2),则返回行
  5. 两个字符串的编辑距离是使一个字符串等于另一个字符串所需的编辑(添加,删除和替换)的数量。您可以在simmetrics库中找到编辑距离的实现,也可以在其他地方找到。

    另一个选择可能是阻止第2步中的单词并使用包含单词age的词干(也很昂贵)。

    如果您已经知道所有可接受的答案(或至少是他们的模式),请转到Avinash Raj's answer

答案 2 :(得分:1)

您需要的是一个正则表达式(或正则表达式)

Here's正则表达式的完全详细定义和Java中的使用,可以使用matches(String Regex) method of String class完成。

对于您的示例,它可以(通常)为:myString.matches(".*age? .*")

注意在Java中转义特殊字符。您可以尝试使用正则表达式here。我在上面的示例中没有这样做,但您可以尝试:)

详细说明:

  • 。*:句子可以从一切开始
  • 年龄:句子必须包含' age'
  • ? :年龄可以跟零或一个字符
  • :然后是空格
  • 。*:然后再一切

希望它有所帮助。