如何在文本中搜索字符串和相似词?
How to search for a string and similar word in a text?
我必须在文本文件中查找单词 "age" 和类似的单词。
我有以下句子:
- 18 岁
- 男性 51 岁
- 男性年龄在 25 到 50 岁之间
- 5 到 75 岁之间。(带点)
- 5 岁到 75 岁之间,(带逗号)
- 代理名称是xyz(代理包含年龄)。
String.contains 在每种情况下总是 return 正确。我的要求是通过前五个句子,在最后一个案例中 return false。
我将通过编写一些包含一堆字符串“age”、“age”的代码来解决这个问题。 、"ages"、"aged"、“年龄”等
有没有更好的办法解决这个问题
如果你使用正则表达式,你必须把所有的可能性。
string.matches("(?i).*\bage[ds]?\b.*");
一个天真的解决方案(昂贵的)如下:
- 标记每一行(例如,用“”分隔,甚至是非字母数字字符,这已经删除了标点符号)。
- 计算每个词到词龄
的编辑距离
- 如果当前单词的编辑距离较小(例如,下面2),return行
两个字符串的编辑距离是使一个字符串与另一个字符串相等所需的编辑(添加、删除和替换)次数。您可以在 simmetrics 库或其他地方找到编辑距离的实现。
另一种选择是在第 2 步中提取词干,并使用包含词 age 的 词干(也很昂贵)。
如果您已经知道所有可接受的答案(或至少知道它们的模式),请选择 。
你需要的是正则表达式(或 regex)
Here's a perfectly detailed definition of regular expressions and use in Java, which can be done with matches(String Regex) method of String class.
对于您的示例,它(通常)可以是:myString.matches(".*age? .*")
.
注意转义Java中的特殊字符。你可以试试你的正则表达式 here。我在上面的例子中没有这样做,但你可以试试:)
详细:
- .* : 句子可以任何开头
- age : 句子必须包含 'age'
- ? : age 后面可以跟零个或一个字符
- :然后一个space
- .*: 然后又是一切
希望对您有所帮助。
我必须在文本文件中查找单词 "age" 和类似的单词。
我有以下句子:
- 18 岁
- 男性 51 岁
- 男性年龄在 25 到 50 岁之间
- 5 到 75 岁之间。(带点)
- 5 岁到 75 岁之间,(带逗号)
- 代理名称是xyz(代理包含年龄)。
String.contains 在每种情况下总是 return 正确。我的要求是通过前五个句子,在最后一个案例中 return false。
我将通过编写一些包含一堆字符串“age”、“age”的代码来解决这个问题。 、"ages"、"aged"、“年龄”等
有没有更好的办法解决这个问题
如果你使用正则表达式,你必须把所有的可能性。
string.matches("(?i).*\bage[ds]?\b.*");
一个天真的解决方案(昂贵的)如下:
- 标记每一行(例如,用“”分隔,甚至是非字母数字字符,这已经删除了标点符号)。
- 计算每个词到词龄 的编辑距离
- 如果当前单词的编辑距离较小(例如,下面2),return行
两个字符串的编辑距离是使一个字符串与另一个字符串相等所需的编辑(添加、删除和替换)次数。您可以在 simmetrics 库或其他地方找到编辑距离的实现。
另一种选择是在第 2 步中提取词干,并使用包含词 age 的 词干(也很昂贵)。
如果您已经知道所有可接受的答案(或至少知道它们的模式),请选择
你需要的是正则表达式(或 regex)
Here's a perfectly detailed definition of regular expressions and use in Java, which can be done with matches(String Regex) method of String class.
对于您的示例,它(通常)可以是:myString.matches(".*age? .*")
.
注意转义Java中的特殊字符。你可以试试你的正则表达式 here。我在上面的例子中没有这样做,但你可以试试:)
详细:
- .* : 句子可以任何开头
- age : 句子必须包含 'age'
- ? : age 后面可以跟零个或一个字符
- :然后一个space
- .*: 然后又是一切
希望对您有所帮助。