【问题标题】:Determining if two or more summaries are similar确定两个或多个摘要是否相似
【发布时间】:2010-10-14 20:35:38
【问题描述】:

问题如下:

我有一个摘要,通常在 20 到 50 个字之间,我想将其与其他相对相似的摘要进行比较。摘要所指的一般类别和地理位置是已知的。

例如,如果来自同一地区的人们正在撰写关于建造房屋的文章,我希望能够列出这些摘要,并且在一定程度上确定他们实际上指的是建造房屋而不是建造车库或后院游泳池。

该数据集目前大约有 50 000 个文档,每天增长约 200 个文档。

首选语言是 Python、PHP、C/C++、Haskell 或 Erlang,无论哪种语言都能完成工作。另外,如果您不介意,我想了解选择特定语言的原因。

【问题讨论】:

    标签: pattern-matching neural-network similarity fuzzy


    【解决方案1】:

    你可以看看WEBSOM project

    尽管他们的网站今年没有完全更新,但正在解决的问题非常相似。就像 10 年前一样,他们处理的数据量与您(甚至更多)相似,今天您几乎可以在手机上运行这些算法。

    【讨论】:

    • 您可能已经猜到了,我的数据主要是芬兰语,所以这可能被证明是非常相关的。我明天必须深入研究。
    【解决方案2】:

    实际上没有特定的语言可供选择。您正在尝试查找语义相似性。这是一个非常大的区域。您可能对这篇论文感兴趣:

    Corpus-based and Knowledge-based Measures of Text Semantic Similarity

    【讨论】:

    • 是的,我试图避开语义方法,因为在芬兰语中查找相关术语是我没有能力解决的问题。
    【解决方案3】:

    您可以尝试使用一些字符串相似度度量,例如 Jaccard 和 Dice,但不是计算字符重叠,而是计算单词重叠。例如,使用 Python,您可以使用以下内容:

    def word_overlap(a, b):
        return [x for x in a if x in b]
    
    
    def jaccard(a, b, overlap_fn=word_overlap):
        """
        Jaccard coefficient (/\ represents intersection), given by :
            Jaccard(A, B) = (A /\ B) / (|a|) + (|b|) - (A /\ B)
        """
        c = overlap_fn(a, b)
        return float(len(c)) / (len(a) + len(b) - len(c))
    
    jaccard("Selling a beautiful house in California".split(), "Buying a beautiful crip in California".split())
    

    【讨论】:

      【解决方案4】:

      由于python中对集合有很好的原生支持,我们可以将JGs code修改为,

      def jaccard(a, b):
          """
          Jaccard coefficient (/\ represents intersection), given by :
              Jaccard(A, B) = (A /\ B) / (|a|) + (|b|) - (A /\ B)
          """
          c = a.intersection(b)
          return float(len(c)) / (len(a) + len(b) - len(c))
      
      jaccard(set("Selling a beautiful house in California"), set("Buying a beautiful crip in California"))
      

      【讨论】:

      • 这和JGs版本不一样,他是在一组单词上计算Jaccard,而你是在一组字符上计算。您可以进一步简化函数,只需返回 float(len(a & b)) / len(a | b)。注释中的公式错误(括号错误)。
      • 华金,我确实是正确的。感谢您指出这一点。
      猜你喜欢
      • 2011-04-25
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-28
      相关资源
      最近更新 更多