2016-11-09 22 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 одна (де) до сих пор отсутствует. Ситуация такая же, если я не использую control = list (stemming = T). Итак, мне любопытно, если это какое-то определение в tm? Строки будут проигнорированы, если это меньше 3 букв? Я не думаю, что это хорошая идея. Очень возможно, что строка полезна, даже если она короткая, например аббревиатура.

Если да, есть ли параметр или что-то, что может это изменить? Большое спасибо.

+0

вы можете попробовать другой пакет NLP, например 'quanteda' – HubertL

ответ

1

См. ?termFreq. Опция, которую вы должны установить, - wordLengths. Из Doc:

целочисленный вектор длины 2. Слова короче , чем минимальный длина слова «wordLengths [1]» или больше , чем максимальные длины слова «wordLengths [2]» являются отбрасывают. По умолчанию «c (3, Inf)», т. Е. Минимальное слово длиной 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

Да! Хорошо знать. Благодаря! –