使用quanteda分词时remove_punct为何无法去除撇号?
解决quanteda分词时撇号未被去除的问题
这是quanteda的默认设计——remove_punct = TRUE不会移除单词内部的撇号(比如don't里的'),因为这类撇号被视作单词的组成部分,而非独立标点。下面是几种可行的解决办法:
方法1:用正则替换移除撇号
在分词后通过tokens_replace配合正则表达式,直接清除所有类型的撇号:
all.tokens <- tokens( my.corpus, remove_punct = TRUE, remove_numbers = TRUE, remove_symbols = TRUE, remove_url = TRUE ) %>% tokens_replace(pattern = "[‘’']", replacement = "") %>% tokens_tolower() %>% tokens_select(pattern = stopwords("en"), selection = "remove")
正则[‘’']覆盖了直撇号和左右弯撇号,能处理不同格式的文本。
方法2:自定义要移除的标点集合
quanteda允许用户指定punctuation参数,把撇号加入默认的移除列表:
# 扩展默认标点集合,加入各类撇号 custom_punct <- c(quanteda:::punctuation, "'", "‘", "’") all.tokens <- tokens( my.corpus, remove_punct = TRUE, punctuation = custom_punct, remove_numbers = TRUE, remove_symbols = TRUE, remove_url = TRUE ) %>% tokens_tolower() %>% tokens_select(pattern = stopwords("en"), selection = "remove")
方法3:分词前预处理文本
如果需要更彻底的控制,先在语料层面用字符串工具清除撇号,再进行分词:
# 预处理语料,移除所有撇号 my.corpus_preprocessed <- corpus(stringr::str_replace_all(my.corpus, "[‘’']", "")) all.tokens <- tokens( my.corpus_preprocessed, remove_punct = TRUE, remove_numbers = TRUE, remove_symbols = TRUE, remove_url = TRUE ) %>% tokens_tolower() %>% tokens_select(pattern = stopwords("en"), selection = "remove")
内容的提问来源于stack exchange,提问作者mgd_aus
相关产品推荐
相关产品推荐

