如何按文本出现顺序提取关键词并生成独立变量?
按文本出现顺序提取关键词的解决方案
你当前的列表推导式是按keywords列表的顺序匹配结果,自然不符合文本内的出现顺序。要解决这个问题,得换个思路:从文本内容入手,按顺序扫描匹配关键词,同时处理大小写和去重问题。
实现思路
- 统一关键词和文本的大小写,避免大小写匹配偏差
- 按文本的单词顺序逐个检查是否属于关键词集合
- 用集合记录已匹配的关键词,避免重复加入结果
- 匹配到后,还原成
keywords列表里的原始大小写格式
完整代码
text = "My favorite languages are Python and Java. I like less Rust" keywords = ["C#", "JAVA", "PHP", "PYTHON", "RUST", "JAVASCRIPT"] # 转大写集合,提升匹配效率 keyword_upper_set = {kw.upper() for kw in keywords} matches = [] matched_words = set() # 拆分文本为单词,处理标点后逐个匹配 for word in text.split(): # 清理单词末尾的标点(比如句号、逗号) cleaned_word = word.strip('.,!?') upper_word = cleaned_word.upper() if upper_word in keyword_upper_set and upper_word not in matched_words: # 找到keywords里对应的原始关键词 original_keyword = next(kw for kw in keywords if kw.upper() == upper_word) matches.append(original_keyword) matched_words.add(upper_word) # 按文本顺序得到匹配结果,可直接赋值给变量 var1, var2, var3 = matches print("按文本顺序的匹配结果:", matches) print(var1) print(var2) print(var3)
关键说明
- 用集合
keyword_upper_set做匹配判断,比遍历列表效率更高 matched_words集合用于去重,防止文本中重复出现的关键词多次加入结果- 通过
next()方法还原关键词的原始大小写,保持和keywords列表一致的格式 - 如果不确定匹配到的关键词数量,建议先判断
len(matches)再赋值,避免解包报错
内容的提问来源于stack exchange,提问作者aesh
相关产品推荐
相关产品推荐

