【问题标题】:An Algorithm to Determine How Similar Two Sentences Are确定两个句子相似程度的算法
【发布时间】:2017-04-08 21:08:47
【问题描述】:

我的一个朋友有一个想法,要制作一个逐字显示单词的速读程序(很像目前现有的速读程序)。但是,该程序会过滤掉对含义不完全必要的单词(如果您想略读某些内容)。

我已经开始实现这个程序,但我不太确定删除“不重要”单词的算法应该是什么。

我的想法是解析句子(我目前正在使用斯坦福解析器)并以某种方式根据该词对句子对每个词的意义的重要性来分配权重,然后开始删除权重最低的词。我将继续这样做,检查原始树和新树有多“不同”。我将继续删除权重最低的单词,直到两棵树相差太大(我将通过每个用户经历一次的“校准”过程确定一些常数)。最后,我将检查缩短句子的每个单词,并尝试用该单词的更简单或更短的同义词替换它(再次尝试保留值)。

同样,“the”、“a”和“of”等非常常见的词也会有特殊情况。

例如:

“比利对简说,‘你想出去吗?’”

会变成:

“比利告诉简‘想出去吗?’”

这将基本上保留句子的所有含义,但会大大缩短它。

这对算法来说是个好主意吗?如果是,我将如何分配权重,我应该使用什么树比较算法,以及在一个好地方插入同义词(即应该在我之前完成尝试删除任何字词)?

【问题讨论】:

  • 您是一心想从头开始做这一切,还是可以使用 NLTK 或 gensim 等库?
  • 我肯定愿意使用其他库,例如 nltk
  • this 和一个链接的副本。
  • @PaulRooney tf-idf 和 gensim 在两个非常相似的句子上都能很好地工作吗?我原以为这些是为了确定 2 个不同结构的句子是否相似?

标签: python algorithm parsing tree nlp


【解决方案1】:

假设您使用词嵌入作为加权逻辑,因为我想不出更好的方法来做到这一点,您可以将短语转换为向量并比较这些向量。 a、an、the 等低权重的词,会很好地处理。

本教程可能会对您有所帮助:Phrase2Vec In Practice

【讨论】:

    【解决方案2】:

    你可以使用本文介绍的方法来计算两个句子的相似度:Corpus-based and Knowledge-based Measures of Text Semantic Similarity

    您可以删除单词,直到与原始句子的相似度显着下降(这本身就是一个有趣的问题)。

    你也可以在这里查看这个简化版的相似度算法:Wordnet Sentence Similarity

    【讨论】:

      【解决方案3】:

      分配权重是一个百万美元的问题。作为第一步,我将识别句子的各个部分(主语-谓语-从句等)和句子结构(简单-复合-复杂等),以找到权重最高的“锚”词。这应该会使其余的任务变得更容易。

      【讨论】:

      • “anchor”词会是最接近句子结构树根的词吗?
      • 这就是研究的用武之地。但是,直觉上,我会说句子的每个部分都会有一个主要词,句子的某些部分会比其他部分更重要 - 例如, subject 的主要词不能省略。所以是的——如果你围绕那些应该减少算法以后需要做的工作量的想法来构建你的树。另外,我认为尽早确定上下文并不是一个坏主意,因为根据上下文,相同的词会有不同的权重。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 2015-03-25
      • 2017-05-28
      • 1970-01-01
      相关资源
      最近更新 更多