2016-07-27 38 views
3

我有一個包含200多個文檔的大型文檔語料庫。正如你可以從這麼大的語料庫期望的那樣,一些單詞拼寫錯誤,以不同格式使用,等等。我已經完成了標準文本處理,如轉換爲小寫,刪除標點符號,詞幹。我試圖用一些詞來替換正確的拼寫並將其標準化,然後再進行分析。我已經做了更多的100次替換,使用與下面相同的語法,並且對於大部分替換,它按預期工作。但是,有些(約5%)沒有工作。例如,下面的換人似乎只有有限的影響:R tm使用gsub在語料庫中替換單詞

docs <- tm_map(docs, content_transformer(gsub), pattern = "medecin|medicil|medicin|medicinee", replacement = "medicine") 
docs <- tm_map(docs, content_transformer(gsub), pattern = "eephant|eleph|elephabnt|elleph|elephanyt|elephantant|elephantant", replacement = "elephant") 
docs <- tm_map(docs, content_transformer(gsub), pattern = "firehood|firewod|firewoo|firewoodloc|firewoog|firewoodd|firewoodd", replacement = "firewood") 

通過有限的影響我的意思是,即使一些替代在工作,有些則不是。例如,儘管試圖替換「大象」,「藥品」,「firewoodd」,但它們在創建DTM(文檔術語矩陣)時仍存在。

我不知道爲什麼這種混合效應正在發生。

而且下面一行是用收集一些組合替換每個字的語料庫:

docs <- tm_map(docs, content_transformer(gsub), pattern = "colect|colleci|collectin|collectiong|collectng|colllect|", replacement = "collect") 

僅作參考,當我替補只是一個字,我使用的語法(注意固定= TRUE):

docs <- tm_map(docs, content_transformer(gsub), pattern = "charcola", replacement = "charcoal", fixed=TRUE) 

的一個是單取代和失敗是:

docs <- tm_map(docs, content_transformer(gsub), pattern = "dogmonkeycat", replacement = "dog monkey cat", fixed=TRUE) 

回答

4

您遇到的問題是您的模式中的變化未固定,因此只有第一個匹配「勝利」,即已使用,其餘未考慮。

您應該使用一些 「錨」(比如,字邊界)周圍的交替:

pattern = "\\b(medecin|medicil|medicin|medicinee)\\b" 

或只是把較長的替代短的:

pattern = "medicinee|medecin|medicil|medicin" 

注意您可以通過使用字符類來爲拼寫錯誤的元音(見[ei])和組:

pattern = "med[ie]ci(?:n(?:ee)?|l)" 
+0

謝謝。這樣可行。任何想法爲什麼單一替代失敗? – DotPi

+1

我只能懷疑替換的順序是錯誤的,並且還有另一個替換髮生在之前,並且文本中沒有'dogmonkeycat'被'狗猴貓'取代。 –