如何用优雅方式统计句子中不同指定词汇的出现次数?
优雅统计句子中目标表述的数量
针对你需要统计句子中不同目标表述(比如提及的政客数量)的需求,原来逐一定义正则、逐个判断的写法在词汇量增大时会变得繁琐,这里提供两种更简洁可扩展的实现方式:
方法一:合并正则模式,统计唯一匹配项
这种方式适合需要精准匹配(比如全词匹配、忽略大小写)的场景,通过合并所有目标词汇为一个正则模式,一次性找出所有匹配项后去重统计:
import re # 维护目标词汇列表,新增/删除直接修改这里即可 targets = ['Trump', 'Biden', 'Obama'] sentence = "Trump won the republican primaries, and Biden once defeated Trump." # 构建带单词边界的正则模式,处理特殊字符并支持大小写忽略 pattern = re.compile( r'\b(' + '|'.join(re.escape(t) for t in targets) + r')\b', re.IGNORECASE ) # 提取所有匹配项,转集合去重后统计数量 unique_mentioned = set(pattern.findall(sentence)) count = len(unique_mentioned) print(count) # 输出:2(仅提到Trump和Biden)
方法二:遍历目标列表,检查存在性
如果需求更简单,也可以直接遍历目标列表,逐个检查词汇是否在句子中出现(同样支持全词匹配):
import re targets = ['Trump', 'Biden', 'Obama'] sentence = "Trump won the republican primaries, and Biden once defeated Trump." # 用生成器表达式统计出现过的目标数量 count = sum( 1 for t in targets if re.search(r'\b' + re.escape(t) + r'\b', sentence, re.IGNORECASE) ) print(count) # 输出:2
优势说明
- 可扩展性强:只需维护目标词汇列表,无需为每个词汇单独编写正则和判断逻辑
- 避免误匹配:通过
\b单词边界确保匹配完整词汇,re.escape处理词汇中的特殊字符 - 灵活适配需求:可通过修改正则参数(如
re.IGNORECASE)快速调整匹配规则
内容的提问来源于stack exchange,提问作者Carlos Parisotto
相关产品推荐
相关产品推荐

