如何在quanteda的corpus_reshape中排除特定词后的句号作为分句标记?
解决quanteda中corpus_reshape误拆分带点缩写的问题
要让corpus_reshape()识别Dr.这类医药领域的带点缩写,不把它们当作分句标记,不需要换其他分句函数,只需自定义分句规则即可:
- 借助
tokenizers包的sentence_tokenize()函数,自定义缩写词列表,告诉程序哪些带点的词是缩写而非分句结尾 - 将自定义的分句函数传给
corpus_reshape()的tokenizer参数
具体代码示例:
library(quanteda) library(tokenizers) # 定义医药领域常用的带点缩写,按需补充 custom_abbrevs <- c("Dr.", "U.S.", "MD.", "PhD.", "Prof.", "Mr.", "Ms.") # 自定义分句函数,指定缩写列表 custom_sent_tokenizer <- function(x) { tokenizers::sentence_tokenize(x, abbreviations = custom_abbrevs) } # 测试文本 txt <- c( d1 = "With us we have Dr. Smith. We are not sure... where we stand.", d2 = "The U.S. is south of Canada." ) # 使用自定义分句器进行分句 corpus(txt) %>% corpus_reshape(to = "sentences", tokenizer = custom_sent_tokenizer)
运行后,Dr. Smith和U.S.不会被误拆分成单独句子,符合预期。
内容的提问来源于stack exchange,提问作者paul
相关产品推荐
相关产品推荐

