Fuzzy Wuzzy无法将String_List中的每个字符串与其他字符串进行比较

问题描述

我希望使用模糊模糊比较列表中的所有字符串,但是看起来并不是每个字符串都在列​​表中进行了比较。这是我尝试过的:

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)
]