问题是——我有几千个小文本片段,从几个单词到几个句子——最大的片段在磁盘上大约有 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库,很可能会在你的应用程序非常有用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top