在R中,创建一个算法来纠正键入错误

在R中,创建一个算法来纠正键入错误,r,R,我想创建一个能够纠正一些键入错误的算法。在我的例子中,我有一个带有以下变量的数据帧,例如: data id_number name ***123*** Maria dos Santos Magalhães ***123** Maria Santos Magalhães ***329** Lucas Barbosa ***329** Danilo Carvalho ***732** Paulo Silva da Fonseca ***732**

我想创建一个能够纠正一些键入错误的算法。在我的例子中,我有一个带有以下变量的数据帧,例如:

data
 id_number   name
 ***123***   Maria dos Santos Magalhães
 ***123**    Maria Santos Magalhães
 ***329**    Lucas Barbosa 
 ***329**    Danilo Carvalho
 ***732**    Paulo Silva da Fonseca
 ***732**    Wagner Silva Junior
 ***732**    Paulo Silva Fonseca 
解释firts变量:id_编号是每个公民的标识,但不会显示在内部。来源仅提供中间数字

我想构造一个概率算法,能够指出或者说两个具有相同中间id_号码的公民是相同还是不同的公民

例如,在732群体中,Maria dos Santos Magalhães和Maria Santos Magalhães很可能是同一公民。在*329组中,两位公民的概率很高,是不同的

第三组更有趣,保罗·席尔瓦·达·丰塞卡和瓦格纳·席尔瓦·朱尼尔不是同一个公民,但保罗·席尔瓦·达·丰塞卡和保罗·席尔瓦·丰塞卡很可能是同一个公民


一些想法?

这里有一个使用
adist
dplyr
包的解决方案。为了示例,我稍微更改了data.frame,添加了一个
de Fonseca

首先,我们重新创建您的数据:

data <- read.table(text="
id_number;name
123;Maria dos Santos Magalhães
123;Maria Santos Magalhães
329;Lucas Barbosa 
329;Danilo Carvalho
732;Paulo Silva de Fonseca
732;Paulo Silva da Fonseca
732;Wagner Silva Junior
732;Paulo Silva Fonseca", h=T, sep=";")
这是一个使用它的管道:我们首先通过
分组
id\u编号
,在每个组上应用我们的
可能重复的
函数,其结果用于
切片
-ing

data %>% 
  group_by(id_number) %>% 
  slice(possible_duplicates(name)) %>% 
  ungroup()

Source: local data frame [5 x 2]

id_number                       name
(int)                     (fctr)
1       123 Maria dos Santos Magalhães
2       329             Lucas Barbosa 
3       329            Danilo Carvalho
4       732     Paulo Silva de Fonseca
5       732        Wagner Silva Junior
如果需要更严格的阈值(默认为5),可以:

data %>% 
  group_by(id_number) %>% 
  slice(possible_duplicates(name, 2)) %>% 
  ungroup()

Source: local data frame [7 x 2]

id_number                       name
(int)                     (fctr)
1       123 Maria dos Santos Magalhães
2       123     Maria Santos Magalhães
3       329             Lucas Barbosa 
4       329            Danilo Carvalho
5       732     Paulo Silva de Fonseca
6       732        Wagner Silva Junior
7       732        Paulo Silva Fonseca

这就是你想要的吗?

虽然没有直接的联系,但会对单词进行模糊匹配。我还没有用过它,但计划很快就用它。经过一些调整,它可能会有用,也许更合适的做法是直接用它。也就是说,按
id\u number
-中间数字分组,比较所有名称,并假设那些在阈值下(由您通过实验确定)的名称足够相似。甚至在基本RNo中为
adist
。我不明白这个案子:如果
data %>% 
  group_by(id_number) %>% 
  slice(possible_duplicates(name, 2)) %>% 
  ungroup()

Source: local data frame [7 x 2]

id_number                       name
(int)                     (fctr)
1       123 Maria dos Santos Magalhães
2       123     Maria Santos Magalhães
3       329             Lucas Barbosa 
4       329            Danilo Carvalho
5       732     Paulo Silva de Fonseca
6       732        Wagner Silva Junior
7       732        Paulo Silva Fonseca