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



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

matrix = [(x,) + i for item in output for x in item for i in process.extract(x, item, scorer=fuzz.partial_ratio)]

又称

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

这里的limit默认设置为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)
]

最新更新