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

Python词频统计遇NameError:name 'word_tokenize' is not defined 求助

解决你的NameError及其他潜在问题

咱们先从你遇到的直接错误说起:

NameError: name 'word_tokenize' is not defined

这个错误的根源很简单——你只导入了分句用的sent_tokenize,但没导入分词需要的word_tokenize。看你的导入语句:

from nltk.tokenize import sent_tokenize

这里只引入了处理句子分割的函数,分词用的word_tokenize完全没被导入,所以Python找不到它。

不过就算你补上导入,后面的代码还有个逻辑错误:你把word_dist(这是nltk.FreqDist的对象,是已经统计好的词频结果)传给了word_tokenize,但这个函数是用来处理文本/字符串的,根本不能直接处理词频对象。你应该用之前已经分好词的words列表来做停用词过滤。

另外,你的代码还有个前置bug:file变量根本没定义!你只做了编码检测,但没实际把CSV文件读取成DataFrame,这会导致前面的file_band = file[file['article'].str.contains("first time")]直接报错。

修正后的完整代码

import unicodecsv as csv
import nltk
import pandas as pd
import chardet
from nltk.corpus import stopwords
# 新增:导入需要的分词函数word_tokenize
from nltk.tokenize import sent_tokenize, word_tokenize

# 第一次运行时需要下载nltk的资源包,之后可以注释掉
nltk.download('punkt')
nltk.download('stopwords')

# 修正:用chardet检测到的编码读取CSV文件
with open('data.csv','rb') as f:
    result = chardet.detect(f.read())
# 把文件读取成DataFrame,定义file变量
file = pd.read_csv('data.csv', encoding=result['encoding'])

# 筛选包含"first time"的文章,加上na=False处理空值避免报错
file_band = file[file['article'].str.contains("first time", na=False)]
file.loc[:,'extracted'] = file_band['article']

top_N = 200
# 拼接所有文本并做预处理,加上regex=True确保正则替换生效
a = file_band['extracted'].str.lower().replace(r'\|', ' ', regex=True).str.cat(sep=' ')
words = word_tokenize(a)  # 这里已经完成分词,得到单词列表

# 统计原始词频
word_dist = nltk.FreqDist(words)
print("原始词频统计:")
print(word_dist)

# 过滤停用词
stop_words = set(stopwords.words('english'))
# 直接用已有的单词列表过滤,加上w.isalpha()过滤标点、数字等非单词内容
filtered_words = [w for w in words if w not in stop_words and w.isalpha()]
# 重新统计过滤后的词频
filtered_dist = nltk.FreqDist(filtered_words)
print("\n过滤停用词后的词频统计:")
print(filtered_dist)
print("\n过滤后的单词列表:")
print(filtered_words)

关键修正点说明

  1. 补充word_tokenize的导入,直接解决NameError
  2. 新增CSV文件读取逻辑,定义了缺失的file变量
  3. 过滤停用词时使用已分词的words列表,而非错误传入词频对象word_dist
  4. 加入na=False处理空值,避免字符串匹配时报错
  5. 新增w.isalpha()过滤规则,清理掉标点、数字等无效内容
  6. 加入nltk资源下载代码,确保第一次运行时能获取分词和停用词库

内容的提问来源于stack exchange,提问作者Cat.J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:45:18