将句子字符串列表转换为词汇集合的高效实现方案问询
高效提取语料库中唯一词汇集合的方案
嘿,我懂你现在的困扰——从句子列表提取唯一词汇集合时原实现太慢了对吧?别发愁,Python里有几个内置的高效方法能帮你解决这个问题,代码还特别简洁。
为什么原实现慢?
大概率是你用了纯Python层面的嵌套循环,手动逐个添加单词还得判断是否已存在,这种方式时间复杂度是O(n²)(每次判断都要遍历现有集合),效率极低。而我们可以利用Python内置的、底层用C优化过的操作,把时间复杂度降到O(n)。
方案1:集合推导式(最简洁高效)
直接用集合推导式一次性完成分割、遍历和去重,这是处理这类问题的首选:
original_format = ["This is a question", "This is another question", "And one more too"] unique_words = {word for sentence in original_format for word in sentence.split()}
运行后就能得到你想要的结果:{'And', 'This', 'a', 'another', 'is', 'more', 'one', 'question', 'too'}
这个方法高效的原因:
split()是内置字符串操作,速度极快- 集合基于哈希表实现,添加和查找操作都是O(1)时间复杂度
- 集合推导式比先建列表再转集合更省内存,不用存储中间的重复单词列表
方案2:用itertools.chain处理大规模语料
如果你的语料库特别大,担心内存占用,可以用itertools.chain扁平化单词序列,避免创建庞大的中间列表:
from itertools import chain original_format = ["This is a question", "This is another question", "And one more too"] unique_words = set(chain.from_iterable(sentence.split() for sentence in original_format))
chain.from_iterable会逐个迭代每个句子分割后的单词,直接传递给集合,内存占用比集合推导式更低,适合处理百万级别的句子列表。
额外优化:忽略大小写(可选)
如果你的需求是不区分单词大小写(比如把"This"和"this"视为同一个词),只需在处理时转成小写即可:
unique_words = {word.lower() for sentence in original_format for word in sentence.split()}
这样得到的就是全部小写的唯一词汇集合。
内容的提问来源于stack exchange,提问作者TrentWoodbury
相关产品推荐
相关产品推荐

