我正在寻找一种找到两个字符串之间最接近的字符串匹配的方法,这些字符串最终可能具有非常不同的大小。 假设我一方面有一个可能的位置列表,例如:
优胜美地国家公园
优胜美地山谷
优胜美地国家公园旅馆
优胜美地国家公园游客中心
旧金山
旧金山金门公园
巴黎
纽约
曼哈顿纽约
香港
另一方面,我有多个句子,例如:
现在说我想从这组句子中提取位置,我将继续这样做吗?我知道Levenshtein distance algorithm,但是我不确定它在这里是否可以有效地工作,尤其是因为我有更多的位置和更多的句子可供尝试和匹配。我想我希望对每个位置都具有某种匹配分数,以便我可以选择得分最高的那个,但是我不知道如何计算该分数。
你们对如何做到有任何想法吗?甚至是实现或python包?
预先感谢
答案 0 :(得分:2)
您可能要查看来自维基百科的Aho-Corasick algorithm:
在计算机科学中,Aho–Corasick算法是一个字符串搜索 Alfred V. Aho和Margaret J. Corasick发明的算法。它是一个 一种定位字典元素的字典匹配算法 输入文本内的一组有限的字符串(“字典”)。它 同时匹配所有字符串。该算法的复杂度为 字符串长度与搜索长度成线性关系 文字加上输出匹配项的数量。
在您的示例中,字符串字典是位置列表,输入文本是句子。有几种使用多种语言的实现,我建议使用flashtext(Python),并举一个例子:
docs.microsoft
输出
SZ_THDOCPROP_CANONICALNAME
答案 1 :(得分:1)
对于这样的工作,您通常使用来按以下一般顺序处理某些事情:
参考
我可能应该补充一点,当您有大量文档时,更经常使用这种管道,并且每个文档分别也要大得多。由于“文档”和“查询”的表示方式完全相同,因此在您希望对文档进行分类和分组的情况下(也就是查找彼此相似的文档),它也很有用/有用。