这就是问题所在——我有几千个小文本片段,从几个单词到几个句子不等——最大的片段在磁盘上大约有 2k。我希望能够相互比较,并计算相关性因子,以便向用户显示相关信息。
有什么好的方法可以做到这一点?是否有已知的算法可以做到这一点,是否有任何 GPL 解决方案等?
我不需要它来实时运行,因为我可以预先计算一切。我更关心获得好的结果而不是运行时。
我只是想在编写自己的东西之前先问问 Stack Overflow 社区。必须有人在此之前找到了很好的解决方案。
这就是问题所在——我有几千个小文本片段,从几个单词到几个句子不等——最大的片段在磁盘上大约有 2k。我希望能够相互比较,并计算相关性因子,以便向用户显示相关信息。
有什么好的方法可以做到这一点?是否有已知的算法可以做到这一点,是否有任何 GPL 解决方案等?
我不需要它来实时运行,因为我可以预先计算一切。我更关心获得好的结果而不是运行时。
我只是想在编写自己的东西之前先问问 Stack Overflow 社区。必须有人在此之前找到了很好的解决方案。
我从来没有用过,但你可能想看看Levenshtein 距离
Jeff 在播客中谈到了类似的内容,以便在此处找到右侧列出的相关问题。(在播客 32 中)
一个重要提示是删除所有常用词,例如“the”“和”“this”等。这将为您留下更有意义的词来比较。
这是一个类似的问题有没有一种算法可以告诉两个短语的语义相似性
这对于合理的大文本是非常可行的,但对于较小的文本则更难。
我这样做过一次,效果很好:
请参阅 Manning 和 Raghavan 关于MinHashing和搜索类似项目的课程说明,以及C#(?) 版本。我相信这些技术来自 Ullman 和 Motwani 的研究。
语音算法
文章Beyond SoundEx - MS SQL Server 中的模糊搜索功能介绍了如何在 SQL Server 中安装和使用SimMetrics库。该库可让您找到字符串之间的相对相似性,并包含许多算法。
我最终主要使用Jaro Winkler来匹配名称。以下是我询问关于 SO 上匹配名称的更多信息:基于人名匹配记录
SimMetric 库中也提供了一些基于Levenshtein 距离的算法,它们可能对您的应用程序很有用。