有没有办法检测两个文本是否与同一品牌相关?
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
)
我有几个想法可以添加到可能的测试中:
- 进行 POS 标记并比较 ORG
- 用空格或破折号分隔并检查是否有共同部分。 (可能一般)
- 设置某种编辑距离阈值(对于长度相差很大的字符串可能会失败)
有没有办法实现这个?您有什么好的想法(启发式)可以添加到测试中吗?
你可以实现你上面提到的,但是作为一个简单的解决方案,你可以像这样在 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
给定两个文本,例如:“可口可乐”和“可口可乐”,是否有一种方法可以推广到其他品牌和其他文本来检测这两个文本是否与同一品牌相关?
现在我有这个简单的代码:
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
)
我有几个想法可以添加到可能的测试中:
- 进行 POS 标记并比较 ORG
- 用空格或破折号分隔并检查是否有共同部分。 (可能一般)
- 设置某种编辑距离阈值(对于长度相差很大的字符串可能会失败)
有没有办法实现这个?您有什么好的想法(启发式)可以添加到测试中吗?
你可以实现你上面提到的,但是作为一个简单的解决方案,你可以像这样在 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