【问题标题】:Algorithm to identify similarity between text messages识别短信之间相似性的算法
【发布时间】:2014-02-28 23:31:21
【问题描述】:

我正在寻找一种算法,它可以比较两条短信(比如论坛帖子)并确定相似度的百分比。

为此目的最有效的解决方案是什么?

这个想法是使用这个算法来识别论坛上拥有两个以上昵称的用户,假装是不同的人。

我将构建一个程序,该程序将读取他们的所有帖子,并将第一个帐户的每个帖子与第二个帐户的帖子进行比较,以确定他们是真正的两个不同的人,还是只是一个用户的两个注册。

【问题讨论】:

  • 我认为那里有一些很好的字符串比较算法。我个人用过this one before,它有一个非常简单的API,而且做得很快。
  • 这在很大程度上取决于“相似”和“最佳”的含义。有快速的方法可以做得很好,也有慢的方法可以做得很好,并且两者之间有很多空间。您可能对Semantic similarity 感兴趣,或者您可能对Stylometry 感兴趣,它用于确定某个特定的文本位是否可能是由某个特定的人编写的。如所问,您的问题范围很广,可以得出一个好的答案。

标签: c# .net algorithm text similarity


【解决方案1】:

我首先想到的是Levenshtein Distance,但它更侧重于单词的相似之处。

您可以使用tf-idf,但如果您的语料库包含两个以上的文档,它可能会更好。

另一种方法是使用向量空间模型表示文档(帖子),例如:

(w_0, w_1, ..., w_k)

在哪里

  • k 是您文档中的词条总数
  • w_ii-th 术语。

然后计算Hamming Distance,它基本上比较两个向量(数组)并计算它们不同的位置。您可以先丢弃停用词(即介词等词)

考虑到用户可能会更改一些单词、使用同义词等。有很多模型用于表示文档,计算它们之间的相似性。其中一些考虑了计数词依赖,这为流程提供了更多语义,而另一些则没有。

【讨论】:

  • 这里不能使用汉明距离,因为它逐个单元地比较向量。如果其中一个文档仅移动一个单词,则汉明距离会很高。
  • @Warlord 你是对的。也许,在这种情况下,当仅比较两个文档时,diff 算法(如 vimdiff、Beyond Compare 等使用的算法)更适合。
【解决方案2】:

google-diff-match-patch 将是您的不错选择。您可以查看演示进行测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-09
    • 2015-02-17
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    相关资源
    最近更新 更多