有没有办法检测两个文本是否与同一品牌相关?

Is there a way to detect if two texts are relating to the same brand?

给定两个文本,例如:“可口可乐”和“可口可乐”,是否有一种方法可以推广到其他品牌和其他文本来检测这两个文本是否与同一品牌相关?

现在我有这个简单的代码:

def matches_company_name(name1: str, name2: str):
    name1_lower_case = name1.lower()
    name2_lower_case = name2.lower()
    return (
        name1_lower_case in name2_lower_case
        or name2_lower_case in name1_lower_case
    )

我有几个想法可以添加到可能的测试中:

有没有办法实现这个?您有什么好的想法(启发式)可以添加到测试中吗?

你可以实现你上面提到的,但是作为一个简单的解决方案,你可以像这样在 python 中使用 re lib :

import re
pattern = r'cocacola'
text = 'Coca-colafd   '

tt=text.lower()
s = re.sub(r'[^\w\s\d]','',tt)
# s = re.sub("\d+", " ", tt)
if re.match(pattern, s):
    print("Match and the word is -->>"+  str(s))
else:
    print("No match")

输出会像这样

Match and the word is -->>cocacolafd

如您所见,即使您向单词添加额外的字符,它也会匹配

请注意,您可以通过自己的库删除数字和空格以及重复符来指定输出,并使其更可靠

有关更多信息,您可以查看 doc

例如:这是删除数字的模式:

s = re.sub("\d+", " ", tt) 

我最终使用了 fuzzywuzzy 包,特别是 partial_token_set_ratio,结果非常好。

用法示例:

from fuzzywuzzy import fuzz


MIN_SCORE = 0.7
s1 = "cocacola"
s2 = "coca-cola"

is_same_company = fuzz.partial_token_set_ratio(s1, s2) > MIN_SCORE
print(is_same_company)
# True