我正在使用TM包进行大量的分析.我最大的问题之一就是干扰和干扰样转化.
假设我有几个会计相关的条款(我知道拼写问题).
干涸后,我们有:
accounts -> account account -> account accounting -> account acounting -> acount acount -> acount acounts -> acount accounnt -> accounnt
结果:3条款(帐户,帐户,帐户)我希望1(帐户),因为所有这些都与相同的术语相关.
1)纠正拼写是一种可能性,但我从来没有尝试过这样的一种可能性.
2)另一个选项是创建一个参考列表,即account =(accounts,account,accounting,acounting,acount,acounts,accounnt),然后用主项取代所有的出现.在R中我该怎么做?
再次,任何帮助/建议将不胜感激.
解决方法
我们可以设置同义词列表并替换这些值.例如
synonyms <- list( list(word="account",syns=c("acount","accounnt")) )
这表示我们要用“帐户”替换“acount”和“accounnt”(我假设我们在干预后这样做).现在我们来创建测试数据.
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”.