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

Fuzzy Wuzzy Not Comparing Every String Against Every Other String in String_List

我希望使用 fuzzy wuzzy 将列表中的所有字符串相互比较,但看起来并不是列表中的每个字符串都在相互比较。这是我尝试过的:

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,item,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',
  'Control',
  '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,这意味着该函数只会 return 一个包含最多 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)
]