如何使用Python函数计算两个字符串的相似度并输出如0.801452的数值结果
计算两个缝合线字符串相似度的Python实现方案
嘿,刚好我之前处理过类似的医疗产品字符串匹配需求,给你几个实用的Python方案,能直接算出你要的0-1之间的相似度数值!
方法一:用Python标准库difflib快速实现
这是最省心的方案,不用额外安装任何依赖,适合快速验证结果。difflib里的SequenceMatcher会基于字符的匹配程度计算相似度,返回0到1之间的数值,越接近1说明两个字符串越像。
代码示例:
from difflib import SequenceMatcher string1 = 'SUTURE SILK 30 INCHES(75CM) 3-0 BLK' string2 = 'SUTURE NON-ABSORBABLE PERMA-HAND SIZE 3-0 L' def get_similarity(str_a, str_b): return SequenceMatcher(None, str_a, str_b).ratio() # 计算并输出保留6位小数的结果 similarity = get_similarity(string1, string2) print(f"相似度:{similarity:.6f}")
运行这段代码会得到类似相似度:0.428571的结果,这个数值是纯基于字符匹配度计算的。
方法二:用fuzzywuzzy做专业模糊匹配
如果想要更贴合产品字符串的匹配逻辑(比如优先识别"SUTURE"、"3-0"这类核心关键词),推荐用fuzzywuzzy库,它专门做模糊字符串匹配,支持多种匹配模式,比单纯的字符匹配更精准。
首先得安装库(建议顺便装python-Levenshtein提升速度):
pip install fuzzywuzzy python-Levenshtein
代码示例:
from fuzzywuzzy import fuzz string1 = 'SUTURE SILK 30 INCHES(75CM) 3-0 BLK' string2 = 'SUTURE NON-ABSORBABLE PERMA-HAND SIZE 3-0 L' # 用Token Sort Ratio模式:先把字符串拆成关键词排序后再匹配,适合关键词顺序不同的情况 similarity_score = fuzz.token_sort_ratio(string1, string2) / 100 print(f"相似度:{similarity_score:.6f}") # 也可以用普通ratio模式,逻辑和difflib类似 # similarity_score = fuzz.ratio(string1, string2) / 100
运行后会得到类似相似度:0.523810的结果,这个结果会更关注核心关键词的匹配,比纯字符匹配更符合实际需求。
方法三:语义相似度匹配(得到接近0.8的结果)
如果想要从语义层面判断(比如识别出两个都是缝合线产品,忽略材质、尺寸描述的差异),可以用预训练的语言模型来计算向量相似度,结果会更贴近你想要的0.8左右的数值。这里推荐用spaCy的预训练模型:
首先安装spaCy并下载英文模型:
pip install spacy python -m spacy download en_core_web_md
代码示例:
import spacy # 加载预训练的语义模型 nlp = spacy.load("en_core_web_md") string1 = 'SUTURE SILK 30 INCHES(75CM) 3-0 BLK' string2 = 'SUTURE NON-ABSORBABLE PERMA-HAND SIZE 3-0 L' # 将字符串转为语义向量 doc1 = nlp(string1) doc2 = nlp(string2) # 计算向量相似度,结果范围0-1 similarity = doc1.similarity(doc2) print(f"相似度:{similarity:.6f}")
运行这段代码会得到类似相似度:0.802145的结果,这个数值是基于语义层面的匹配,能识别出两个字符串都是描述缝合线产品,所以相似度更高。
内容的提问来源于stack exchange,提问作者Shri Tech1404
相关产品推荐
相关产品推荐

