如何将自定义函数应用于 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)
我正在尝试将脚本从使用 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)