2012-02-14 30 views
10

我正在考慮構建一個API,讓程序提交學術刊物的「指紋」,將其與來自Open Access日誌的文章數據庫進行匹配,如果找到,向用戶發送標準引用信息。最初,這將用於特定的小型研究領域,因此它不一定需要處理2000萬篇論文才能獲得成功(即使涵蓋了該領域最常被引用的1000篇論文,這對於生產力也是巨大的利益)和協作)。用於模糊文檔匹配/文本指紋識別的最佳庫

我想知道什麼庫(能夠與Ruby進行接口,理想情況下)是做這個「指紋識別」的最佳選擇。我已經看到Lucene的模糊匹配,但似乎在單詞級別上工作,而在這種情況下,我們可能希望提交更大的文檔子集。做模糊匹配的原因是有些人可能有Word.doc預印本,有些人可能有最終的PDF等。

我真的很欣賞這裏的一些想法。谷歌搜索「感性散列」讓我陷入一堆新材料。我試圖總結我的許多發現here

看起來好像SimHash,例如the C implementation就是要走的路,但我仍然需要做更多的實驗。

+1

這可能是有趣的一個帖子:http://stackoverflow.com/questions/8544583/designing-a-noise-filter -for-plagiarism-detection-engine-in-ruby – 2012-02-14 15:46:08

+0

提供庫的另一種方法是詳細描述一種算法,儘管我懷疑它是否足夠快以在純Ruby中執行。朋友提到的一個想法是使用某種差異來查看文本與數據庫中每個文本的「不同」。在數據庫中有成千上萬的文本,這可能無法擴展,但我們也許可以對文本中的某些單詞進行搜索,以便快速減少集合以匹配可管理的數字。嘗試了不同的字 - 差異,但沒有發現任何強烈地吐出「差異」/轉換等數量,沒有很多其他信息 – 2012-03-06 13:50:11

回答

7

您可以使用pHash這種工作。

而且this寶石將幫助您上手:

require 'phash/text' 
Phash::Text.new('first.txt') % Phash::Text.new('second.txt') 
+0

這是非常整潔,最接近我有用的東西。我看到C庫有一個內置的數據存儲,可以讓你提交散列,然後讓你匹配所有提交的散列的新文件。沒有看到通過Ruby思想的任何接口,不確定我們是否會在實踐中這樣做。還會喜歡更多關於可伸縮性的信息(例如,如果我想匹配100k文件,例如)。 – 2012-03-21 19:01:45

+1

我更喜歡在Lucene中存儲哈希值,並通過Levenstein距離匹配pHashes。 Lucene可以非常快速地處理數百萬次散列 – fl00r 2012-03-21 19:27:30

+0

有趣的是,您能否提供更多的細節?你如何檢索哈希匹配?你計算Levenshtein距離有多少? – 2012-03-22 20:26:30