fuzzywuzzy中的函数
我希望使用模糊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
为什么会发生这种情况,我该如何解决???
谢谢!
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)
]