如何在R语言tm包中匹配以“surviv”开头的词汇?
如何在tm包中匹配以“surviv”开头的词汇?
嘿,我来帮你搞定这个问题~你现在用的DocumentTermMatrix配合dictionary参数是精确匹配,只能拿到你指定的那几个词,要匹配所有以“surviv”开头的词汇(比如survival、survivor、survive这些),有两种实用的方法:
方法一:先筛选符合前缀的词汇,再生成矩阵
这个方法先从你的语料库中提取所有以“surviv”开头的词汇,再把它们作为字典传入DocumentTermMatrix,步骤清晰直观:
# 1. 从语料库中获取所有唯一词汇 all_terms <- Terms(docs) # 2. 筛选出所有以"surviv"开头的词汇(ignore.case=TRUE不区分大小写,可按需去掉) surviv_terms <- grep("^surviv", all_terms, ignore.case = TRUE, value = TRUE) # 3. 生成只包含这些词汇的文档-词矩阵 dtm <- DocumentTermMatrix(docs, control = list(dictionary = surviv_terms)) # 4. 查看结果 x <- inspect(dtm)
方法二:自定义分词器,直接保留目标词汇
如果你不想单独提取词汇,可以自定义一个分词器,在分词阶段就只保留以“surviv”开头的词,一步到位:
# 定义自定义分词器:先分词,再筛选符合前缀的词 surviv_tokenizer <- function(x) { # 先用默认分词器拆分文本 tokens <- wordTokenizer(x) # 筛选出以"surviv"开头的词汇 grep("^surviv", tokens, ignore.case = TRUE, value = TRUE) } # 使用这个分词器生成文档-词矩阵 dtm <- DocumentTermMatrix(docs, control = list(tokenize = surviv_tokenizer)) x <- inspect(dtm)
小提示
- 如果你需要严格区分大小写(只匹配小写的"surviv"开头),把代码里的
ignore.case = TRUE去掉就行。 - 第一种方法能让你先看到所有符合条件的词汇,方便核对;第二种方法更直接,适合快速生成目标矩阵。
内容的提问来源于stack exchange,提问作者AlphaScorpion
相关产品推荐
相关产品推荐

