我有一个包含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)
答案 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)"