2014-02-21 89 views
0

我有一個包含一些噪音元素的文本片段的大(+/- 300,000行)數據集。嘈雜我的意思是俚語,類型錯誤等等......我希望過濾掉這些嘈雜的元素以獲得更乾淨的數據集。刪除語料庫中的詞語的算法

我讀了一些論文,建議通過跟蹤每個詞的出現來過濾掉這些。通過設置閾值(例如,小於20),我們可以假設這些詞是噪聲,因此可以安全地從語料庫中移除。

也許有一些庫或算法可以快速高效地完成此操作。當然,我首先嚐試了一下,但這是極其緩慢的!因此,總而言之,我正在尋找一種算法,可以快速有效地過濾掉出現少於特定閾值的單詞。也許我添加了一個小例子:

This is just an example of whaat I wish to acccomplish. 

詞「whaat」和「acccomplish」拼寫錯誤和不經常發生這樣可能(如果我們假設生活在一個完美的世界和錯別字是罕見的...)。我希望以

This is just an example of I wish to. 

謝謝!

PS:如果可能的話,我想有Java編寫的算法(或僞代碼,所以我可以寫我自己)

+2

我不太喜歡你的方法。有很多罕見但完全有效的詞將會丟失。如果你想刪除拼寫錯誤的單詞,然後拼寫檢查它。 – tom

+0

你試了一下自己? – aglassman

+0

1)構建一個行數等於數據集中行數的二維數組。 2)逐行讀取,將每個單詞添加到HashMap 其中String是單詞,Object包含出現次數和索引列表(col,row),以查找整個單詞出現在哪裏數據集。 3)我將該行轉換爲一個StringArray並將其作爲一行添加到二維數組中。 4)我根據出現次數對HashMap進行排序 5)對於出現<= treshold的每個單詞,我取(col,row)值並刪除它們。6)讀出二維數組 – RazorAlliance192

回答

4

我認爲你是在用複雜的方式在其建議的意見。

  1. 建立一個直方圖:Map<String,Integer>計數
  2. 數occurances的對於每一個字,當且僅將其打印到新的「乾淨」的文件

    您可以通過2次對數據做如果map.get(word) > THRESHOLD

作爲一個側面說明,如果有的話 - 我覺得一個固定閾值的方法是不是最好的選擇,我個人會篩選occure字小於MEAN-3*STD其中MEAN是平均NUM單詞和STDstandard deviation。 (3個標準偏差意味着你捕捉的詞語大概超出預期的正態分佈,概率爲〜99%)。你可以用不變的因子'玩',找到最適合你需要的東西。

+0

謝謝!這是我可以接受的方法。 – RazorAlliance192

相關問題