【问题标题】:How do I compare phrases for similarity?如何比较短语的相似性?
【发布时间】:2008-09-16 21:08:38
【问题描述】:

输入问题时,stackoverflow 会向您显示它认为可能涵盖同一主题的问题列表。我在其他站点或其他程序中也看到了类似的功能(例如,帮助文件系统),但我自己从未编写过类似的东西。现在我很想知道为此使用哪种算法。

我想到的第一个方法是将短语拆分为单词并查找包含这些单词的短语。在你这样做之前,你可能想扔掉无关紧要的词(比如'the'、'a'、'does'等),然后你会想要对结果进行排名。

嘿,等等 - 让我们为网页做这件事,然后我们可以有一个 ... watchamacallit ... - 一个“搜索引擎”,然后我们可以销售广告,然后...

不,说真的,解决这个问题的常用方法是什么?

【问题讨论】:

    标签: algorithm full-text-search


    【解决方案1】:

    一种方法是所谓的词袋模型。

    如您所料,首先您计算单词在文本中出现的次数(通常在 NLP 术语中称为文档)。然后你扔掉所谓的停用词,比如“the”、“a”、“or”等等。

    剩下的就是字数和字数。这样做一段时间,您将获得出现在文档中的一组全面的单词。然后,您可以为这些单词创建索引: “土豚”是 1,“苹果”是 2,...,“z-index”是 70092。

    现在你可以把你的词袋变成矢量了。例如,如果您的文档包含两个对土豚的引用而没有其他内容,则它看起来像这样:

    [2 0 0 ... 70k zeroes ... 0].
    

    在此之后,您可以用a dot product 计算两个向量之间的“角度”。角度越小,文档越接近。

    这是一个简单的版本,还有其他更高级的技术。愿Wikipedia be with you

    【讨论】:

      【解决方案2】:

      @Hanno 你应该试试 Levenshtein 距离算法。给定输入字符串 s 和字符串列表 t 迭代 t 中的每个字符串 u 并返回具有最小 Levenshtein 距离的一个。

      http://en.wikipedia.org/wiki/Levenshtein_distance

      查看http://www.javalobby.org/java/forums/t15908.html中的Java实现示例

      【讨论】:

        【解决方案3】:

        增强词袋的想法:

        您还可以通过几种方法来关注 n-gram,即按顺序排列的两个或多个单词的字符串。您可能想要这样做,因为搜索“空间复杂性”不仅仅是搜索其中包含“空间”和“复杂性”的事物,因为该短语的含义不仅仅是其各部分的总和;也就是说,如果你得到一个谈论外太空和宇宙复杂性的结果,这可能不是搜索“空间复杂性”的真正含义。

        这里自然语言处理的一个关键思想是mutual information,它允许您(算法上)判断一个短语是否真的是一个特定的短语(例如“空间复杂度”)或者只是巧合的单词邻近的。从数学上讲,主要思想是概率性地询问这些词是否比您仅凭它们的频率猜测的更频繁地出现在彼此旁边。如果您在搜索查询中(或在编制索引时)看到具有较高互信息分数的短语,则可以通过尝试保持这些词的顺序来获得更好的结果。

        【讨论】:

          【解决方案4】:

          根据我开发全文搜索引擎的(相当少的)经验:我会查找包含查询中一些单词的问题(在您的情况下,查询是您的问题)。 当然,干扰词应该被忽略,我们可能想要检查“ASP.Net”等“强”词的查询以缩小搜索范围。 http://en.wikipedia.org/wiki/Index_(search_engine)#Inverted_indices'>倒排索引通常用于查找我们感兴趣的单词的问题。

          在从查询中找到带有单词的问题后,我们可能想要计算我们对问题感兴趣的单词之间的距离,因此带有“短语相似性”文本的问题排名高于带有“讨论相似性,您听到以下短语... ' 文本。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-12-26
            • 2012-04-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多