2013-02-26 71 views
1

我正在處理文檔聚類問題,爲此我需要獲取文檔數據集的單詞頻率。在巨大數據集中存儲字頻

目前,我使用一個簡單的辦法:我創建了一個詞表,我添加儘可能多的列的數據集包含的文檔數量,獲得類似

word | document1 | document2 | ... | document n | 

這種方法,即使如果速度慢,適用於小數據集(包含少於100個文檔)。問題是,現在我必須處理巨大的文件,每個文件包含700多個文件,我覺得必須有一個更明智的方式來處理它:問題是,我想不出其他任何東西。

所以,問題是:如何有效地跟蹤每個文檔的單詞頻率?

PS:考慮每個文檔的單詞數量或數據集大小都是未知的,但合理的上限應該是每個文檔2000個字,每個數據集2000個文檔。

回答

1

我假設你確實對開發自己的算法感興趣,而不是像MySQL,SQL Server,Oracle等數據庫的FULL TEXT功能。

術語文檔矩陣 - 我知道這個數據結構的術語 - 將以兩列作爲關鍵字存儲:DocumentID和TermID。

您可能會在文檔中的術語計數,文檔中的位置或其他方面有額外的列,但這兩個鍵是標準方式。

這些通常會鏈接到文檔和術語的表格。文檔表通常具有文檔中的詞語數量,位置(或文本本身)以及其他信息。術語表通常具有該術語的權重,並且可能具有其他信息,例如同義詞列表,詞性等等。

然後,當您想要添加新文檔時,您只需處理條款並添加它們即可。添加新條款。 。 。那需要處理這個詞的歷史文檔,但這仍然很容易。

0

更關係表設計,這應該是這樣的:

CREATE TABLE DOC_WORD_COUNTS AS 
(
    DocID As INT Not NULL, 
    Word As VARCHAR(20) Not NULL, 
    Frequency As INT Not NULL 
) 

然後使(+的DocID字)作爲主鍵。您還需要另一個表來存儲文檔的信息,包括DocID。

0

創建的數據結構是這樣的:

  • 文獻-表:DocumentId(PK),DocumentName
  • 字表:的wordID(PK),DocumentId(FK),WordName

這樣,您可以運行一些彙總查詢來報告數據。