我有一个包含数千条记录的大型数据库。每次用户发布他的信息时,我都需要知道是否已有相同/相似的记录。是否有任何算法或开源实现来解决这个问题?
我们正在使用中文,而'类似'的意思是记录内容最相同,可能是80%-100%是相同的。每条记录都不会太大,大约2k-6k字节
答案 0 :(得分:3)
答案 1 :(得分:1)
这个答案是一个非常高的复杂性类(最坏的情况是它的五倍,预期情况是第一次验证你的数据库是四分之一,然后是四分之一/立方来添加记录),所以它不能很好地扩展,不幸的是那里我现在想的不是一个更好的答案。
该算法称为Ratcliff-Obershelp algorithm,它在python的difflib中实现。算法本身是立方时间最坏情况和二次期望。然后,您必须为每对可能的记录执行此操作,这两个记录是二次的。当然,添加记录时,这只是线性的。
编辑:对不起,我误读了文档,difflib只是二次方而不是立方。使用它而不是其他算法。
答案 2 :(得分:1)
看看shingle-minhash技术。这是presentation,可以帮助您。
答案 3 :(得分:0)
我曾经习惯做类似的一种方法是在通常基于单词统计数据构建搜索索引,然后使用新项目,就像它是对该索引的搜索一样 - 如果是顶级项目的分数搜索太高,新项目太相似了。毫无疑问,一些标准的文本搜索库可以用于此,但如果它只有几千条记录,那么构建自己的记录就非常简单了。