自动从列中提取拼写不匹配的字符串并在R中替换它们

Sku*_*rup 6 string r text-analysis

我有一个巨大的数据集,类似于下面发布的列

NameofEmployee <- c(x, y, z, a)
Region <- c("Pune", "Orissa", "Orisa", "Poone")
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,在Region列中,"Pune"区域以两种不同的方式拼写 - 即"Pune"和"Poona".

同样,"奥里萨"拼写为"奥里萨"和"奥里萨".

我有多个区域实际上是相同的但是拼写方式不同.这会在分析数据时引起问题.

我想在R的帮助下自动获得这些不匹配拼写的列表.
我还想自动用正确的拼写替换拼写.

Rui*_*das 10

我相信你应该用一个语音代码来确定哪些拼写接近哪个拼写.

一个很好的选择是soundex算法,在几个R包中实现.我会用包stringdist.

library(stringdist)

Region <- c("Pune", "Orissa", "Orisa", "Poone")
phonetic(Region)
#[1] "P500" "O620" "O620" "P500"
Run Code Online (Sandbox Code Playgroud)

如您所见,Region[1]Region[4]具有相同的soundex代码.同样的Region[2]Region[3].


Col*_*FAY 9

错误拼写很难被发现,在使用名称时会发生更多事件.

我建议使用一些字符串距离来检测两个单词的接近程度.您可以使用tidystringdist轻松完成此操作,它允许从向量中获取所有组合,然后从stringdist执行所有可用的字符串距离方法:

Region <- c("Pune", "Orissa", "Orisa", "Poone")

library(tidystringdist)
library(magrittr)

tidy_comb_all(Region) %>%
  tidy_stringdist()
#> # A tibble: 6 x 12
#>   V1     V2      osa    lv    dl hamming   lcs qgram cosine jaccard     jw
#> * <chr>  <chr> <dbl> <dbl> <dbl>   <dbl> <dbl> <dbl>  <dbl>   <dbl>  <dbl>
#> 1 Pune   Oris…     6     6     6     Inf    10    10 1          1   1     
#> 2 Pune   Orisa     5     5     5     Inf     9     9 1          1   1     
#> 3 Pune   Poone     2     2     2     Inf     3     3 0.433      0.4 0.217 
#> 4 Orissa Orisa     1     1     1     Inf     1     1 0.0513     0   0.0556
#> 5 Orissa Poone     6     6     6     Inf    11    11 1          1   1     
#> 6 Orisa  Poone     5     5     5       5    10    10 1          1   1     
#> # ... with 1 more variable: soundex <dbl>
Run Code Online (Sandbox Code Playgroud)

reprex包(v0.2.0)于2018-07-24创建.

正如你在这里看到的那样,Pune和Poone的osa,lv和dl距离为2,而Orisa/Orissa的距离为1,表明它们的拼写非常接近.

确定后,您可以进行更换.