如何用正则表达式(regex)实现客户评论情感分类函数?
基于正则表达式的评论情感分类实现
核心思路
要实现评论的情感分类,核心是用正则表达式精准匹配正负关键词,需注意三个关键点:
- 忽略大小写(比如
Loving和loved都应被识别为正面关键词) - 匹配完整单词/短语(避免把
goodness误判为包含good,或把not good拆成两个单词单独匹配) - 兼容多词关键词(比如示例中的
not good这类短语)
具体实现步骤
- 转义关键词:用
re.escape()处理所有关键词,避免关键词中的特殊字符(如!、?)干扰正则匹配逻辑 - 构建正则模式:用
|连接所有处理后的关键词,并用单词边界\b包裹(多词短语整体加边界),同时开启大小写不敏感模式 - 匹配判断逻辑:优先检查正面关键词,匹配到则标记为正面;否则检查负面关键词,匹配到标记为负面;都无匹配则标记为中性
Python代码示例
import re def sentiment(review, positive_keywords, negative_keywords): # 生成正面关键词的正则匹配模式 positive_pattern = r'\b(' + '|'.join(re.escape(word) for word in positive_keywords) + r')\b' # 生成负面关键词的正则匹配模式 negative_pattern = r'\b(' + '|'.join(re.escape(word) for word in negative_keywords) + r')\b' # 先检查正面匹配(忽略大小写) if re.search(positive_pattern, review, flags=re.IGNORECASE): return "positive" # 再检查负面匹配(忽略大小写) elif re.search(negative_pattern, review, flags=re.IGNORECASE): return "negative" # 无匹配则返回中性 else: return "neutral" # 测试示例场景 test_review = "I absolutely loved this product! Loving it!" positive_words = ['loved','outstanding', 'exceeded'] negative_words = ['hated','not good', 'bad'] print(sentiment(test_review, positive_words, negative_words)) # 输出: positive
补充说明
- 如果需要更精准的匹配(比如排除
not loved这类带否定前缀的情况),可以在正则中添加否定前置的判断逻辑,但会增加复杂度,需根据实际业务需求调整 - 若评论中同时出现正负关键词,当前逻辑会优先返回正面,你可以根据需求修改判断规则(比如统计匹配次数,取次数多的类别)
内容的提问来源于stack exchange,提问作者Dharmini
相关产品推荐
相关产品推荐

