Algorithm 如何为多个文档中的字符串选择最佳匹配,其中两个文档的分数相等?

Algorithm 如何为多个文档中的字符串选择最佳匹配,其中两个文档的分数相等?,algorithm,pattern-matching,matching,elm,text-processing,Algorithm,Pattern Matching,Matching,Elm,Text Processing,我在中实现了一个算法,将一个句子(用户输入)与其他多个句子(数据)进行比较。算法就是这样工作的,用户输入和数据被转换成单词,然后我用单词来比较它们。该算法将用户输入的单词最多的数据中的任何句子标记为最佳匹配 现在,在第一次运行时,数据中的第一个句子将被计算为最佳匹配,然后转到第二个句子并查找匹配项。如果匹配数大于前一句,则第二句将被视为最佳匹配,否则为前一句 在这种情况下,如果两个句子中有相等的匹配项,那么目前我正在比较这两个句子的大小,并选择一个较小的句子作为最佳匹配项 没有涉及语义,所以这是

我在中实现了一个算法,将一个句子(用户输入)与其他多个句子(数据)进行比较。算法就是这样工作的,用户输入和数据被转换成单词,然后我用单词来比较它们。该算法将用户输入的单词最多的数据中的任何句子标记为最佳匹配

现在,在第一次运行时,数据中的第一个句子将被计算为最佳匹配,然后转到第二个句子并查找匹配项。如果匹配数大于前一句,则第二句将被视为最佳匹配,否则为前一句

在这种情况下,如果两个句子中有相等的匹配项,那么目前我正在比较这两个句子的大小,并选择一个较小的句子作为最佳匹配项

没有涉及语义,所以这是选择最佳匹配的最佳方法吗?在本例中,匹配的大小较小?或者还有其他更好的选择吗?我试图寻找一些科学参考文献,但没有找到

编辑:


总而言之,如果您想根据单词出现情况将一个句子与另外两个句子进行比较,如果两个句子的单词数量相同,并且也存在于您的比较句子中,那么哪一个可以标记为最相似?哪些方法用于检索此相似性?

可以添加一些因素以改进比较:

  • 字符串相似性(如Levenstein、Jaro Winkler等)
  • 通过为不同的句子长度(字符或单词级别)添加线性或几何惩罚,为句子长度添加参数
  • 清理字符串(删除停止字、特殊符号等)
  • 添加单词的顺序(位置)作为参数。因此,哪个词在另一个词之前/之后
  • 使用句子嵌入以获得相似性,还可以捕获一些语义()

最后,总会有一些句子与你的输入有相同的差异,尽管它们是不同的。这没关系,只要它们实际上与您输入的句子类似。

您可以添加一些因素来改善比较:

  • 字符串相似性(如Levenstein、Jaro Winkler等)
  • 通过为不同的句子长度(字符或单词级别)添加线性或几何惩罚,为句子长度添加参数
  • 清理字符串(删除停止字、特殊符号等)
  • 添加单词的顺序(位置)作为参数。因此,哪个词在另一个词之前/之后
  • 使用句子嵌入以获得相似性,还可以捕获一些语义()

最后,总会有一些句子与你的输入有相同的差异,尽管它们是不同的。没关系,只要它们实际上与你输入的句子有类似的不同。

如果你想更进一步,可以使用深度学习。 否则,检查最常见的单词(记住删除所有文本中出现过的单词,例如“或”、“和”), 此外,检查功能间标记的密度也可能有用。
波兰奥运会期间有一项非常酷的任务。我在这里使用了滚动哈希算法


如果你想更进一步,可以使用深度学习。 否则,检查最常见的单词(记住删除所有文本中出现过的单词,例如“或”、“和”), 此外,检查功能间标记的密度也可能有用。
波兰奥运会期间有一项非常酷的任务。我在这里使用了滚动哈希算法


据我所知,您正在寻找所谓的“字符串度量”。有很多,它们提供了不同的结果,所以我不知道哪一个最适合你的情况。维基百科提供了一个列表:。文本相似性度量的定义也会有所帮助。你会发现许多不同的方法和算法适用于各种各样的用例。据我所知,你正在寻找所谓的“字符串度量”。有很多,它们提供了不同的结果,所以我不知道哪一个最适合你的情况。维基百科提供了一个列表:。文本相似性度量的定义也会有所帮助。你会发现许多不同的方法和算法适用于各种各样的用例。很好的建议!请看一下这个例子。告诉我哪一个最适合我的输入。在本例中,searchString是我的输入,data是我的另外两个句子。两个句子中都有三个单词,它们也存在于我的输入中。你可以想出任何例子。我是根据字数来比较的。Levenshtein或Jaro在这种情况下有什么帮助?单词的数量可能会非常错误,因为单词之间可能不同,单词可能以不同的方式书写。例如:我踢足球踢得很好,单词的数量可能非常错误,因为单词之间可能不同,单词可能以不同的方式书写,等等。在您的示例中,两个句子与输入单词有一个单词的差异,因此如果它们具有相同的相似性,则是可以的,因为您可以在单词级别上进行比较。例如:雅罗·温克勒和莱文施泰因会使“我在踢足球”比“我在打鼓”更类似于“我在打futball”。严格的字数计算会使“我在打鼓”更为相似。虽然有堵塞,但在生产中通常不起作用。我提到的最先进的方法是BERT(变形金刚)。因为他们是在语料库上训练的,所以他们也能处理意思。因此,“我在踢足球”将更类似于“我在踢足球”,而不是“我在打鼓”,因为嵌入模型了解到,足球和足球非常相似。这