我正在使用 TM
包进行大量分析。我最大的问题之一与词干和类词干转换有关。
假设我有几个与会计相关的术语(我知道拼写问题)。
词干提取后我们有:
accounts -> account
account -> account
accounting -> account
acounting -> acount
acount -> acount
acounts -> acount
accounnt -> accounnt
结果:3 个术语(帐户、帐户、帐户),而我希望使用 1 个术语(帐户),因为所有这些都与同一个术语相关。
1) 纠正拼写是可能的,但我从未在 R 中尝试过这样做。这可能吗?
2) 另一个选项是创建一个引用列表,即 account = (accounts, account, account, acounting, acount, acounts, account),然后用主术语替换所有出现的情况。我该如何在 R 中执行此操作?
再次,任何帮助/建议将不胜感激。
最佳答案
我们可以设置同义词列表并替换这些值。例如
synonyms <- list(
list(word="account", syns=c("acount", "accounnt"))
)
这表示我们想用“account”替换“acount”和“account”(我假设我们在词干提取后这样做)。现在让我们创建测试数据。
raw<-c("accounts", "account", "accounting", "acounting",
"acount", "acounts", "accounnt")
现在让我们定义一个转换函数,它将用主要同义词替换列表中的单词。
library(tm)
replaceSynonyms <- content_transformer(function(x, syn=NULL) {
Reduce(function(a,b) {
gsub(paste0("\\b(", paste(b$syns, collapse="|"),")\\b"), b$word, a)}, syn, x)
})
这里我们使用content_transformer
函数来定义自定义转换。基本上我们只是用 gsub
来替换每个单词。然后我们可以在语料库上使用它
tm <- Corpus(VectorSource(raw))
tm <- tm_map(tm, stemDocument)
tm <- tm_map(tm, replaceSynonyms, synonyms)
inspect(tm)
我们可以看到所有这些值都根据需要转换为“帐户”。要添加其他同义词,只需将其他列表添加到主同义词
列表中即可。每个子列表都应具有名称“word”和“syns”。
关于r - 使用 R 文本分析进行词干提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24443388/