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

Python查找两个列表共同词的实现方法(适配词干提取匹配场景)

Python实现嵌套列表与词表的同根词匹配方案

核心前提:你的text_list已经完成词干提取,匹配前必须对words_list执行完全相同规则的词干提取,否则无法匹配interesting对应interest这类同根词。以下示例用和示例结果匹配的Porter词干规则做演示,实际使用时替换成你预处理text_list的同款词干提取逻辑即可。


方案1:集合交集法(性能最优,推荐大数据量场景使用)

集合的成员查找、交集操作时间复杂度极低,是无顺序要求场景下的首选方案:

from nltk.stem import PorterStemmer

# 初始化词干提取器,和预处理text_list的配置保持一致
stemmer = PorterStemmer()

text_list = [['i', 'am', 'interest' ,'for', 'this', 'subject'], ['this', 'is', 'a', 'second', 'sentence']]
words_list = ['a', 'word', 'sentence', 'interesting']

# 拍平嵌套的text_list,转集合自动去重
text_vocab = set(word for sub_text in text_list for word in sub_text)
# 对目标词表做同款词干提取,转集合
words_stem_vocab = set(stemmer.stem(word) for word in words_list)
# 取交集得到共同词
same_words = list(text_vocab & words_stem_vocab)

该方法返回的结果顺序不固定,会包含所有匹配到的a、sentence、interest三个词。


方案2:顺序遍历法(可保留词表中的出现顺序)

如果需要最终结果严格按照词汇在words_list里的出现顺序返回,用遍历+集合去重的逻辑实现:

from nltk.stem import PorterStemmer
stemmer = PorterStemmer()

text_list = [['i', 'am', 'interest' ,'for', 'this', 'subject'], ['this', 'is', 'a', 'second', 'sentence']]
words_list = ['a', 'word', 'sentence', 'interesting']

text_vocab = set(word for sub_text in text_list for word in sub_text)
same_words = []
added = set() # 标记已加入结果的词,避免重复

for raw_word in words_list:
    stem_word = stemmer.stem(raw_word)
    if stem_word in text_vocab and stem_word not in added:
        same_words.append(stem_word)
        added.add(stem_word)

运行后same_words固定为['a', 'sentence', 'interest'],和示例输出完全一致。


方案3:函数式写法(简洁实现顺序匹配)

偏好函数式编程风格的话,可以用filter配合有序去重逻辑实现,代码更紧凑:

from nltk.stem import PorterStemmer
stemmer = PorterStemmer()

text_list = [['i', 'am', 'interest' ,'for', 'this', 'subject'], ['this', 'is', 'a', 'second', 'sentence']]
words_list = ['a', 'word', 'sentence', 'interesting']

text_vocab = set(word for sub_text in text_list for word in sub_text)
stemmed_words = [stemmer.stem(w) for w in words_list]
# 过滤存在的词,同时按插入顺序去重(Python 3.7+字典默认保序)
same_words = list(dict.fromkeys(filter(lambda w: w in text_vocab, stemmed_words)))

提示:如果使用Python 3.7以下版本,把去重逻辑替换为方案2里的added集合标记逻辑即可。


注意事项

  • 绝对不能跳过words_list的词干提取步骤,否则interesting和预处理后的interest无法匹配,会漏结果
  • 处理text_list时要确保所有子列表的词汇都被纳入词集合,避免漏匹配
  • 词干提取工具、参数必须和预处理text_list时完全一致,否则词干规则不统一会出现匹配错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:32:21