用R纠正错别字

时间:2015-04-18 18:01:36

标签: r

以下示例非常适合在您可能的正确答案数量有限时更正拼写错误。在这种情况下,预期答案只能是以下之一:正面,负面,中立

# Example of data typed manually that is prone to typos
typed_manually <- c("Positive", "positive ", "Positive", " positives", "neurtal", "negativv", "high")

# To lower case
typed_manually <- tolower(typed_manually)

# We specify what are the expected correct values
expected_answers <- c("positive", "negative", "neutral")

# Associate typed_manually to expected_answers using a max distance of 2.
# amatch is preferable to the adist function because letter permutations only count as distance =1
library(stringdist)
(i <- amatch(typed_manually,expected_answers,maxDist=2))

## Compare side by side values typed manually and corrections
data.frame(rawtext = typed_manually, code = expected_answers[i])

但是,对于许多变量,我们无法提供预期答案的列表。 例如,如果变量是填写表格的人的雇主。

在这些情况下你会推荐什么?

您是否认为以最明显的错误开头并询问您是否要合并这些值的系统最适合?

控制台中会出现如下文字: &#34; &#34;可口可乐公司&#34;和#34; Cocal-Cola公司&#34;最相似的。 按&#34; 1&#34;将它们合并到可口可乐公司&#34;和&#34; 2&#34;将它们合并到&#34; Cocal-Cola公司&#34;。输入&#34;跳过&#34;跳到下一个命题&#34;

根据此比率订购是否有意义? 字符串距离/字长

有更聪明的方法吗?是否有包这样做?我们怎么能实现这个呢?

谢谢!

注意答:上面的代码受到http://cran.r-project.org/doc/contrib/de_Jonge+van_der_Loo-Introduction_to_data_cleaning_with_R.pdf

的启发

1 个答案:

答案 0 :(得分:1)

这是一个部分答案,其中jarowinkler函数比amatch更能区分哪些选项更接近预期答案。

library(RecordLinkage)
jaro <- sapply(typed_manually, FUN = function(x) (jarowinkler(expected_answers, x, r = 0.5)))  
rownames(jaro) <- expected_answers
jaro.df <- t(as.data.frame(jaro))

> jaro.df
            positive  negative   neutral
positive   1.0000000 0.5833333 0.4226190
positive   0.9777778 0.5648148 0.4179894
positive   1.0000000 0.5833333 0.4226190
 positives 0.9333333 0.5500000 0.4142857
neurtal    0.4226190 0.6857143 0.9666667
negativv   0.4722222 0.9500000 0.6857143
high       0.4583333 0.4583333 0.0000000