有哪些好方法可以找到两个文本主体的“相关性”?
-
20-09-2019 - |
题
问题是——我有几千个小文本片段,从几个单词到几个句子——最大的片段在磁盘上大约有 2k。我希望能够对每个进行比较,并计算相关性因子,以便我可以向用户显示相关信息。
有哪些好的方法可以做到这一点?是否有任何好的已知算法可以做到这一点,是否有任何 GPL 解决方案等?
我不需要它实时运行,因为我可以预先计算一切。我更关心获得好的结果而不是运行时间。
我只是想在编写自己的东西之前先询问 Stack Overflow 社区。之前肯定有人已经找到了很好的解决方案。
其他提示
我从来没有使用过它,但你可能想看看 Levenshtein距离
杰夫在播客中谈到了类似的事情,以找到右侧列出的相关问题。(在播客 32 中)
一个重要的提示是删除所有 常用的词, ,如“这个”“和”“这个”等。这将为您留下更有意义的单词进行比较。
这是一个类似的问题 有没有一种算法可以告诉两个短语的语义相似度
这对于合理的大文本来说是完全可行的,但对于较小的文本来说就更难了。
我这样做过一次,效果很好:
- 过滤所有“一般”单词(例如 a、an、the、in 等)(过滤大约 10-30% 的单词)
- 计算剩余单词的频率,存储最常见单词的前 x 个,这些就是您的主题。
- 作为额外的步骤,您可以创建 2/3/4 个后续单词的组,并将它们与其他文本中的组进行比较。我用它作为抄袭的衡量标准。
请参阅有关 MinHashing 和搜索曼宁和拉加课程笔记类似的项目,以及 C#(?)版本。我相信,这些技术来自乌尔曼和Motwani的研究。
<强>语音算法强>
的制品,超越SoundEx代 - MS SQL Server中的模糊搜索功能,演示了如何安装和使用 SimMetrics 库到SQL Server。这个库可以让你找到字符串之间的相对相似性,包括许多算法。
我结束了大多使用哈罗温克勒来匹配的名称。这里就是我问起SO匹配名称的详细信息:基于人名<匹配的记录/一>
基于 Levenshtein距离的几个算法也可在SimMetric库,很可能会在你的应用程序非常有用。
不隶属于 StackOverflow