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)
]
我希望使用 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)
]