Dot*_*tPi 4 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")
Run Code Online (Sandbox Code Playgroud)
由于效果有限,我的意思是即使某些替代品正在运作,但有些则不然.例如,尽管尝试替换" elephantant "," medicinee "," firewoodd ",但在我创建DTM(文档术语矩阵)时它们仍然存在.
我不知道为什么会出现这种混合效应.
另外,以下一行是用一些collect的组合替换语料库中的每个单词:
docs <- tm_map(docs, content_transformer(gsub), pattern = "colect|colleci|collectin|collectiong|collectng|colllect|", replacement = "collect")
Run Code Online (Sandbox Code Playgroud)
仅供参考,当我只替换一个单词时,我使用的是语法(注意fixed = TRUE):
docs <- tm_map(docs, content_transformer(gsub), pattern = "charcola", replacement = "charcoal", fixed=TRUE)
Run Code Online (Sandbox Code Playgroud)
单一替换和失败的是:
docs <- tm_map(docs, content_transformer(gsub), pattern = "dogmonkeycat", replacement = "dog monkey cat", fixed=TRUE)
Run Code Online (Sandbox Code Playgroud)
你遇到的问题是你的模式中的变化没有锚定,因此只有第一个匹配"胜利",即使用,其余的不被考虑.
您应该在替换周围使用一些"锚点"(例如,单词边界):
pattern = "\\b(medecin|medicil|medicin|medicinee)\\b"
Run Code Online (Sandbox Code Playgroud)
或者只是把较长的替代品之前,短的:
pattern = "medicinee|medecin|medicil|medicin"
Run Code Online (Sandbox Code Playgroud)
请注意,通过使用通常输入错误的元音(请参阅参考资料[ei])和组的字符类,可以使模式更快:
pattern = "med[ie]ci(?:n(?:ee)?|l)"
Run Code Online (Sandbox Code Playgroud)