0

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

4

2 回答 2

1

首先,您需要将文档分成 n 个单词的字符串(1 个单词、2 个单词、3 个单词、...、n 个单词)——这些字符串称为 n-gram。参考这里

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

于 2012-10-03T13:51:46.250 回答
0

我建议您为每个文档维护一个单词树集,遍历第一个树集并检查匹配项与第二个应该完成您的任务。

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

word1 word2 word3 yay!

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

  1. 从标点符号中清除文件
  2. “索引”单词和连续单词组
  3. 比较阶段

关于第 1 点要小心,因为例如这些短语是相同的:

我吃了,猫没吃,我吃了

我吃了猫,不是吗?做过!

于 2012-10-03T13:52:34.923 回答