Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
r语言中的模糊字符串匹配_R_String Matching_Fuzzy Search - Fatal编程技术网

r语言中的模糊字符串匹配

r语言中的模糊字符串匹配,r,string-matching,fuzzy-search,R,String Matching,Fuzzy Search,我有两个数据集,每个数据集的行数超过10万行。我想根据与一列(“电影标题”)匹配的模糊字符串以及发布日期来合并它们。我提供了以下两个数据集的样本 数据集-1 itemid userid rating time title release_date 99991 1673 835 3 1998-03-27 mirage 1995 9999

我有两个数据集,每个数据集的行数超过10万行。我想根据与一列(“电影标题”)匹配的模糊字符串以及发布日期来合并它们。我提供了以下两个数据集的样本

数据集-1

itemid userid rating       time                              title release_date
99991    1673    835      3 1998-03-27                             mirage         1995
99992    1674    840      4 1998-03-29                         mamma roma         1962
99993    1675    851      3 1998-01-08                     sunchaser, the         1996
99994    1676    851      2 1997-10-01                   war at home, the         1996
99995    1677    854      3 1997-12-22                      sweet nothing         1995
99996    1678    863      1 1998-03-07                         mat' i syn         1997
99997    1679    863      3 1998-03-07                          b. monkey         1998
99998    1680    863      2 1998-03-07                      sliding doors         1998
99999    1681    896      3 1998-02-11                       you so crazy         1994
100000   1682    916      3 1997-11-29 scream of stone (schrei aus stein)         1991
数据集-2

itemid userid rating       time                                   title release_date
1    2844   4477      3 2013-03-09 fantã´mas - 〠l'ombre de la guillotine         1913
2    4936   8871      4 2013-05-05                                the bank         1915
3    4936  11628      3 2013-07-06                                the bank         1915
4    4972  16885      4 2013-08-19                   the birth of a nation         1915
5    5078  11628      2 2013-08-23                               the cheat         1915
6    6684   4222      3 2013-08-24                             the fireman         1916
7    6689   4222      3 2013-08-24                         the floorwalker         1916
8    7264   2092      4 2013-03-17                                the rink         1916
9    7264   5943      3 2013-05-12                                the rink         1916
10   7880  11628      4 2013-07-19                             easy street         1917
我看过“agrep”,但它一次只匹配一个字符串。“stringdist”函数很好,但您需要在循环中运行它,找到最小距离,然后进行进一步处理,考虑到数据集的大小,这非常耗时。字符串可以有打字错误和特殊字符,因此需要模糊匹配。我环顾四周,找到了“列恩施坦”和“雅罗·温克勒”的方法。我读到的后面的内容对于字符串中有拼写错误的情况很有用

在这种情况下,只有模糊匹配可能无法提供良好的结果,例如,一个数据集中的电影标题“玩具总动员”可以与另一个数据集中的“玩具总动员2”匹配,这是不正确的。因此,我需要考虑发布日期,以确保匹配的电影是唯一的。 我想知道是否有一种方法可以在不使用循环的情况下完成此任务?更糟糕的情况是,如果我必须使用循环,我如何才能使它高效、快速地工作

我已经尝试了以下代码,但它花费了大量的时间来处理

for(i in 1:nrow(test))
  for(j in 1:nrow(test1))
  {

    test$title.match <- ifelse(jarowinkler(test$x[i], test1$x[j]) > 0.85,
                      test$title, NA)
  }
for(i在1:nrow(测试))
对于(1中的j:nrow(测试1))
{
测试$title.match 0.85,
测试名称(不适用)
}
测试-包含1682个转换为小写的唯一电影名称 test1-包含11451个转换为小写的唯一电影名称


有没有一种方法可以避免for循环并使其更快地工作?

这种方法如何推动您前进?看到结果后,可以从0.85调整匹配度。然后可以使用dplyr根据匹配的标题进行分组,并减去发布日期进行总结。任何零表示相同的发布日期

dataset-1$title.match <- ifelse(jarowinkler(dataset-1$title, dataset_2$title) > 0.85, dataset-1$title, NA)
dataset-1$title.match 0.85,dataset-1$title,NA)

不要重复您的问题。开始一个赏金我想要求这个方法。它在帮助页面中说,数组或向量的长度应该相同,否则较短的将被回收。该方法能否用于大小不等的数据集?一个数据集正好包含10万行,另一个数据集包含11.7万行。一个数据集中的唯一标题为1682,另一个数据集中的唯一标题为11451。你能建议一个解决这种情况的方法吗?我曾尝试在不相等的数据集上运行该函数,但它给出了预期的错误。我猜您的代码还需要一个循环,否则它将只在两个数据集中匹配element-I和element-I。我希望遍历第二个数据集中的所有标题,以找到一个匹配值,该值同样需要两个for循环。你对如何使用矢量化或sapply/lapply来完成它有什么想法吗?尝试一些代码并将其作为问题的编辑发布。