You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中检测词汇是否在句子列表中的高效方法探讨

词汇与句子匹配的性能优化方案

问题背景

我有一个无重复的词汇列表和无重复的句子列表,需要检查每个词汇是否存在于每个句子中。当前使用双重循环实现,但担心数据量较大时(比如100+词汇、1000+句子)效率不足,想寻找更优方案,比如利用字典优化?

现有实现代码:

word_list = ["人", "天", "地"] # 实际场景词汇量超100
input_file = ["你是不是经常也告诉自己", "不管发生什么事情", "都要微笑着面对生活"] # 实际场景句子量超1000

output = []
for line in input_file:
    for word in word_list:
        if word in line:
            output.append(word) 

优化方案

1. 正则表达式批量匹配(通用高效)

将所有词汇拼接成正则表达式的备选模式,对每个句子仅做一次扫描即可找出所有匹配的词汇,避免对每个句子重复做N次(N为词汇数)子串检查,在词汇量较大时效率提升明显。

代码示例:

import re

word_list = ["人", "天", "地"]
input_file = ["你是不是经常也告诉自己", "不管发生什么事情", "都要微笑着面对生活"]

# 转义词汇中的正则特殊字符,避免语法冲突
escaped_words = [re.escape(word) for word in word_list]
# 构建匹配任意词汇的正则模式
pattern = re.compile('|'.join(escaped_words))

output = []
for line in input_file:
    # 一次找出句子中所有匹配的词汇
    matches = pattern.findall(line)
    output.extend(matches)

2. 集合辅助匹配(适合单字词汇场景)

如果词汇均为单字,可将词汇转为集合(哈希表实现,查找O(1)),遍历句子中的每个字符并检查是否在集合中。这种方式的时间复杂度为O(M*K)(M为句子数,K为句子平均长度),当句子平均长度远小于词汇数时,效率优于原双重循环。

代码示例:

word_set = set(["人", "天", "地"])
input_file = ["你是不是经常也告诉自己", "不管发生什么事情", "都要微笑着面对生活"]

output = []
for line in input_file:
    # 筛选句子中属于词汇集合的字符
    output.extend([char for char in line if char in word_set])

关于字典的使用

字典的核心优势是哈希表快速查找,但在此场景中,我们仅需判断词汇是否存在,无需键值映射,因此用集合更轻量化(无需存储冗余值)。如果一定要用字典,可将词汇作为键、值设为任意标记,但这种方式并未优化最耗时的子串检查步骤,整体提升有限:

word_dict = {word: True for word in word_list}
input_file = ["你是不是经常也告诉自己", "不管发生什么事情", "都要微笑着面对生活"]

output = []
for line in input_file:
    for word in word_list:
        if word_dict.get(word) and word in line:
            output.append(word)

内容的提问来源于stack exchange,提问作者4daJKong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:40:22