如何在两个文件之间匹配一个单词或2,3,4,5个连续单词?

时间:2012-10-03 13:32:15

标签: java text matching

我有两个文本文档,想要在两个文档之间进行匹配。单词可以在任何地方匹配 - 例如,doc1的单词#5可以匹配单词#3和doc2的单词#67;然后doc1的单词#23可以再次匹配doc2的单词#3和单词#67 - 所以我想要所有的匹配。此外,除了单字匹配之外,我希望类似地在两个文档之间获得连续的多个(2个字,3个字...... 15个字等)字匹配。我该如何在Java中解决这个问题?我一直在研究正则表达式,但我仍然不相信确切的方法。

2 个答案:

答案 0 :(得分:1)

首先,您需要将文档分成n个单词(1个单词,2个单词,3个单词,...,n个单词) - 这些单词称为n-gram。请参阅here

其次,从文档A创建一组n-gram。然后,对于文档B中的每个n-gram,检查它是否在集合中。

答案 1 :(得分:0)

我建议你为每个文档维护一个单词的树集,循环通过第一个树集并检查匹配与第二个匹配应该完成你的任务。

对于多个单词部分使用相同的技巧只获得两个单词组,例如

word1 word2 word3 yay!

word1 word2并将其放入树集中,然后取word2 word3并执行相同操作。您可以使用正则表达式来删除标点符号,因此算法应包含三个步骤:

  1. 从标点符号清除文档
  2. “索引”单词和连续单词组
  3. 比较阶段
  4. 关于第1点要小心,因为例如这些短语是相同的:

      

    我吃了,猫没有,我做了

         

    我吃了猫,不是'我?做到了!