如何在Python中使用最接近的值进行比较?

t1rydlwq  于 2022-12-28  发布在  Python
关注(0)|答案(3)|浏览(172)

我有下面的代码:

Cars = ["Toyota Supra","Toyota","Nissan","Honda Civic","BMW","Opel Corsa","Toyota Trueno"]

for item in Cars:
    if "Toyota" in item:
        print(item)

该代码的输出如下所示:

Toyota Supra
Toyota
Toyota Trueno

我想知道是否有办法返回更准确的值。
例如:
对于丰田来说,100%必须是结果
对于丰田Supra,50%必须是结果
对于丰田Trueno,50%必须是结果
有没有什么库或方法可以看到等值的百分比?

qzlgjiam

qzlgjiam1#

比较两个字符串相似程度的方法有很多种,其中之一就是Levenshtein distance,它度量了将一个字符串修改为另一个字符串所需的单字符编辑次数,Python库提供了这种方法:python-Levenshtein.
另一种方法是Ratcliff/Obershelp模式识别,它将匹配字符数除以字符总数,Python中包含了这种方法的实现:

from difflib import SequenceMatcher

SequenceMatcher(None, "Toyota", "Toyota Supra").ratio()
# returns 0.6666...

使用后者,您可以执行以下操作:

sorted(Cars, key=lambda s: SequenceMatcher(None, s, "Toyota").ratio())
# last entry in list is the best match
t40tm48m

t40tm48m2#

from difflib import SequenceMatcher

SequenceMatcher(None, "Toyota", "Toyota Supra").ratio()
# returns 0.6666...
busg9geu

busg9geu3#

我不确定这是不是你的意思,或者这是不是最好的方法,但是我只是计算了两个字符串匹配的百分比。
代码:

SEARCH_TERM = "Toyota"
CARS = ["Toyota Supra","Toyota","Nissan","Honda Civic","BMW","Opel Corsa","Toyota Trueno"]

for item in CARS:
    if SEARCH_TERM in item:
        not_matching_chars = len(item.replace(SEARCH_TERM, ""))
        all_chars = len(item)
        percent = 100 - ((not_matching_chars / all_chars) * 100)
        print(f"{item}: {percent}% matching")

输出:

Toyota Supra: 50.0% matching
Toyota: 100.0% matching
Toyota Trueno: 46.15384615384615% matching

相关问题