假设数据库中有许多行需要搜索重复项。
重复项被视为具有超过 95% 的文本匹配度。
项目数量可以超过 50000 个甚至更多,并且项目不仅仅是 1 个单词,最多可以有 5000 个字符。
查找此类重复文本的策略是什么?
我不认为逐行选择行并将其与其他 49999 行进行比较是有效的,这纯粹是废话。
还有其他可能的解决方案吗?
最佳答案
您需要做的第一件事是定义“95% 文本匹配”的含义。例如,请考虑以下情况:
The quick red fox jumped over the lazy brown dog.
The qZick rZd fox jumped over the lazy brown dog.
这两句话各有 49 个字符长。它们的区别仅在于两个“Z”字符。因此有 47 个字符相同,这意味着文本相似度为 95.92%。如果你按性格行事。
如果你按单词来看,那么文本只有 80% 相似。
顺序重要吗?假设您的文本长度为 4,800 个字符。我们将该文本称为“固定”。现在要求您将其与前置两个单词的内容进行比较。即:
some stuff <fixed>
从许多方面来看,这与固定
相似度超过 95%。或者怎么样:
<fixed> some stuff
这是否比以前更类似于fixed
?反向固定
的文本怎么样?包含所有fixed
但还有一些额外单词的文本怎么样?缺少单词吗?
我问这些问题并不是迂腐的。如何定义相似性会对您解决问题的方式产生很大影响。
顺便说一句,你是对的,将每个文本与所有其他文本进行比较并不是正确的方法。您最终会进行 (n^2 - n)/2
文档比较。当n == 50,000
时,其数量级为 1.25十亿。
关于php - 比较多个字符串的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20980653/