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

从目录读取文件列表时的NLTK分词功能异常问题求助

问题分析与解决方案

我一眼就看到问题出在哪了——你传给分词器的参数类型不对!

核心错误原因

nltk的punkt分词器(也就是你加载的tokenizer)的tokenize()方法,只接受单个字符串作为输入,但你的代码里text是一个列表(通过text.append(f.read())把每个文件的文本都存成了列表的元素),直接把列表传进去肯定会抛出类型异常。

修正后的代码方案

根据你的需求,有两种常见的修正方式:

方案1:合并所有文件文本后统一分词分析

如果你想把所有演讲稿的内容合并成一个大文本再处理,可以这么改:

import glob
import os
import nltk.data
from nltk.sentiment.vader import SentimentIntensityAnalyzer
from nltk import word_tokenize

sid = SentimentIntensityAnalyzer()
tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
files = glob.glob(os.path.join(os.getcwd(), 'speeches', '*.txt'))

# 把所有文件的文本合并成单个字符串
combined_text = ""
for file in files:
    with open(file) as f:
        combined_text += f.read() + "\n"  # 加换行符区分不同文件的内容

# 现在可以正常调用分词方法了
sentences = tokenizer.tokenize(combined_text)

# 测试极性分析(这里只打印前5个句子的结果方便验证)
for sentence in sentences[:5]:
    print(f"句子内容: {sentence}")
    print(f"极性得分: {sid.polarity_scores(sentence)}")
    print("---")

方案2:逐个处理单个文件的文本

如果你需要按文件分别分析(比如统计每个演讲稿的情感倾向),可以用这种方式:

import glob
import os
import nltk.data
from nltk.sentiment.vader import SentimentIntensityAnalyzer
from nltk import word_tokenize

sid = SentimentIntensityAnalyzer()
tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
files = glob.glob(os.path.join(os.getcwd(), 'speeches', '*.txt'))

# 遍历每个文件单独处理
for file in files:
    filename = os.path.basename(file)
    print(f"\n正在处理文件: {filename}")
    with open(file) as f:
        single_file_text = f.read()
    # 对当前文件的文本分词
    sentences = tokenizer.tokenize(single_file_text)
    # 输出当前文件前3个句子的极性结果
    for idx, sentence in enumerate(sentences[:3], 1):
        print(f"句子{idx}: {sentence}")
        print(f"极性得分: {sid.polarity_scores(sentence)}")
    print("="*50)

额外提示

如果运行时还遇到nltk资源缺失的错误(比如提示找不到punkt模型),可以先运行以下代码下载所需资源:

import nltk
nltk.download('punkt')
nltk.download('vader_lexicon')

内容的提问来源于stack exchange,提问作者K. SOT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:34:31