Python文本搜索函数报NameError:如何实现关键词及后续内容提取?
解决NameError并实现关键词及后续内容提取
你碰到的NameError: name 'word' is not defined问题原因很清晰:any(word in text for word in key_words)这个表达式里的word只是生成器内部的临时变量,它的作用范围仅限于那个生成器内部,在any()外面的代码根本访问不到这个变量,所以当你后面写text.find(word)时,Python找不到这个word就报错了。
另外原代码还有个小问题:text[text.find(word) + 1:]会把关键词本身砍掉,这和你想要返回关键词的需求不符。
下面是修复并增强功能后的代码,完全满足你“返回找到的关键词及其后25个词”的需求:
def searching(text): key_words = ["address","home", "location", "domicile"] # 遍历关键词,找到第一个在文本中出现的词 matched_keyword = None for word in key_words: if word in text: matched_keyword = word break if matched_keyword: # 定位到关键词的起始位置 start_pos = text.find(matched_keyword) # 截取从关键词开始到文本结尾的内容 target_segment = text[start_pos:] # 分割成单词,取关键词 + 最多25个后续词(总共26个,不足则取全部) word_list = target_segment.split() selected_words = word_list[:26] # 0是关键词,1-25是后续的25个词 return " ".join(selected_words) else: return "No result"
代码说明:
- 主动遍历关键词列表,把找到的第一个匹配关键词存到
matched_keyword变量里,这样后续代码就能合法使用这个变量了 - 从关键词的起始位置开始截取内容,确保关键词本身被包含进去
- 通过
word_list[:26]实现“关键词+后续最多25个词”的需求,如果后续词不足25个,就返回所有后续内容 - 用你的测试文本运行,会返回
home located in Massachusetts.(如果想去掉结尾的标点,可以额外加个简单的标点清理逻辑,比如用re.sub(r'[^\w\s]', '', target_segment)先处理文本)
额外优化建议:
如果需要处理多个匹配关键词的情况(比如文本里同时出现home和address),可以把遍历逻辑改成收集所有匹配的关键词,然后逐个提取对应片段再返回。
内容的提问来源于stack exchange,提问作者a_1995
相关产品推荐
相关产品推荐

