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

如何从tm包生成的Corpus中移除list()相关冗余内容?

问题解决思路

为啥会出现这些奇怪词汇?

你碰到的list(language = "portuguese")、list()和带.txt的文件名,根本原因是你把整个Corpus对象的结构信息当成文本内容处理了。直接用as.character(docs)会把Corpus的框架(包括你设置的readerControl参数、文档ID也就是文件名)都转成字符串,这些无关内容自然就混进文本里了。

怎么改?

1. 先正确提取文档的纯内容

别直接转整个Corpus,用sapply把每个文档的实际文本抽出来:

# 只提取每个文档里的纯文本,忽略元数据
docs_content <- sapply(docs, function(x) x$content)

2. 再做词干提取

把抽出来的纯文本传给ptstem:

docs_stemmed <- ptstem(docs_content, algorithm = "rslp")

3. 补个保险:提前清掉无关词

如果还有漏网的list、language这类词,在预处理阶段加一步移除:

# 放在移除停用词之后
docs <- tm_map(docs, removeWords, c("list", "language", "portuguese", "txt"))

完整修正后的代码

library(tm)
library(magrittr)
library(Rstem)

docs <- Corpus(DirSource("FILE PATH"), readerControl = list(language = "portuguese")) 

toSpace <- content_transformer(function(x, pattern) { return (gsub(pattern, " ", x))})

docs <- tm_map(docs, toSpace, "-")
docs <- tm_map(docs, toSpace, ":")
docs <- tm_map(docs, toSpace, "'")
docs <- tm_map(docs, toSpace, " -")

removeSpecialChars <- function(x) gsub('[[:punct:]]',"",x)
docs <- tm_map(docs, removeSpecialChars)

docs %<>%
    tm_map(removePunctuation) %>%
    tm_map(content_transformer(tolower)) %>%
    tm_map(removeNumbers) %>%
    tm_map(removeWords, stopwords("portuguese")) %>%
    # 新增移除无关词汇
    tm_map(removeWords, c("list", "language", "portuguese", "txt")) %>%
    tm_map(stripWhitespace)

docs %<>%
    tm_map(content_transformer(gsub), pattern = "WORD1", replacement = " WORD2 ") %>%
    tm_map(content_transformer(gsub), pattern = "WORD 3 WORD4", replacement = " WORD5 ") %>%
    tm_map(stripWhitespace)

# 正确提取纯文本内容
docs_content <- sapply(docs, function(x) x$content)
# 执行词干提取
docs_stemmed <- ptstem(docs_content, algorithm = "rslp")

额外提醒

要是之后要生成DTM,直接用处理好的docs Corpus对象就行,不用转成字符:

dtm <- DocumentTermMatrix(docs)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:08:22