2009-07-12 43 views
1

我有一個項目,我需要將多章文檔與第二個文檔進行比較以確定它們的相似性。問題是我不知道如何去做這個,有什麼方法存在或者它們是否有任何可用的庫。大文檔的文本分析

我的第一個問題是...什麼是相似的?匹配的單詞數量,匹配的連續單詞數量?

我可以看到編寫一個解析器,將每個文檔放入包含單詞和位置的數組中,然後進行比較。

我看到在 Algorithms or libraries for textual analysis, specifically: dominant words, phrases across text, and collection of text

較早質詢,但它似乎比什麼,我試圖做的有些不同。

任何選項或指針人可能會很好!

+0

我想說這種方法高度依賴於文檔的類型(手冊,博士論文,小說?) – Treb 2009-07-12 21:12:47

回答

1

「什麼是相似的」我們不能告訴你,這是你的項目的基本要求的聲明。如果你不知道這一點,那麼很快就會考慮如何去做。

提問「爲什麼」可能會有所幫助。相似性度量將用於什麼?

例如,如果目的是檢測剽竊,然後檢測兩篇文章是相似的,因爲他們談論相同的主題,並且做出類似的參考不太可能有幫助 - 整個班級將提交類似的論文!所以你可能會尋找匹配的確切句子和短語。

如果您正在嘗試爲某些文檔構建目錄,那麼您可能會搜索出關鍵詞。如果兩個文檔使用相同的單詞長度或相似的專有名詞,則它們是相似的。

這兩個例子旨在證明,直到我們理解類似的含義時,很難給出很多建議。

但是,這裏有一個可能的方法。你可以寫兩個主要的東西:一個提取器和一個比較器。

提取器的工作是鑽研文檔併產生作爲文檔本質的組塊(或列表,它是否需要排序?):這些組塊可能是單個單詞或句子和短語。

比較的工作就是評估兩個文檔「本質」的相似性。

簡單示例:從文檔中提取8個字母或更多字的唯一列表。 比較可能是兩個文件是相似的,如果一個人的集合包含超過75%的其他人。

0

所有源控制系統使用的差異工具幾乎完全是這樣。嘗試其中之一來幫助您衡量差異的數量(因此它們有多相似)。

0

這取決於你想達到什麼。如果目標是在一組文檔中找到與給定文檔類似的文檔,您可以嘗試如下所示:

根據文檔,您可以首先從長文檔中提取最有意義的關鍵字或關鍵句提取文本的精髓(谷歌「關鍵字提取」)。然後,您可以使用文本相似度算法(如k-最近鄰算法)來搜索相似的文檔。關鍵是要提取文本的關鍵部分。

1

一種簡單的方法是將文檔文本拼接在一起,然後對其進行壓縮。壓縮比可以告訴你你有多少相似性。

1

您可以使用的一種方法稱爲Shingling。這個過程包括標記兩個文檔中的所有單詞,例如。

D1 = {"An", "Example", "Document", "To", "Show", "Shingling"} 
D2 = {"Another", "Example", "Document", "To", "Show", "Shingling", "but", "longer"} 

然後取該組窗口長度爲n的連續子序列(記住在一組沒有重複)的。

S(D1, 3) = {{"An", "Example", "Document"}, {"Example", "Document", "To"}, {"Document", "To", "Show"}, {"To", "Show", "Shingling"}} 

S(D2, 3) = {{"Another", "Example", "Document"}, {"Example", "Document", "To"}, {"Document", "To", "Show"}, {"To", "Show", "Shingling"}, {"Show", "Shingling", "but"}, {"Shingling", "but", "longer"}} 

然後,相似性是交集的基數除以聯合的基數。所以對於我們的例子3/7 = 43%相似。

通過使用隨機選擇的草圖(來自該組瓦片的子集)可以進行有效的近似。