Python编写CSV自动导出函数及Brown Corpus词频统计相关问题咨询
解决方案
报错原因
你之前尝试的brown.words().lower().isalpha()无法运行的核心原因是:brown.words()返回的是词的迭代序列,不是单个字符串,字符串方法只能作用于单个词元素,不能直接调用在整个序列上,需要逐词遍历处理。
完整可运行代码
实现需求如下:
- 词频统计不区分大小写,自动统一转为小写
- 自动过滤标点、数字等非纯字母内容,仅统计有效单词
- 支持按语料名称自动生成导出文件名,可批量复用处理多个语料
from collections import Counter import csv import nltk from nltk.corpus import brown # 首次运行需要下载布朗语料库,已下载可注释该行 nltk.download('brown') # 加载语料,可新增多个语料变量 corpus_a = brown.words() def export_word_frequency(corpus, corpus_name): # 预处理:转小写 + 过滤纯字母单词 processed_words = [word.lower() for word in corpus if word.isalpha()] # 词频统计 + 按词频从高到低排序 counts = Counter(processed_words) sorted_counts = dict(sorted(counts.items(), key=lambda item: item[1], reverse=True)) # 自动生成导出文件名 export_file = f"{corpus_name}_typefrequency.csv" # 写入CSV,新增newline参数避免Windows下出现空行,utf-8编码避免乱码 with open(export_file, 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) # 可选:写入表头,不需要可注释该行 writer.writerow(["单词", "词频"]) for word, freq in sorted_counts.items(): writer.writerow([word, freq]) print(f"导出完成:{export_file}") # 调用方法,第二个参数传入语料对应的名称即可自动生成文件名 export_word_frequency(corpus_a, "corpus_a") # 多个语料批量处理示例 # export_word_frequency(corpus_b, "corpus_b") # export_word_frequency(corpus_c, "corpus_c")
可选:全自动获取变量名生成文件
如果不想手动传入语料名称,可以通过inspect模块自动识别变量名,适合单脚本批量处理场景:
import inspect def get_var_name(var): callers_local_vars = inspect.currentframe().f_back.f_locals.items() return [var_name for var_name, var_val in callers_local_vars if var_val is var][0] # 调用时无需手动传名称,自动识别变量名生成文件 export_word_frequency(corpus_a, get_var_name(corpus_a))
内容的提问来源于stack exchange,提问作者matinier
相关产品推荐
相关产品推荐

