我正在尝试一个简单的文本匹配活动,其中我抓取了博客文章的标题,并尝试使用预定义的类别与特定关键字匹配。例如,博客文章的标题是“使用Oppo Reno8系列拍摄完美夜景照片”,一旦我确认“Oppo”包含在我的类别中,它就应该与我的“手机”类别匹配。
通常情况下,即使以小写形式输入,也会将“一般”作为类别。如此处所示。
我更喜欢使用当前的方法,在字典内输入值来进行匹配活动,而不是运行纯正则表达式模式,然后通过模糊匹配得出结果。
categories = {"phone" : ['apple', 'oppo', 'xiaomi', 'samsung', 'huawei', 'nokia'],
"postpaid" : ['signature', 'postpaid'],
"prepaid" : ['power all', 'giga'],
"sku" : ['data', 'smart bro'],
"ewallet" : ['gigapay'],
"event" : ['gigafest'],
"software" : ['ios', 'android', 'macos', 'windows'],
"subculture" : ['anime', 'korean', 'kpop', 'gaming', 'pop', 'culture', 'lgbtq', 'binge', 'netflix', 'games', 'ml', 'apple music'],
"health" : ['workout', 'workouts', 'exercise', 'exercises'],
"crypto" : ['axie', 'bitcoin', 'coin', 'crypto', 'cryptocurrency', 'nft'],
"virtual" : ['metaverse', 'virtual']}
那么我的数据框将会是这样
幸运的是,我找到了一个关于如何在映射到嵌套字典中使用正则表达式的参考,但它似乎无法处理前几个单词之外的内容。
参考链接在这里
因此,一旦我使用了下面的代码:
def put_category(cats, text):
regex = re.compile("(%s)" % "|".join(map(re.escape, categories.keys())))
if regex.search(text):
ret = regex.search(text)
return ret[0]
else:
return 'general'
通常情况下,即使以小写形式输入,也会将“一般”作为类别。如此处所示。
我更喜欢使用当前的方法,在字典内输入值来进行匹配活动,而不是运行纯正则表达式模式,然后通过模糊匹配得出结果。
if
条件中使用的表达式。 - outis