2016-11-09 16 views
0

這裏是我的代碼: 例子1:是否TM自動忽略了很短的字符串?

a <- c("ab cd de","ENERGIZER A23 12V ALKALINE BATTERi") 
a1 <- VCorpus(VectorSource(a)) 
a2 <- TermDocumentMatrix(a1,control = list(stemming=T)) 
inspect(a2) 

結果是:

  Docs 
Terms  1 2 
    12v  0 1 
    a23  0 1 
    alkalin 0 1 
    batteri 0 1 
    energ 0 1 

貌似第一個字符串中被忽略。

例如2

a <- c("abcd cde de","ENERGIZER A23 12V ALKALINE BATTERi") 
a1 <- VCorpus(VectorSource(a)) 
a2 <- TermDocumentMatrix(a1,control = list(stemming=T)) 
inspect(a2) 

結果是:

  Docs 
Terms  1 2 
    12v  0 1 
    a23  0 1 
    abcd 1 0 
    alkalin 0 1 
    batteri 0 1 
    cde  1 0 
    energ 0 1 

我們可以看到兩個子串(ABCD,CDE)的同時shorest一個(DE)是人仍下落不明不停。如果我不使用control = list(stemming = T),情況是一樣的。所以,我很好奇這是否是tm中的一種定義?如果小於3個字母,字符串將被忽略?我不認爲這是一個好主意。字符串很有可能即使是縮寫等短小也是有用的。

如果是這樣,有一個參數或東西,可以改變呢?非常感謝。

+0

你可能想嘗試另一種NLP包例如'quanteda' – HubertL

回答

1

?termFreq。你必須設置的選項wordLengths。從DOC:長度爲2字短 的比最小字長

一個整數向量「字長[1]」或大於最大字長度長 「字長[2]」是 丟棄。默認爲「C(3,天道酬勤)」,即,最小字 長度的3個字符。

所以,如果你不想排除,你可以簡單的字:

a2 <- TermDocumentMatrix(a1,control = list(stemming=T,wordLengths=c(1,Inf))) 
inspect(a2) 
     Docs 
Terms  1 2 
    12v  0 1 
    a23  0 1 
    ab  1 0 
    alkalin 0 1 
    batteri 0 1 
    cd  1 0 
    de  1 0 
    energ 0 1 
+0

呀!很高興知道。謝謝! –