问题描述
我希望使用模糊模糊比较列表中的所有字符串,但是看起来并不是每个字符串都在列表中进行了比较。这是我尝试过的:
matrix = [(x,) + i for item in output for x in item for i in process.extract(x,item,scorer=fuzz.partial_ratio)]
A.K.A
for item in output:
for x in item:
for i in process.extract(x,scorer=fuzz.partial_ratio):
这里是一项要与其他所有字符串进行相似性检查的字符串:
[['Java','JavaVersio','Control','GitTools','Sketch','IVision','Zepli','Go','GoAutomatedTesting','AutomatedTestingProjectManagement','AgileMethodology','ScrumEnglish','Writte','English','Spoke','EnglishMobile','ReactNative','Ionic','Android','Kotlin','ObjectiveC'],['HTML','HTMLJava','JavaJavaScript','JavaScript','React','Nodejsversio','GitManualQA',...
因此应该进行210个比较((k *(k-1)/ 2)),但是在这里您可以看到在索引105处正在比较下一项的开始:
matrix_df = pd.DataFrame(matrix,columns=["word","match","score"])
matrix_df[100:150]
word match score
100 ObjectiveC ObjectiveC 100
101 ObjectiveC ReactNative 57
102 ObjectiveC AutomatedTestingProjectManagement 45
103 ObjectiveC Ionic 40
104 ObjectiveC Sketch 38
105 HTML HTML 100
106 HTML HTMLJava 90
107 HTML Control 45
108 HTML GitManualQA 45
109 HTML PostgresqlManagementHosting 45
110 HTMLJava HTMLJava 100
111 HTMLJava HTML 90
112 HTMLJava JavaJavaScript 45
为什么会这样,我该如何解决?
谢谢!
解决方法
fuzzywuzzy中的函数process.extract
具有以下参数:
def extract(query,choices,processor=default_processor,scorer=default_scorer,limit=5):
这里限制由默认这意味着函数仅将与到5个最佳匹配内选择返回的列表(以下时选择不具有5种元素)设定为5。因此,要获取所有元素的分数,您应该传递参数limit=None
。
matrix = [
(x,) + i for item in output
for x in item
for i in process.extract(x,item,scorer=fuzz.partial_ratio,limit=None)
]