r - 使用 R 文本分析进行词干提取

标签 r text tm stemming

我正在使用 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/

相关文章:

excel - 将每张纸的最后一列导出到文本文件中

R tm包在strptime(d,fmt): input string too long中读取PDF错误

r - tm 包错误 "Cannot convert DocumentTermMatrix into normal matrix since vector is too large"

R tm 包创建 N 个最频繁项的矩阵

R SSH 隧道 MySQL

r - ggplot 更改图例中的几何顺序

r - 如何在 R 中读取一行一行的 CSV?

mysql - 在 R 中使用 RMysql 的 dbGetQuery,如何在结果集上强制字符串数据类型?

html - CSS如何使文本像图像一样缩放

matlab - 有没有办法屏蔽 MATLAB 编辑框中的文本?