【问题标题】:Find the similar words or phrases from two texts从两个文本中找到相似的单词或短语
【发布时间】:2011-09-08 18:08:42
【问题描述】:

我知道如何比较两个文本并获取出现在两个文本中的所有单个单词。但是如何匹配表达式/短语?

例如: 1.“这是电脑制造商苹果” 2.“Apple 是一家总部位于加州的伟大计算机制造商”

现在:)

  1. Apple 显然存在于两者中。

  2. 计算机和制造商都存在于两者中。我可以在这一点上检查它们是否是一组单词(一个跟随另一个)。

但是为了处理速度,有没有办法匹配“计算机制造商”而不是每个人,然后检查是否作为一个组存在。

请记住,给出的示例是微不足道的,只是为了举例说明,在实践中可能会呈现更复杂的句子/文本。

【问题讨论】:

    标签: php logic


    【解决方案1】:

    您可以解析两个字符串并在空格上拆分以获取令牌数组 A1 和 A2。然后,只需检查 A1 中的每个连续子序列以查找 A2 中的匹配子序列。对我来说,这看起来像 O(n^4),这比获得所有单个匹配项并寻找组合要好......这不是多项式。

      1. the cat is on the roof
      2. a man is on the stage
    
      A1 = [the, cat, is, on, the, roof]
      A2 = [a, man, is, on, the, stage]
    
      [the]: no match
      [cat]: no match
      [is]: match
      [is, on]: match
      [is, on, the]: match
      [is, on, the, roof]: no match
      [on]: match
      [on, the]: match
      [on, the, roof]: no match
      [the]: match
      [the, roof]: no match
      [roof]: no match
      -end-
    

    递归似乎是一种优雅的方式来实现这样的事情。如果您需要更高效的东西,我相信还有比这更聪明的方法。

    【讨论】:

    • 希望 google 不使用 O(n^4) 算法来检查网站中的内容修改。
    • 是的,但有几点观察...很容易理解,比OP的建议要好得多,并且它的平均案例性能可能比O(n^4)好得多,可能更接近O (n^2).
    【解决方案2】:

    编辑:听起来您可能正在寻找the longest common substring problem 的解决方案,或者更普遍的是the longest common subsequence problem。如果是这种情况,那么您基本上需要“diff”实用程序的变体,当然实现的细节在很大程度上取决于您的需求细节。

    【讨论】:

    • 如果他想要所有常见的字符串,这似乎不是正确的方法......也许我错过了一些东西。也许 LCS 的规范解决方案会访问所有候选人,因此可以枚举他们?
    • -1 用于用问题回答问题。如果这是您想要了解的内容,您应该将其作为评论留下。
    • @barfoon:一个语义上的小问题,IMO。但我不是专家,所以如果这就是我们在这里滚动的方式,那很好。
    • @Peter - 我同意你的观点,并不想太迂腐,只是一个好公民。感谢您没有粗鲁回应:)
    • @barfoon:由于原发帖人没有做任何额外的cmets,我将把我的反问题重写为有条件的答案。
    猜你喜欢
    • 2012-07-31
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多