在Python的单词频率统计中,出现了"name 'word_tokenize' is not defined"的错误提示。

4

我正在尝试从特定的单词列中计算单词频率。

我想从字典中删除停用词。

以下是代码:

代码

import unicodecsv as csv
import nltk
import pandas as pd
import chardet

from nltk.corpus import stopwords
from nltk.tokenize import sent_tokenize

with open('data.csv','rb') as f:
    result = chardet.detect(f.read())

file_band = file[file['article'].str.contains("first time")]
file.loc[:,'extracted'] = file_band['article']

top_N = 200

a = file_band['extracted'].str.lower().replace(r'\|', ' ').str.cat(sep=' ')
words = nltk.tokenize.word_tokenize(a)
word_dist = nltk.FreqDist(words)
print (word_dist)

stop_words = set(stopwords.words('english'))
word_tokens = word_tokenize(word_dist)

filtered_sentence = [w for w in word_tokens if not w in stop_words]
filtered_sentence = []

for w in word_tokens:
    if w not in stop_words:
        filtered_sentence.append(w)

print(word_tokens)
print(filtered_sentence)

错误

问题出现在以下错误上:

NameError Traceback (most recent call last) in () 27 #过滤单词 28 stop_words = set(stopwords.words('english')) ---> 29 word_tokens = word_tokenize(word_dist) 30 31 filtered_sentence = [w for w in word_tokens if not w in stop_words]

NameError:名称 'word_tokenize' 未定义

问题出在第29行,因为“word_tokenize”未定义。请确保您已正确导入所需的库或模块,并且拼写正确。

2
没错,你的代码或导入中都没有 word_tokenize 函数。 - Aran-Fey
当你使用word_tokenize时,为什么要导入sent_tokenize - cs95
1
在你调用 nltk.tokenize.word_tokenize(a) 之前,之后你忘记了它,直接使用 word_tokenize(word_dist) 是行不通的。 - Sqoshu
谢谢!问题已经解决 :) - Cat.J
5个回答

8

NameError:name 'word_tokenize'未定义

这个错误告诉你的是在代码中调用了一个函数word_tokenize(),但该函数并没有被定义。

通常,你需要像这样定义一个函数:

def my_function(my_input):
    words = *do_something_with* my_input
    return words

然后您可以稍后调用它:
words = my_function(my_input)

在您的情况下,看起来您正在尝试使用nltk.tokenize模块的一个函数。但是,您只导入了该模块的一部分 -sent_tokenize(顺便说一下,您似乎没有使用它)

from nltk.tokenize import sent_tokenize

也许你需要导入word_tokenize
from nltk.tokenize import word_tokenize

如果您之后要使用sent_tokenize,那么两者都可以使用吗?

from nltk.tokenize import sent_tokenize, word_tokenize

3

在你的代码开头添加以下行:from nltk import word_tokenize

该代码与自然语言处理相关。


3
我认为您需要这个。
import nltk

from nltk.tokenize import word_tokenize

你的答案对我有用,谢谢!不过你知道为什么它能工作吗?我认为 import nltk 应该自动导入 nltk 中的所有内容。 - Molly Taylor

1

我也遇到了同样的错误,并找到了解决方法。您需要首先运行以下代码:

import nltk
nltk.download('averaged_perceptron_tagger')

那么 word_tokenize 函数应该可以工作。


0

word_tokenize函数还可以使用nltk Punkt分词器,该分词器使用无监督算法将较大的文本主体分割成较小的行:

import nltk
nltk.download('punkt')
from nltk.tokenize import word_tokenize

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接