R语言情感分析中Inner Join关联异常问题求助
问题排查与解决
首先,你代码里有个明显的语法错误:管道符写成了%>,正确的应该是%>%,这个错误会导致代码无法按预期执行,甚至报错。如果没修正这个错误,你当前的afinn对象可能不是连接后的结果,而是之前运行的其他代码残留的对象(比如直接从AFINN词典筛选的value=-5的词)。
接下来,从inner_join的逻辑来看,它只会保留同时存在于tidy_text和AFINN词典中的词,理论上不可能出现AFINN里有但tidy_text里没有的词。出现你描述的情况,大概率是以下原因之一:
- 大小写不匹配:AFINN词典里的词全是小写,而你的
tidy_text可能包含大写开头的词(比如句首单词、角色名)。如果没有统一转成小写就执行连接,要么匹配不到对应词,要么你误以为tidy_text里没有某个词,但实际上处理后的tidy_text已经转成了小写。 - 词形差异:AFINN词典用的是单词原形,而
tidy_text里可能是复数、过去式等变形(比如AFINN里的bastard(value=-5),tidy_text里是bastards)。如果没做词形还原,这类词不会匹配;但如果做了词干提取/词形还原,tidy_text里的词会变成原形,这时候你可能误以为原始文本里没有这个词,但处理后的tidy_text里已经存在。 - 代码执行环境残留:如果之前运行过
afinn <- get_sentiments("afinn") %>% filter(value == -5)这类代码,即使后来修正了连接代码,afinn对象可能还是之前的结果,需要重新运行完整代码。
解决步骤
- 修正管道符错误,确保代码是:
afinn <- tidy_text %>% inner_join(get_sentiments("afinn")) %>% filter(value == -5) %>% count(word, value, sort = TRUE) - 在创建
tidy_text时统一转小写:tidy_text <- your_raw_text %>% # 其他处理步骤(比如分词、去停用词) mutate(word = tolower(word)) - 验证交集词:用
intersect(tidy_text$word, get_sentiments("afinn")$word)查看两边共有的词,确认哪些词会被保留。 - 检查结果是否真的存在异常:用
anti_join(afinn, tidy_text, by = "word"),如果返回非空结果,说明tidy_text的生成过程可能有问题,需要排查是否在处理时遗漏或修改了词。
内容的提问来源于stack exchange,提问作者Jean-Paul Azzopardi
相关产品推荐
相关产品推荐

