2016-07-27 87 views
3

我有一个包含200多个文档的大型文档语料库。正如你可以从这么大的语料库期望的那样,一些单词拼写错误,以不同格式使用,等等。我已经完成了标准文本处理,如转换为小写,删除标点符号,词干。我试图用一些词来替换正确的拼写并将其标准化,然后再进行分析。我已经做了更多的100次替换,使用与下面相同的语法,并且对于大部分替换,它按预期工作。但是,有些(约5%)没有工作。例如,下面的换人似乎只有有限的影响:R tm使用gsub在语料库中替换单词

docs <- tm_map(docs, content_transformer(gsub), pattern = "medecin|medicil|medicin|medicinee", replacement = "medicine") 
docs <- tm_map(docs, content_transformer(gsub), pattern = "eephant|eleph|elephabnt|elleph|elephanyt|elephantant|elephantant", replacement = "elephant") 
docs <- tm_map(docs, content_transformer(gsub), pattern = "firehood|firewod|firewoo|firewoodloc|firewoog|firewoodd|firewoodd", replacement = "firewood") 

通过有限的影响我的意思是,即使一些替代在工作,有些则不是。例如,尽管试图替换“大象”,“药品”,“firewoodd”,但它们在创建DTM(文档术语矩阵)时仍存在。

我不知道为什么这种混合效应正在发生。

而且下面一行是用收集一些组合替换每个字的语料库:

docs <- tm_map(docs, content_transformer(gsub), pattern = "colect|colleci|collectin|collectiong|collectng|colllect|", replacement = "collect") 

仅作参考,当我替补只是一个字,我使用的语法(注意固定= TRUE):

docs <- tm_map(docs, content_transformer(gsub), pattern = "charcola", replacement = "charcoal", fixed=TRUE) 

的一个是单取代和失败是:

docs <- tm_map(docs, content_transformer(gsub), pattern = "dogmonkeycat", replacement = "dog monkey cat", fixed=TRUE) 

回答

4

您遇到的问题是您的模式中的变化未固定,因此只有第一个匹配“胜利”,即已使用,其余未考虑。

您应该使用一些 “锚”(比如,字边界)周围的交替:

pattern = "\\b(medecin|medicil|medicin|medicinee)\\b" 

或只是把较长的替代短的:

pattern = "medicinee|medecin|medicil|medicin" 

注意您可以通过使用字符类来为拼写错误的元音(见[ei])和组:

pattern = "med[ie]ci(?:n(?:ee)?|l)" 
+0

谢谢。这样可行。任何想法为什么单一替代失败? – DotPi

+1

我只能怀疑替换的顺序是错误的,并且还有另一个替换发生在之前,并且文本中没有'dogmonkeycat'被'狗猴猫'取代。 –