使用tokens_compound统计语料库短语频率并导出CSV的问题求助
解决quanteda中tokens_compound短语统计无结果的问题
原代码运行后无法识别目标短语,核心问题有三个,修正方案如下:
问题分析
- 变量名冲突:将tokens转成dfm时用了
tokens作为变量名,覆盖了之前的tokens对象,后续dfm_lookup调用的是未合并短语的原始dfm,而非处理后的tokens - 短语拼写错误:原列表里的
"fellow citiznes"(正确拼写为fellow citizens)、"unlimited sumission"(正确拼写为unlimited submission),拼写错误导致无法匹配语料中的短语 - 未使用合并后的tokens:
dfm_lookup需要基于合并短语后的comp_toks生成dfm,而非原始dfm
修正后的完整代码
library("quanteda") # Package version: 2.1.2 data(data_corpus_inaugural) # 处理tokens,规避变量名冲突 toks <- data_corpus_inaugural %>% tokens(remove_punct = TRUE, remove_symbol = TRUE, padding = TRUE) %>% tokens_tolower() # 修正短语拼写错误 multiword <- c("the house of representatives", "the senate", "foreign legislative", "fellow citizens", "men of reflection", "total independence", "unlimited submission","no middle course", "apprehension of danger", "formidable power") # 执行短语合并 comp_toks <- tokens_compound(toks, pattern = phrase(multiword)) # 基于合并后的tokens生成dfm comp_dfm <- dfm(comp_toks) # 字典短语与合并后的下划线格式保持一致,同步修正拼写 dictx <- dictionary(list(govt = c("the_house_of_representatives", "the_senate", "foreign_legislative"), people = c("fellow_citizens", "men_of_reflection"), action = c("total_independence", "unlimited_submission"), course = "no_middle_course", energy = c("apprehension_of_danger", "formidable_power"))) # 在合并短语后的dfm上执行lookup test <- dfm_lookup(comp_dfm, dictionary = dictx) test2 <- convert(test, to = "data.frame") write.csv(test2, "D:/Test.csv")
关键修改说明
- 修正短语拼写错误,确保能匹配语料中的真实内容
- 调整变量名避免冲突:将合并后的dfm命名为
comp_dfm,不再覆盖原始tokens对象 - 基于
comp_toks生成dfm,保证lookup的是已经完成短语合并的语料 - 同步修正字典中的短语拼写,确保和
tokens_compound生成的下划线连接格式完全一致
内容的提问来源于stack exchange,提问作者bgreen
相关产品推荐
相关产品推荐

