You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:54:02