在 R 文档术语矩阵中保留标点符号

Keeping punctuation in R Document Term Matrix

我正在尝试在 R 中创建一个 DocumentTermMatrix,使用参数 control = list() 将术语限制为基于文本的表情符号的预定义列表 (:D , :), :(, ETC。)。但是,dtm 不会选择某些表情符号(如 ":D"":)"),但其他一些可以正常工作 (":))")。我的代码:

text = c(":D", ":))" ) 
corpus <- Corpus(VectorSource(text)
corpus = tm_map(corpus, PlainTextDocument)
dtm = DocumentTermMatrix(corpus, list(dictionary = c(":D" , ":))" )))
emojidf <- as.data.frame(as.matrix(dtm))

  :D :))
1  0   0
2  0   1

要解决此问题,我可以使用 content_transformergsub 将有问题的表情符号更改为文字。但是,我想知道 DocumentTermMatrix 甚至 Corpus 如何将标点符号视为单词。

两个问题(参见 ?DocumentTermMatrix?termFreq):默认情况下,wordLengths 过滤器要求最小字长为 3 个字符。默认情况下 tolower 将 :D 变成 :d。所以尝试:

library(tm)
text <- c(":D", ":))" ) 
corpus <- Corpus(VectorSource(text))
dtm <- DocumentTermMatrix(
  corpus, 
  control = list(
    dictionary = c(":D" , ":))"), 
    wordLengths=c(-Inf,Inf), 
    tolower=FALSE
  )
)
as.matrix(dtm)
#     Terms
# Docs :)) :D
#    1   0  1
#    2   1  0