11

我正在开展一个项目,该项目涉及清理大学专业数据列表。我发现很多拼写错误,所以我希望使用该功能gsub()将拼写错误的拼写替换为正确的拼写。例如,假设“biolgy”在名为 Major 的专业列表中拼写错误。如何让 R 检测拼写错误并将其替换为正确的拼写?我已经尝试过gsub('biol', 'Biology', Major),但这只会替换“biolgy”中的前四个字母。如果我这样做gsub('biolgy', 'Biology', Major)了,它仅适用于这种情况,但这并不能检测到“生物学”的其他形式的拼写错误。

谢谢!

4

5 回答 5

13

您应该定义一些漂亮的正则表达式,或者agrepbase包中使用。stringrpackage 是另一种选择,我知道人们使用它,但我非常喜欢正则表达式,所以这对我来说是禁忌。

无论如何,agrep应该做的伎俩:

agrep("biol", "biology")
[1] 1
agrep("biolgy", "biology")
[1] 1

编辑:

你也应该使用ignore.case = TRUE,但要准备好“手工”做一些簿记......

于 2011-03-14T18:43:23.930 回答
2

您可以设置所有可能拼写错误的向量,然后对 gsub 调用执行循环。就像是:

biologySp = c("biolgy","biologee","bologee","bugs")

for(sp in biologySp){
  Major = gsub(sp,"Biology",Major)
}

如果你想做一些更聪明的事情,看看 CRAN 上是否有任何模糊匹配包,或者使用“soundex”匹配的东西......

维基百科页面约。字符串匹配可能很有用,并尝试在 R-help 中搜索一些关键术语。

http://en.wikipedia.org/wiki/Approximate_string_matching

于 2011-03-14T18:32:40.487 回答
2

您可以首先将专业与可用专业列表进行匹配,任何不匹配的都可能是拼写错误。然后使用 agrep 函数再次将这些与已知专业进行匹配(agrep 进行近似匹配,因此如果它与正确值相似,那么您将获得匹配)。

于 2011-03-14T18:44:48.570 回答
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)

于 2014-11-16T04:38:35.420 回答
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 
于 2011-03-15T10:50:24.843 回答