我如何 select 对多个文档中的字符串进行最佳匹配,其中两个文档的分数相等?

How, do I select the best match for a string in multiple documents, where the score is equal for both?

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

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

以防万一,如果两个句子中有相等的匹配,那么目前我正在比较这两个句子的大小,select比较较小的那个作为最佳匹配。

不涉及任何语义,所以这是 select 最佳匹配的最佳方式,在这种情况下尺寸较小?还是有其他更好的选择?我试图寻找一些科学参考资料,但找不到。

编辑:

总而言之,如果你想比较一个句子和另外两个句子,根据单词出现的次数,如果两个句子的单词数量相同,也存在于你的比较句子中,那么哪一个可以是标记为最相似?哪些方法用于检索这种相似性?

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

  • 字符串相似性(例如 Levensthein、Jaro-Winkler 等)
  • 通过为不同的句子长度(在字符或单词级别)添加线性或几何惩罚来添加句子长度的参数
  • 清理字符串(删除停用词、特殊符号等)
  • 添加单词的顺序(位置)作为参数。因此哪个词是 before/after 另一个词。
  • 使用 Sentence Embeddings 获得相似性以捕获一些语义 (https://www.analyticsvidhya.com/blog/2020/08/top-4-sentence-embedding-techniques-using-python/)

最后,总会有一些句子和你的输入有一样的区别,虽然不一样。没关系,只要它们实际上与您输入的句子有相似的不同即可。

好吧,如果您想更进一步,可以使用深度学习。 否则检查最频繁的单词(记住删除所有文本中出现的单词,例如“或”、“和”), 检查标点符号的密度也很有用。
波兰奥林匹克运动会期间有一项超酷的任务。我这里用的是rolling hash算法。

https://szkopul.edu.pl/problemset/problem/v2Y2_UW56ENMcbwP22tkTb7a/site/?key=statement