我正在开展一项涉及清理大学专业数据清单的项目。我发现很多拼写错误,所以我希望使用函数gsub()
用拼写正确的拼写替换拼错拼写的函数。例如,假设'biolgy'在名为Major的专业列表中拼写错误。如何让R检测拼写错误并用正确的拼写替换它?我试过gsub('biol', 'Biology', Major)
,但只替换了'biolgy'中的前四个字母。如果我做gsub('biolgy', 'Biology', Major)
,它仅适用于该案例,但这并不能检测出“生物学”的其他形式的拼写错误。
谢谢!
答案 0 :(得分:13)
您应该定义一些漂亮的正则表达式,或者使用agrep
包中的base
。 stringr
包是另一种选择,我知道人们使用它,但我是正则表达式的忠实粉丝,所以对我来说这是禁忌。
无论如何,agrep
应该做到这一点:
agrep("biol", "biology")
[1] 1
agrep("biolgy", "biology")
[1] 1
编辑:
您还应该使用ignore.case = TRUE
,但要做好“手工”记账的准备......
答案 1 :(得分:2)
您可以设置所有可能拼写错误的向量,然后对gsub调用进行循环。类似的东西:
biologySp = c("biolgy","biologee","bologee","bugs")
for(sp in biologySp){
Major = gsub(sp,"Biology",Major)
}
如果你想更聪明地做一些事情,看看CRAN上是否有任何模糊匹配包,或者使用'soundex'匹配的东西....
大约维基百科页面字符串匹配可能很有用,并尝试在R-help中搜索一些关键术语。
答案 2 :(得分:2)
你可以先将这些专业与可用专业的列表进行匹配,任何不匹配的专业都可能是错误的。然后使用agrep函数再次将这些与已知专业相匹配(agrep进行近似匹配,因此如果它与正确的值类似,那么您将获得匹配)。
答案 3 :(得分:0)
vwr包具有字符串匹配方法:
http://ftp.heanet.ie/mirrors/cran.r-project.org/web/packages/vwr/index.html
所以你最好的选择可能是使用与可能的主题字符串具有最小Levenshtein距离的字符串:
> levenshtein.distance("physcs",c("biology","physics","geography"))
biology physics geography
7 1 9
如果你获得相同的最小值,那么翻一下硬币:
> levenshtein.distance("biolsics",c("biology","physics","geography"))
biology physics geography
4 4 8
答案 4 :(得分:0)
示例1a)perl / linux正则表达式:'s/oldstring/newstring/'
例1b)R等价于1a:srcstring=sub(oldstring, newstring, srcstring)
示例2a)perl / linux正则表达式:'s/oldstring//'
示例2b)R等价于2a:srcstring=sub(oldstring, "", srcstring)