Python 为什么nltk word_tokenize即使在完成nltk.download并正确安装了所有软件包后仍无法工作?

Python 为什么nltk word_tokenize即使在完成nltk.download并正确安装了所有软件包后仍无法工作?,python,nltk,python-3.7,Python,Nltk,Python 3.7,我使用的是Python3.7 64位。nltk版本3.4.5 当我尝试使用word_tokenize将nltk.book中的text6转换为令牌时,出现了错误 import nltk from nltk.tokenize import word_tokenize from nltk.book import * tokens=word_tokenize(text6) 代码在idle 3.7中完成 下面是我执行最后一条语句时的错误 Traceback (most recent call l

我使用的是Python3.7 64位。nltk版本3.4.5

当我尝试使用word_tokenize将nltk.book中的text6转换为令牌时,出现了错误

import nltk
from nltk.tokenize import word_tokenize
from nltk.book import *
tokens=word_tokenize(text6)
代码在idle 3.7中完成

下面是我执行最后一条语句时的错误

    Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    tokens=word_tokenize(text6)
  File "C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\nltk\tokenize\__init__.py", line 144, in word_tokenize
    sentences = [text] if preserve_line else sent_tokenize(text, language)
  File "C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\nltk\tokenize\__init__.py", line 106, in sent_tokenize
    return tokenizer.tokenize(text)
  File "C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\nltk\tokenize\punkt.py", line 1277, in tokenize
    return list(self.sentences_from_text(text, realign_boundaries))
  File "C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\nltk\tokenize\punkt.py", line 1331, in sentences_from_text
    return [text[s:e] for s, e in self.span_tokenize(text, realign_boundaries)]
  File "C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\nltk\tokenize\punkt.py", line 1331, in <listcomp>
    return [text[s:e] for s, e in self.span_tokenize(text, realign_boundaries)]
  File "C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\nltk\tokenize\punkt.py", line 1321, in span_tokenize
    for sl in slices:
  File "C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\nltk\tokenize\punkt.py", line 1362, in _realign_boundaries
    for sl1, sl2 in _pair_iter(slices):
  File "C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\nltk\tokenize\punkt.py", line 318, in _pair_iter
    prev = next(it)
  File "C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\nltk\tokenize\punkt.py", line 1335, in _slices_from_text
    for match in self._lang_vars.period_context_re().finditer(text):
TypeError: expected string or bytes-like object
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
tokens=word_tokenize(text6)
文件“C:\Users\admin\AppData\Local\Programs\Python\37\lib\site packages\nltk\tokenize\ \uuuuu init\uuuuu.py”,第144行,在word\u tokenize中
句子=[text]如果保留\u行,则发送\u标记化(文本、语言)
文件“C:\Users\admin\AppData\Local\Programs\Python\37\lib\site packages\nltk\tokenize\ \uuuuu init\uuuuu.py”,第106行,在sent\u tokenize中
return tokenizer.tokenize(文本)
文件“C:\Users\admin\AppData\Local\Programs\Python37\lib\site packages\nltk\tokenize\punkt.py”,第1277行,在tokenize中
返回列表(self.句子来自文本(文本,重新对齐边界))
文件“C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site packages\nltk\tokenize\punkt.py”,第1331行,来自文本中的句子
返回[self.span\u标记化(文本,重新对齐\u边界)中s,e的文本[s:e]
文件“C:\Users\admin\AppData\Local\Programs\Python37\lib\site packages\nltk\tokenize\punkt.py”,第1331行,在
返回[self.span\u标记化(文本,重新对齐\u边界)中s,e的文本[s:e]
span\u tokenize中的文件“C:\Users\admin\AppData\Local\Programs\Python37\lib\site packages\nltk\tokenize\punkt.py”,第1321行
对于切片中的sl:
文件“C:\Users\admin\AppData\Local\Programs\Python37\lib\site packages\nltk\tokenize\punkt.py”,第1362行,位于重新对齐边界中
对于sl1、sl2成对iter(切片):
文件“C:\Users\admin\AppData\Local\Programs\Python37\lib\site packages\nltk\tokenize\punkt.py”,第318行,成对排列
上一个=下一个(it)
文件“C:\Users\admin\AppData\Local\Programs\Python\37\lib\site packages\nltk\tokenize\punkt.py”,第1335行,位于文本中的
对于self.\u lang\u vars.period\u context\u re().finditer中的匹配(文本):
TypeError:应为字符串或类似字节的对象
请帮忙。提前谢谢

在进行一些故障排除时,我创建了一个示例nltk.text.text对象,并尝试使用nltk.word\u tokenize对其进行标记。但我还是犯了同样的错误。请看下面的截图

但是,在对字符串调用nltk.word_tokenize()时,它是有效的

>>> tt="Python is a programming language"
>>> tokens2=nltk.word_tokenize(tt) #Not throwing error
>>> type(tt)
<class 'str'>
>>> type(text6)
<class 'nltk.text.Text'>
>>> 
tt=“Python是一种编程语言” >>>tokens2=nltk.word_tokenize(tt)#不抛出错误 >>>类型(tt) >>>类型(文本6) >>> 尝试使用:


nltk.download('punkt')

您发布的代码没有定义text6。根据异常,它不能是字符串。错误消息告诉您,
word\u tokenize
函数需要一个字符串作为其输入。你给它一本书。似乎Book objects公开了一个包含每个单词的迭代器:
”。join(text6)
可能会给您一个字符串-但是Book Object已经有了其标记化版本,可以作为
.tokens
(或者
.token
,如果不起作用)@TerryJanReedy它来自nltk.book import*的
,它将
nltk.book
中的所有名称导入当前范围。@MatsLindh,我已经尝试了text6.tokens()。它给我一个错误,声明TypeError:“list”对象不可调用。我是一名c#开发人员,对python一无所知。我只是在对nltk做一些分析,以学习自然语言处理和python。你能帮我解决这个错误吗?@MatsLindh,我添加了一些屏幕截图,可以进一步澄清这个问题。请查收。提前感谢。请详细说明为什么您认为这解决了手头的问题,提供一些额外的代码来提供一些上下文。“punkt”是一个句子标记器,它将文本划分为一系列句子。有时,word_tokenize函数在大量纯文本集合上不起作用,下载punkt模块对这些纯文本集合很有用。您可以在导入word_tokenize之前下载punkt模块:例如:>nltk.download('punkt')>,从nltk.tokenize导入word_tokenize