簡體   English   中英

在文檔管理應用程序中檢查文檔重復項和類似文檔

[英]Checking for document duplicates and similar documents in a document management application

更新:我現在已經為ssdeep C API編寫了一個名為php_ssdeep的PHP擴展,以便在本機中簡化PHP中的模糊散列和散列比較。 可以在我的博客上找到更多信息。 我希望這對人們有所幫助。

我參與在Linux上編寫一個PHP自定義文檔管理應用程序,它將存儲各種文件格式(可能是1000個文件),我們需要能夠檢查文本文檔是否已經上傳,以防止數據庫中的重復。

基本上,當用戶上傳新文件時,我們希望能夠向他們提供重復或包含類似內容的文件列表。 然后,這將允許他們選擇一個預先存在的文檔或繼續上傳他們自己的文檔。

類似的文件將通過查看他們的相似發送的內容以及可能是動態生成的關鍵字列表來確定。 然后,我們可以向用戶顯示百分比匹配,以幫助他們找到重復項。

你能推薦一下這個過程的包嗎?以及你過去如何做到這一點的想法?

我認為可以通過獲取所有文本內容來完成直接復制

  • 剝離空白
  • 刪除標點符號
  • 轉換為大寫或小寫

然后形成MD5哈希以與任何新文檔進行比較。 如果用戶編輯文檔以添加額外的段落中斷,則剝離這些項目應有助於防止找不到欺騙。 有什么想法嗎?

此過程也可能作為夜間作業運行,如果計算要求太大而無法實時運行,我們可以在下次登錄時通知用戶任何重復項。 然而,實時將是首選。

更新:我現在已經為ssdeep C API編寫了一個名為php_ssdeep的PHP擴展,以便在本機中簡化PHP中的模糊散列和散列比較。 可以在我的博客上找到更多信息。 我希望這對人們有所幫助。

我找到了一個程序,它的創造者Jesse Kornblum稱之為“模糊哈希”。 基本上它會使文件的哈希值可用於檢測類似文件或相同匹配。

這里記錄了它背后的理論: 使用上下文觸發的分段散列來識別幾乎相同的文件

ssdeep是程序的名稱,可以在Windows或Linux上運行。 它旨在用於法醫計算,但它似乎足以滿足我們的目的。 我在舊的Pentium 4機器上做了一個簡短的測試,需要大約3秒才能通過一個23MB的哈希文件(哈希值只有不到135,000個文件)來查找兩個文件的匹配。 那段時間包括為我正在搜索的兩個文件創建哈希值。

我正在研究web2project中的類似問題,在詢問並挖掘之后,我得出結論“用戶不關心”。 有重復的文件只要他們能找到自己的名稱自己的重要文件給用戶。

話雖這么說,這是我采取的方法:

  • 允許用戶上傳與其關聯的文檔與他們想要的任何項目/任務;
  • 該文件應該重命名,以防止有人通過http ..或更好地存儲在Web根目錄之外。 用戶仍然會在系統中看到他們的文件名,如果他們下載了它,你可以用“正確”的文件名設置標題;
  • 在將來的某個時刻,處理文檔以查看是否存在重復..但此時,我們不會修改文檔。 畢竟,可能有重要原因改變空白或大寫;
  • 如果有傻瓜,刪除新文件,然后鏈接到舊文件;
  • 如果沒有欺騙,什么都不做;
  • 索引搜索術語的文件 - 根據文件格式,有很多選項,即使是Word文檔;

在所有這些中,我們不會告訴用戶它是重復的......他們並不關心。 我們(開發人員,數據庫管理員等)關心。

是的,即使他們稍后上傳了該文件的新版本,這仍然有效。 首先,刪除對文件的引用,然后 - 就像在垃圾收集中一樣 - 只有在沒有引用它的情況下才刪除舊文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM