【问题标题】:Faster For Loop for Fuzzy Match用于模糊匹配的更快 For 循环
【发布时间】:2017-06-29 05:04:19
【问题描述】:

下面是我编写的模糊匹配的简单脚本。输入文件中大约有 24,000 个关键字,主列表中大约有 900,000 个。

目前处理 24,000 个关键字需要很长时间。 有什么想法可以消除 for 循环以更快地进行某些事情吗?

> #=====Install Packages====# 
library(stringdist)
> 
> #=====Import Master List======# 
master_list =
> read.csv('/Documents/Keywords Search Terms
> Tool/input/master/Master List.csv')
> 
> #=====Import Input File=====# input_data =
> read.csv('/Documents/Keywords Search Terms
> Tool/input/test_input_file.csv')
> 
> #=====Fuzzy Matching for Keywords=====#
> #Convert to Characters 
master_list$Keyword<-as.character(master_list$Keyword)
> input_data$Keyword<-as.character(input_data$Keyword)
> 
> #Perform Matching 
fuzzy_match = data.frame()
> 
> for (i in 1:nrow(input_data)){   new_word = subset(input_data, Keyword
> == input_data$Keyword[i])   new_word$match_dummy = ain(new_word$Keyword,master_list$Keyword)   fuzzy_match <-
> rbind(fuzzy_match,new_word) }

【问题讨论】:

    标签: r for-loop fuzzy


    【解决方案1】:

    尝试使用 stringdistmatrix 函数。它是并行化的。

    library(stringdist)     
    stringdistmatrix(c('a', 'b', 'c'), c('a', 'b', 'c'))
    

    根据评论更新:

    尝试类似:

    ain(c('a', 'd'), c('a', 'b', 'c'))
    

    这将产生:

    TRUE FALSE
    

    【讨论】:

    • 谢谢,但如果我在每个数据集中没有相同数量的记录,那将不起作用。我还想在输入列表中输出一个新字段,指定是否匹配。
    猜你喜欢
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 2021-10-24
    • 2016-05-30
    相关资源
    最近更新 更多