stemDocument在TermDocumentMatrix中工作,但在使用tm和R的tm_map中不起作用

时间:2016-11-07 06:32:25

标签: r tm

假设有一个字符串“COLORED PENCIL STAEDTLER NORIS CLUB ASSORTED COLORS PKT12”。我的代码是:

> 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 个答案:

答案 0 :(得分: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)
由于调用PlainTextDocument(),出现

字符(0)。如果需要使用它,比如当你使用传递tolower到tm_map并得到这个错误 - Error: inherits(doc, "TextDocument") is not TRUE时,请使用content_transformer。

希望这有帮助。