我有几千个术语的列表。这些术语有很大的重叠,但形式不同。例如 (ruby, a_ruby), (triathlon, triathlete, triathletes), (nonprofit, non_profit, non_profits)。
其中大多数有大量的字符重叠,但不完全相同。例如,(非营利组织和非营利组织)
什么正则表达式序列最适合这个?我知道我也可以使用词干提取,但想知道如何将它与正则表达式结合起来。
我有几千个术语的列表。这些术语有很大的重叠,但形式不同。例如 (ruby, a_ruby), (triathlon, triathlete, triathletes), (nonprofit, non_profit, non_profits)。
其中大多数有大量的字符重叠,但不完全相同。例如,(非营利组织和非营利组织)
什么正则表达式序列最适合这个?我知道我也可以使用词干提取,但想知道如何将它与正则表达式结合起来。
对于几千个项目的单个列表,我会考虑另一种方法。
按字母顺序对列表进行排序,然后手动删除重复项。无论您最终使用何种正则表达式和后续处理,都可能会花费与手动浏览列表一样多的时间。
当然,我假设这是一个一次性的提议。我听从正则表达式专家的程序化解决方案。
我同意 Bob Kaufman 的观点,即您应该首先通过以消除实际重复。之后,您遇到了正则表达式无法为您解决的问题;您将需要研究编辑距离的测量值才能使用它。
在这种情况下,我通常的策略是不完全可靠的,如下所示:
1) 删除所有非字母数字字符。
2)使所有字符串小写。
3)将所有字符串放入 a HashSet
(这将删除重复项)。
4) 检查其中word
和word+"s"
都在集合中的任何情况,并删除复数形式。
5)按字母顺序输出字符串,并快速手动搜索重复项。如果找到,请相应地定义新规则。
您可能需要的其他规则: