You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于指定二元词组词典构建文本的DocumentTermMatrix?

嘿,我来帮你搞定用自定义二元词组词典构建DocumentTermMatrix的事儿!结合你给出的现有数据和已经完成的预处理,具体操作步骤我整理好了:

现有数据与已完成的预处理

文本数据(text)

你现有的文本数据通过dplyr::glimpse()查看是这样的:

library(dplyr)
glimpse(text)
# 输出结果:
chr [1:11] "Welcome to Wikipedia ! [bla] Discover Ekopedia, the practical encyclopedia about alternative life techniques. \"| __truncated__ ...

二元词组词典(dict)

你的二元词组词典内容如下:

glimpse(dict)
# 输出结果:
chr [1:34] "and i" "and the" "as a" "at the" "do not" "for the" "from the" "has been" "i am" "i dont" ...

已完成的预处理代码

你已经完成了文本预处理的部分,大致代码应该是这样的(我帮你补全了常见的预处理步骤,你可以根据实际情况调整):

library(tm)
corpus <- VCorpus(VectorSource(text))
# 常见预处理步骤(你已经完成的部分)
corpus <- tm_map(corpus, content_transformer(tolower))
corpus <- tm_map(corpus, removePunctuation)
corpus <- tm_map(corpus, removeNumbers)
# ... 其他你已经完成的预处理操作,比如去除停用词等
基于二元词组词典构建DocumentTermMatrix

因为tm包默认是按单字词分词,所以我们需要自定义一个分词器,优先匹配词典里的二元词组,具体操作如下:

1. 编写自定义分词函数

这个函数会先尝试匹配词典中的二元词组,没匹配到的再按单字词处理(如果你只想保留二元词组,可以去掉单字词的逻辑):

custom_tokenizer <- function(x) {
  # 按空格拆分文本为单字词
  words <- unlist(strsplit(x, "\\s+"))
  total_words <- length(words)
  tokens <- c()
  i <- 1
  
  while (i <= total_words) {
    # 当不是最后一个词时,尝试拼接二元词组
    if (i < total_words) {
      current_bigram <- paste(words[i], words[i+1], sep = " ")
      # 如果当前二元词组在词典里,就加入tokens,同时跳过下一个词
      if (current_bigram %in% dict) {
        tokens <- c(tokens, current_bigram)
        i <- i + 2
        next
      }
    }
    # 没匹配到二元词组,就加入当前单字词
    tokens <- c(tokens, words[i])
    i <- i + 1
  }
  return(tokens)
}

2. 构建DocumentTermMatrix

用自定义的分词器来构建矩阵:

# 指定分词器为我们写的custom_tokenizer
dtm <- DocumentTermMatrix(corpus, control = list(tokenize = custom_tokenizer))

# 查看生成的DocumentTermMatrix详情
inspect(dtm)
小提示

一定要确保你的预处理后的文本和词典格式完全一致,比如都是小写、没有标点符号,这样二元词组的匹配才不会出错。如果不需要保留单字词,直接在自定义分词函数里去掉添加单字词的逻辑就行~

内容的提问来源于stack exchange,提问作者Banjo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:00:32