Python如何读取带词性标注的文本文件并按词性生成分类字典
实现方案
思路说明
- 首先读取文本文件所有内容,按规则提取每个「单词(词性)」格式的条目
- 拆分每个条目得到单词本身和对应的词性标识
- 初始化分类字典,将相同词性的单词追加到对应列表中,可按需选择是否对单词去重
完整代码实现
import re from collections import defaultdict def classify_words_by_pos(file_path: str, deduplicate: bool = False) -> dict: # 初始化分类字典,值默认是空列表 result = defaultdict(list) # 正则匹配规则:分组1是单词,分组2是词性标识 pattern = re.compile(r'(\w+)\(([avnd])\)') # 读取文件内容 with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # 遍历所有匹配结果归类 for word, pos in pattern.findall(content): if deduplicate and word in result[pos]: continue result[pos].append(word) return dict(result) # 调用示例 if __name__ == '__main__': # 替换为你的实际文件路径 res = classify_words_by_pos('word_list.txt', deduplicate=False) print(res)
代码说明
- 用正则匹配比手动拆分字符串更稳定,不会受空格、换行符的影响
- 提供可选的去重参数,默认关闭和原文出现顺序保持一致,开启后同一词性下不会出现重复单词
- 如果不想引入正则依赖,也可以手动拆分每个条目:先按空白字符拆分内容得到所有条目,再对单个条目用
.strip(')').split('(')拆分得到单词和词性
测试输出
针对你给出的示例文本,运行后输出结果如下:
{'a': ['radiant', 'bright', 'graceful', 'dazzling', 'running', 'running', 'divine'], 'n': ['vibe', 'pen', 'dust', 'inkwell', 'sky', 'tear'], 'd': ['lightly', 'abruptly', 'cheerfully', 'rappidly'], 'v': ['stares', 'wriggles']}
内容的提问来源于stack exchange,提问作者Willemijn de Boer
相关产品推荐
相关产品推荐

