如何使用 jaro-winkler 相似性检查处理巨大的列表
How to work with gigantic list with jaro-winkler similarity check
我有一个包含超过 1000 万个字符串的列表,我需要在使用相似度函数时对其进行迭代并获得分数。
我通过从另一个列表中获取一个项目来执行此操作,该项目将用于检查 giga 列表的相似性,如下所示..
similarities = []
del similarities[:]
i = 0
drugs ['amoxil', 'acyclovir', 'univir', ...]
while i < len(drugs):
for idx, item in enumerate(drugs):
similarity1 = jaro.jaro_winkler_metric(text1,item)*100
similarity2 = jaro.jaro_winkler_metric(text2,item)*100
similarity3 = jaro.jaro_winkler_metric(text3,item)*100
similarity4 = jaro.jaro_winkler_metric(textn..,item)*100
similarityn..= ..
similarities.append(similarity1)
i += 1
return similarities
要使用的文本(文本 1、文本 2 等)大约为 50 到 100。如果药物列表有 10 个左右的项目,代码运行良好且快速。我添加的项目越多,它变得越慢,问题越多,如果我有 50 万个项目,笔记本电脑可能会死机。我有超过 1000 万种物品要用于药物清单。
如何在不使系统崩溃的情况下加快速度?
此致
您可能想看看 batch_jaro_winkler。我为与此类似的用例创建了它,您需要在这些用例中获得最佳性能。您构建了一个 模型 ,然后您可以将其重复用于任意数量的运行时计算。将你的 drugs
或你的 texts
作为参数传递给 build_exportable_model
,无论哪个更大。
import batch_jaro_winkler as bjw
drugs = ['amoxil', 'acyclovir', 'univir', ...]
exportable_model = bjw.build_exportable_model(drugs)
runtime_model = bjw.build_runtime_model(exportable_model)
for text in ['text1', 'text2', 'text3']:
similarities = bjw.jaro_winkler_distance(runtime_model, text)
# similarities = [('amoxil', 0.0), ('acyclovir', 0.5), ('univir', 0.96)]
如果您只关心与至少某个分数匹配的最佳结果 and/or,我强烈建议将 min_score
和 n_best_results
作为参数传递给 bjw.jaro_winkler_distance
.
我有一个包含超过 1000 万个字符串的列表,我需要在使用相似度函数时对其进行迭代并获得分数。 我通过从另一个列表中获取一个项目来执行此操作,该项目将用于检查 giga 列表的相似性,如下所示..
similarities = []
del similarities[:]
i = 0
drugs ['amoxil', 'acyclovir', 'univir', ...]
while i < len(drugs):
for idx, item in enumerate(drugs):
similarity1 = jaro.jaro_winkler_metric(text1,item)*100
similarity2 = jaro.jaro_winkler_metric(text2,item)*100
similarity3 = jaro.jaro_winkler_metric(text3,item)*100
similarity4 = jaro.jaro_winkler_metric(textn..,item)*100
similarityn..= ..
similarities.append(similarity1)
i += 1
return similarities
要使用的文本(文本 1、文本 2 等)大约为 50 到 100。如果药物列表有 10 个左右的项目,代码运行良好且快速。我添加的项目越多,它变得越慢,问题越多,如果我有 50 万个项目,笔记本电脑可能会死机。我有超过 1000 万种物品要用于药物清单。 如何在不使系统崩溃的情况下加快速度? 此致
您可能想看看 batch_jaro_winkler。我为与此类似的用例创建了它,您需要在这些用例中获得最佳性能。您构建了一个 模型 ,然后您可以将其重复用于任意数量的运行时计算。将你的 drugs
或你的 texts
作为参数传递给 build_exportable_model
,无论哪个更大。
import batch_jaro_winkler as bjw
drugs = ['amoxil', 'acyclovir', 'univir', ...]
exportable_model = bjw.build_exportable_model(drugs)
runtime_model = bjw.build_runtime_model(exportable_model)
for text in ['text1', 'text2', 'text3']:
similarities = bjw.jaro_winkler_distance(runtime_model, text)
# similarities = [('amoxil', 0.0), ('acyclovir', 0.5), ('univir', 0.96)]
如果您只关心与至少某个分数匹配的最佳结果 and/or,我强烈建议将 min_score
和 n_best_results
作为参数传递给 bjw.jaro_winkler_distance
.