Python关键词提取仅匹配首个结果 如何提取所有关键词及后续词
缺陷根因
原代码存在两个核心问题:
- 调用
list.index(keyword)仅能返回关键词在分词列表中第一次出现的索引,不会返回后续重复出现的位置,导致多次出现的关键词仅能匹配到第一条结果 - 未做边界判断:如果关键词恰好是文本最后一个词,直接取
索引+1会触发列表越界错误
修复思路
- 放弃单次
index()查找逻辑,改为逐一遍历分词列表的所有位置,不漏掉任何一次关键词匹配 - 匹配到关键词时先做边界校验,确认存在后续相邻词再提取结果
- 遍历过程中同步统计每个关键词的匹配次数,遍历结束后统一输出未命中的关键词提示
- 用集合存储关键词做成员判断,比列表遍历查找效率更高
修复后可直接运行的代码
import re def keyword_extraction(text, keyword_list, f): # 分词处理 word_list = re.findall(r"[\w']+", text) keyword_set = set(keyword_list) # 初始化匹配计数,用于后续判断未命中的关键词 match_record = {kw: 0 for kw in keyword_list} total_word_num = len(word_list) # 遍历所有词的位置 for pos in range(total_word_num): current_word = word_list[pos] if current_word in keyword_set: # 边界判断:确保当前词不是最后一个,存在后续相邻词 if pos + 1 < total_word_num: following_word = word_list[pos + 1] f.write(f"{current_word}: {following_word}\n") match_record[current_word] += 1 # 写入所有未命中的关键词提示 for kw, hit_num in match_record.items(): if hit_num == 0: f.write(f'Keyword "{kw}" not found\n')
测试结果
使用提供的测试用例执行后,写入文件的内容和预期完全一致:
like: this day: dont day: very
内容的提问来源于stack exchange,提问作者Notaginger
相关产品推荐
相关产品推荐

