R tm使用gsub替换语料库中的单词

时间:2016-07-27 07:00:52

标签: regex r text-mining tm

我有一个包含200多个文档的大型文档语料库。正如你可以从这么大的语料库中看到的那样,一些单词拼写错误,以不同的格式使用,依此类推。我已经完成了标准的文本处理,如转换为小写,删除标点符号,词干。在进行分析之前,我试图用一些单词替换正确的拼写并将其标准化。我使用与下面相同的语法完成了100次替换,对于大多数替换,它按预期工作。但是,有些(约5%)不起作用。例如,以下替换似乎只有有限的效果:

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") 

由于效果有限,我的意思是即使有些替换工作正在进行,但有些则不然。例如,尽管尝试替换&#34; elephantant &#34;,&#34; medicinee &#34;,&#34; firewoodd < / em>&#34;,当我创建DTM(文档术语矩阵)时,它们仍然存在。

我不知道为什么会出现这种混合效应。

以下一行还用一些collect:

的组合替换语料库中的每个单词
docs <- tm_map(docs, content_transformer(gsub), pattern = "colect|colleci|collectin|collectiong|collectng|colllect|", replacement = "collect")

仅供参考,当我只替换一个单词时,我使用的是语法(注意 fixed = 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)

1 个答案:

答案 0 :(得分:6)

你遇到的问题是模式中的变化没有锚定,因此只有第一个匹配&#34;胜出#34;即使用,其余部分不被考虑。

你应该使用一些&#34;锚点&#34; (例如,字边界)围绕着变化:

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

或者只是将更长的替代品放在更短的替代品之前:

pattern = "medicinee|medecin|medicil|medicin"

请注意,您可以通过为常见错误的元音(请参阅[ei])和群组使用字符类来提高模式的速度:

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