如何将自定义函数应用于 quanteda 语料库

How to apply a custom function to a quanteda corpus

我正在尝试将脚本从使用 tm 迁移到 quanteda。阅读 quanteda 文档有一种关于应用更改 "downstream" 的理念,以便原始语料库保持不变。好的

我之前写了一个脚本来查找我们的 tm 语料库中的拼写错误,并在我们团队的支持下创建了一个手动查找。所以,我有一个包含 2 列的 csv 文件,第一列是拼写错误的术语,第二列是该术语的正确版本。

我之前使用 tm 包是这样做的:

# Write a custom function to pass to tm_map
# "Spellingdoc" is the 2 column csv
library(stringr)
library(stringi)
library(tm)
stringi_spelling_update <- content_transformer(function(x, lut = spellingdoc) stri_replace_all_regex(str = x, pattern = paste0("\b", lut[,1], "\b"), replacement = lut[,2], vectorize_all = FALSE))

然后在我的 tm 语料库转换中我这样做了:

mycorpus <- tm_map(mycorpus, function(i) stringi_spelling_update(i, spellingdoc))

将此自定义函数应用于我的 quanteda 语料库的等效方法是什么?

我想我找到了 的间接答案。

texts(myCorpus) <- myFunction(myCorpus)

无法知道这是否适用于您的示例,其中遗漏了一些部分,但总体而言:

如果您想访问 quanteda 语料库中的文本,您可以使用 texts(),并替换这些文本,texts()<-.

所以在你的情况下,假设 mycorpus 是一个 tm 语料库,你可以这样做:

library("quanteda")
stringi_spelling_update2 <- function(x, lut = spellingdoc) {
    stringi::stri_replace_all_regex(str = x, 
                                    pattern = paste0("\b", lut[,1], "\b"), 
                                    replacement = lut[,2], 
                                    vectorize_all = FALSE)
}

myquantedacorpus <- corpus(mycorpus)
texts(mycorpus) <- stringi_spelling_update2(texts(mycorpus), spellingdoc)