Python实现从文本文件提取关键词前后短语并统计出现频次
关键词前后短语提取统计解决方案
可行性说明
- 该需求完全可以通过Python实现,常规英文场景无需引入额外NLP相关库,仅使用Python内置的
re、collections、os模块即可完成。 - 仅当需要处理中文分词、词性过滤、复杂语义匹配等场景时,才需要引入jieba、spaCy等NLP工具库。
实现逻辑
- 批量读取所有目标文本文件的内容
- 对文本做分词处理,过滤标点符号等无关字符
- 遍历单词列表匹配目标关键词,校验关键词前后是否有足够数量的可提取词,满足条件则拼接成目标短语
- 统计所有短语的出现频次
- 按频次从高到低排序输出结果
可直接运行的代码示例
import re import os from collections import Counter def count_keyword_phrases(folder_path: str, keyword: str, window_size: int = 1) -> list[tuple[str, int]]: """ 统计指定文件夹下所有文本文件中,关键词前后指定数量词组成的短语出现频次 :param folder_path: 存储文本文件的文件夹路径 :param keyword: 目标检索关键词 :param window_size: 关键词前后各取的单词数量,默认为1 :return: 按频次降序排序的短语、频次元组列表 """ phrase_counter = Counter() # 遍历文件夹下所有txt文件,可根据实际文件后缀调整过滤规则 for file_name in os.listdir(folder_path): if not file_name.endswith('.txt'): continue file_full_path = os.path.join(folder_path, file_name) with open(file_full_path, 'r', encoding='utf-8') as f: text = f.read() # 提取所有单词,自动过滤标点,不需要统一大小写可删除.lower() words = re.findall(r'\b\w+\b', text) # 匹配关键词提取短语 for idx, word in enumerate(words): if word.lower() == keyword.lower(): # 跳过前后单词数量不足的情况 if idx - window_size < 0 or idx + window_size >= len(words): continue phrase = ' '.join(words[idx-window_size : idx + window_size + 1]) phrase_counter[phrase] += 1 # 按频次降序排序 return sorted(phrase_counter.items(), key=lambda x: x[1], reverse=True) if __name__ == '__main__': # 替换为你的文本文件所在文件夹路径 result = count_keyword_phrases(folder_path='./your_text_folder', keyword='park', window_size=1) for phrase, count in result: print(f"{phrase}: {count}")
扩展调整说明
- 若需处理中文文本,将分词逻辑替换为jieba分词即可,其余逻辑无需改动
- 若需要保留文本中的标点符号,调整
re.findall的匹配规则即可 - 大文件场景下可改为逐行读取处理,避免内存占用过高
内容的提问来源于stack exchange,提问作者Chipmunk_da
相关产品推荐
相关产品推荐

