我有两个文本文档,想要在两个文档之间进行匹配。单词可以在任何地方匹配 - 例如,doc1的单词#5可以匹配单词#3和doc2的单词#67;然后doc1的单词#23可以再次匹配doc2的单词#3和单词#67 - 所以我想要所有的匹配。此外,除了单字匹配之外,我希望类似地在两个文档之间获得连续的多个(2个字,3个字...... 15个字等)字匹配。我该如何在Java中解决这个问题?我一直在研究正则表达式,但我仍然不相信确切的方法。
答案 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点要小心,因为例如这些短语是相同的:
我吃了,猫没有,我做了
我吃了猫,不是'我?做到了!