【发布时间】:2016-06-14 16:33:47
【问题描述】:
从列表中删除相似字符串的有效方法是什么?
考虑一个由这些(和其他)字符串组成的List<string>:
“SRS 投资管理有限责任公司”
“SRS 投资管理”
“枫林资本有限公司”
“枫林资本有限公司”
所以我需要做的是删除“足够相似”的字符串。我的想法是,这应该通过大写列表中的所有字符串来完成,然后删除与除另一个字符串的最后 X 个字符之外的所有字符串匹配的任何字符串。最后,我希望这给我留下一个列表,其中仅包含他们实际代表的每个现实公司的一个字符串。
关于如何实现这一点的任何想法?
【问题讨论】:
-
您应该对字符串使用 Levenshtein 距离来测量它们的接近程度,并删除某个阈值以下的任何字符串。如果你想得到导致某种全局最小值的字符串,你可能想做一些花哨的工作。这听起来并不是那么微不足道。
-
列表中有多少项(大约)?
-
您是否保证列表中的所有名称都具有从标准美式英语 26 字母表中提取的表示?例如,如果您需要将“Zürich Financial Services”与“Zurich Financial Services, Ltd”匹配,那么您手头的问题就比较困难了。这些字符串的第二个字符不匹配。
-
@spender 列表中大约有 10-20 个字符串
-
@EricLippert 它可能包含任何字符,还包括撇号、逗号等。