0

我有几千个术语的列表。这些术语有很大的重叠,但形式不同。例如 (ruby, a_ruby), (triathlon, triathlete, triathletes), (nonprofit, non_profit, non_profits)。

其中大多数有大量的字符重叠,但不完全相同。例如,(非营利组织和非营利组织)

什么正则表达式序列最适合这个?我知道我也可以使用词干提取,但想知道如何将它与正则表达式结合起来。

4

3 回答 3

2

对于几千个项目的单个列表,我会考虑另一种方法。

按字母顺序对列表进行排序,然后手动删除重复项。无论您最终使用何种正则表达式和后续处理,都可能会花费与手动浏览列表一样多的时间。

当然,我假设这是一个一次性的提议。我听从正则表达式专家的程序化解决方案。

于 2009-09-28T19:16:03.060 回答
0

我同意 Bob Kaufman 的观点,即您应该首先通过以消除实际重复。之后,您遇到了正则表达式无法为您解决的问题;您将需要研究编辑距离的测量值才能使用它。

于 2009-09-28T19:53:43.997 回答
0

在这种情况下,我通常的策略是不完全可靠的,如下所示:


1) 删除所有非字母数字字符。
2)使所有字符串小写。
3)将所有字符串放入 a HashSet(这将删除重复项)。
4) 检查其中wordword+"s"都在集合中的任何情况,并删除复数形式。
5)按字母顺序输出字符串,并快速手动搜索重复项。如果找到,请相应地定义新规则。

您可能需要的其他规则:

  • 将 & 替换为和。
  • 删除“inc”的所有实例
  • 用电视替换所有电视实例。
于 2009-09-28T20:04:34.163 回答