说我有这个文字= I love apples, kiwis, oranges and bananas
,而searchString = kiwis and bananas
和a similarity algorithm说Jaccard index。如何有效地找到text
中与searchString
具有最高相似度的子字符串。
基本上我试图找到与我所拥有的关键字列表相匹配的文本部分(文本有高错误,拼写错误,额外符号和空格)。
答案 0 :(得分:4)
Jaccard索引是“幸运”的相似度算法,因为您可以更新它的新符号值而无需重新计算所有以前的内容。因此,您可以将text
视为结果索引值的差异序列。之后,问题可以减少到https://en.wikipedia.org/wiki/Maximum_subarray_problem。
你的第二段怎么样,如果你正在进行类似NLP的研究,我建议在进一步处理之前清理你的数据(删除那些额外的符号和空格,只要可能)。这被称为“拼写纠正”,并且有大量不同的算法和库。要选择合适的,需要有关您的域的额外信息。
答案 1 :(得分:2)
看看shingling技术,并尝试找到相似性。 您可以点击此链接:http://nlp.stanford.edu/IR-book/html/htmledition/near-duplicates-and-shingling-1.html
例如,使用9个shingle并将每个子集与您的特定关键字进行比较
答案 2 :(得分:1)
我使用Stemming 和Levenshtein distance
这是运作中的算法:https://wizsearch.wizsoft.com/index.php/demo/
此演示搜索所有wiki标题,尝试“显示搜索词”选项以查看Levenshtein距离和纠错算法。
答案 3 :(得分:0)
针对字典检查每个查询字词。 如果在词典中找不到术语,那么词典中的这些词会显示为拼写建议,这与所讨论的查询词最相似。
相似/编辑距离 由于两个词之间的相似性度量通常是Damerau-Levenshtein距离https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance
很少有其他参考