Python 在具有匹配字符串值及其计数的列表中查找模糊匹配字符串

Python 在具有匹配字符串值及其计数的列表中查找模糊匹配字符串,python,fuzzywuzzy,Python,Fuzzywuzzy,我有一个清单如下 A = ['vikash','vikas','Vinod',Vikky','Akash','Vinodh','Sachin','Salman,'Ajay','Suchin','Akash','vikahs'] 我想将列表中的每个元素与每个元素进行匹配,并找到匹配率为90%或以上的每个元素的模糊匹配字符串以及匹配元素的计数 在数据框中,我的结果应该如下所示 string Matching strings count ==============================

我有一个清单如下

A = ['vikash','vikas','Vinod',Vikky','Akash','Vinodh','Sachin','Salman,'Ajay','Suchin','Akash','vikahs']
我想将列表中的每个元素与每个元素进行匹配,并找到匹配率为90%或以上的每个元素的模糊匹配字符串以及匹配元素的计数

在数据框中,我的结果应该如下所示

string  Matching strings count
===============================
Vikash  vikas,vikahs      2
vikas   vikash,vikahs     2
vinod   vinodh            1
Vikky                     0
Akash   Akash             1
...
..
Vikahs vikash,vikas       2
有谁能帮助我实现这一点,因为我是python新手


谢谢

这可以通过以下方式使用fuzzyfuzzy实现:

将熊猫作为pd导入
从fuzzyfuzzy导入fuzz
元素=['vikash'、'vikas'、'Vinod'、'Vikky'、'Akash'、'Vinodh'、'Sachin'、'Salman'、'Ajay'、'Suchin'、'Akash'、'vikahs']
结果=[[name,[],0]表示元素中的名称]
对于枚举(元素)中的(i,元素):
对于枚举(元素[i+1:])中的(j,选项):
如果模糊比率(元素,选项)>=90:
结果[i][2]+=1
结果[i][1]。追加(选择)
结果[j+i+1][2]+=1
结果[j+i+1][1]。追加(元素)
data=pd.DataFrame(结果、列=['name'、'duplicates'、'duplicate_count'])
作为替代方案,我编写了该库,它在返回与FuzzyWuzzy相同的结果时速度更快,并且可以通过以下方式实现:

将熊猫作为pd导入
从rapidfuzz导入模糊
元素=['vikash'、'vikas'、'Vinod'、'Vikky'、'Akash'、'Vinodh'、'Sachin'、'Salman'、'Ajay'、'Suchin'、'Akash'、'vikahs']
结果=[[name,[],0]表示元素中的名称]
对于枚举(元素)中的(i,元素):
对于枚举(元素[i+1:])中的(j,选项):
如果模糊比率(元素、选项、分数_截止=90):
结果[i][2]+=1
结果[i][1]。追加(选择)
结果[j+i+1][2]+=1
结果[j+i+1][1]。追加(元素)
data=pd.DataFrame(结果、列=['name'、'duplicates'、'duplicate_count'])
我确实运行了一个快速基准测试,以显示每1000次运行中两次之间的运行时差异:

#模糊模糊
0.13835792080499232
#RapidFuzz
0.03843669104389846
两者的输出为:

      name        duplicates  duplicate_count
0   vikash           [vikas]                1
1    vikas  [vikash, vikahs]                2
2    Vinod          [Vinodh]                1
3    Vikky                []                0
4    Akash           [Akash]                1
5   Vinodh           [Vinod]                1
6   Sachin                []                0
7   Salman                []                0
8     Ajay                []                0
9   Suchin                []                0
10   Akash           [Akash]                1
11  vikahs           [vikas]                1

匹配率为90%或以上是什么意思?有不同类型的匹配比率,例如在模糊模糊模糊中。当你有两个得分超过90%的元素时,它们应该都在结果中并增加一个,还是只增加一个?我使用比率来检查模糊匹配比率。从fuzzyfuzzy导入fuzz fuzz.ratio(str1,str2),如果超过1个值超过90%,则两者都应作为结果并递增。感谢@maxbachmann的快速回复,我非常感谢您的时间和专业建议。安装rapidfuzz库后,我发现以下错误-------------------------------------------------------------------35 gc.collect()中的ImportError回溯(最近一次调用)36->37从rapidfuzz导入fuzz C:\ProgramData\Anaconda3\lib\site packages\rapidfuzz_init_uuz.py在2个快速字符串匹配库中导入错误:DLL加载失败:找不到指定的模块。您是否可以在此处打开一个问题:同样使用上述函数,我可以获得匹配字符串的计数,但我也需要匹配字符串的列表..vikash 1 vikas 2 Vinod 1 Vikky 0 Akash 1 Vinodh 1 Sachin 0 Salman 0 Ajay 0 Suchin 0 Akash 1 vikahs 1如何获得匹配字符串以及此结果?在这个结果中,我得到了字符串和匹配字符串的计数。另外,您能帮我修复rapidfuzz的DLL加载失败错误吗?