【发布时间】:2020-02-24 15:36:30
【问题描述】:
我目前正在使用 quanteda 包,我想根据连续至少有两个正则表达式空格字符的模式来分割我的语料库。但是,我不确定 corpus_segment() 函数是如何工作的。我构建了以下小示例来说明我的问题:
test <- "start middle end"
test <- corpus(test)
test
Corpus consisting of 1 document and 0 docvars.
texts(test)
text1
"start middle end"
现在我想根据至少两个正则表达式空格字符的模式来分割文档:
texts(corpus_segment(test, pattern="\\s{2,}", valuetype = "regex"))
text1.1 text1.2
"middle" "end"
现在第一个模式匹配前面的单词已被删除。在查看文档后,我看到 remove_pattern 默认等于 TRUE。但是,我不明白为什么它还会删除第一个模式匹配前面的单词。我最初的猜测是它与争论模式_位置有关,实际上,如果我将其设置为“之后”,则会发生以下情况:
texts(corpus_segment(test, pattern="\\s{2,}", valuetype = "regex", pattern_position="after"))
text1.1 text1.2
"start" "middle"
所以最后一个模式之后的单词被删掉了。我发现将 remove_pattern 设置为“FALSE”会保留所有三个单词并按照我的意图执行:
texts(corpus_segment(test, pattern="\\s{2,}", valuetype = "regex", extract_pattern=FALSE))
text1.1 text1.2 text1.3
"start" "middle" "end"
函数的文档说明如下:
"extract_pattern: 从文本中提取匹配的模式,如果为真则保存在 docvars 中"
"pattern_position: "before" 或 "after",取决于模式是在文本之前(如用户提供的标签,如以下示例中的##INTRO)还是在文本之后(如标点符号)分隔符)"
我没有看到这个文档如何解释为什么“开始”或“结束”会根据 pattern_position 参数被剪掉。
【问题讨论】:
标签: quanteda