2016-11-07 99 views
0

假设有一个字符串“COLORED PENCIL STAEDTLER NORIS CLUB ASSORTED COLORS PKT12”。我的代码是:stemDocument在TermDocumentMatrix中工作,但在tm_map中无法使用tm和R

> a1 <- VCorpus(VectorSource("COLORED PENCIL STAEDTLER NORIS CLUB ASSORTED COLORS PKT12")) 
> a3 <- TermDocumentMatrix(a1,control = list(stemming=T)) 

的矩阵是:

  Docs 
Terms  1 
    assort 1 
    club  1 
    color  2 
    nori  1 
    pencil 1 
    pkt12  1 
    staedtler 1 

所以我们可以看到stemDocument适用于有色和颜色,这两种转作颜色。但是,如果我这样做:

> a1 <- VCorpus(VectorSource("COLORED PENCIL STAEDTLER NORIS CLUB ASSORTED COLORS PKT12")) 
> a2 <- a1 %>% tm_map(PlainTextDocument) %>% tm_map(stemDocument,"english") 
> a2[[1]]$content 
[1] "COLORED PENCIL STAEDTLER NORIS CLUB ASSORTED COLORS PKT12" 
> a2 <- a2 %>% TermDocumentMatrix() 

的矩阵是:

  Docs 
Terms  character(0) 
    assorted    1 
    club     1 
    colored    1 
    colors    1 
    noris    1 
    pencil    1 
    pkt12    1 
    staedtler   1 

我们可以看到stemDocument不在这里工作了。我注意到这里有“字符(0)”,这在上面的矩阵中没有显示。但我不知道为什么?

我的情况是我需要为stopwords,stemDocument等文本数据做一些预处理。然后我需要将处理后的文本保存到csv文件中。所以在这里我不能直接使用TermDocumentMatrix来生成矩阵。任何人都可以帮我在这里吗?非常感谢。

回答

1

这会帮助你实现你想要什么,我通常将所有的文本为小写,去除标点符号等,创造了DTM/TDM

library(tm) 
txt <- "COLORED PENCIL STAEDTLER NORIS CLUB ASSORTED COLORS PKT12" 

txt <- tolower(txt) ## this is the extra step where I have converted eveything to lower case 

a1 <- VCorpus(VectorSource(txt)) 
a2 <- a1 %>% tm_map(stemDocument) 
a2 <- a2 %>% TermDocumentMatrix() 
inspect(a2) 

字符(0)出现,因为调用PlainTextDocument之前()。在需要使用它的情况下,例如当您使用通行权到tm_map并获取此错误时,使用content_transformer。

希望这会有所帮助。

+0

非常感谢。这工作。但有些奇怪。看起来像txt < - tolower(txt)是必要的。没有它,它就无法工作。此外,我尝试了txt < - toupper(txt),这也不起作用。无法弄清楚原因 –

相关问题