在文档管理应用程序中检查文档重复项和类似文档

时间:2009-11-13 12:36:56

标签: php linux duplicates document-management dms

更新:我现在已经为ssdeep C API编写了一个名为 php_ssdeep 的PHP扩展,以便在本机中简化PHP中的模糊散列和散列比较。可以在 over at my blog 找到更多信息。我希望这对人们有所帮助。

我参与在Linux上编写一个自定义文档管理应用程序,它将存储各种文件格式(可能是1000个文件),我们需要能够检查之前是否已上载文本文档以防止重复在数据库中。

基本上,当用户上传新文件时,我们希望能够向他们提供重复或包含类似内容的文件列表。然后,这将允许他们选择一个预先存在的文档或继续上传他们自己的文档。

类似的文件将通过查看类似的传票内容以及动态生成的关键字列表来确定。然后,我们可以向用户显示百分比匹配,以帮助他们找到重复项。

您能否为此过程推荐任何套餐以及过去如何做到这一点的任何想法?

我认为直接复制可以通过获取所有文本内容和

来完成
  • 剥离空白
  • 删除标点符号
  • 转换为大写或小写

然后形成MD5哈希以与任何新文档进行比较。如果用户编辑文档以添加额外的段落中断,则剥离这些项目应有助于防止找不到欺骗。有什么想法吗?

此过程也可能作为夜间作业运行,如果计算要求太大而无法实时运行,我们可以在下次登录时通知用户任何重复项。然而,实时将是首选。

2 个答案:

答案 0 :(得分:5)

更新:我现在已经为ssdeep C API编写了一个名为 php_ssdeep 的PHP扩展,以便在本机中简化PHP中的模糊散列和散列比较。可以在 over at my blog 找到更多信息。我希望这对人们有所帮助。

我找到了一个程序,它的创造者Jesse Kornblum称之为“模糊哈希”。基本上它会使文件的哈希值可以用来检测类似的文件或相同的匹配。

背后的理论记录在此:Identifying almost identical files using context triggered piecewise hashing

ssdeep是程序的名称,可以在Windows或Linux上运行。它旨在用于法医计算,但它似乎足以满足我们的目的。我在旧的Pentium 4机器上做了一个简短的测试,需要大约3秒才能通过一个23MB的哈希文件(哈希值只有不到135,000个文件)来查找两个文件的匹配。那段时间包括为我正在搜索的两个文件创建哈希值。

答案 1 :(得分:1)

我正在研究web2project中的类似问题,在询问并挖掘之后,我得出结论“用户不关心”。拥有重复文档对用户来说并不重要只要他们可以通过自己的名称找到自己的文档。

话虽如此,这是我正在采取的方法:

  • 允许用户上传与其关联的文档与他们想要的任何项目/任务;
  • 应该重命名该文件,以防止有人通过http ...或更好地存储在Web根目录之外。用户仍然会在系统中看到他们的文件名,如果他们下载了它,你可以用“正确”的文件名设置标题;
  • 在将来的某个时刻,处理文档以查看是否存在重复..但此时,我们修改文档。毕竟,可能有重要原因改变了空白或大写;
  • 如果有傻瓜,请删除新文件,然后链接到旧文件;
  • 如果没有愚蠢,什么也不做;
  • 为搜索字词索引文件 - 根据文件格式,有很多选项,即使对于Word文档也是如此;

在所有这些中,我们并没有告诉用户它是重复的......他们并不关心。我们(开发人员,数据库管理员等)关心。

是的,即使他们稍后上传了该文件的新版本,这仍然有效。首先,删除对文件的引用,然后 - 就像在垃圾收集中一样 - 只有在没有引用它的情况下才删除旧文件。