加载 NLTK 感知器标记器时出现 IOError
IOError when loading NLTK perceptron tagger
代码简单如下
import nltk
nltk.data.path.append(r"E:\nltk_data")
nltk.pos_tag(["hello"])
错误是
File "C:\Program Files (x86)\IronPython
2.7\lib\site-packages\nltk\tag\__init__.py", line 110, in pos_tag
tagger = PerceptronTagger() File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\nltk\tag\perceptron.py", line 141, in __init__
self.load(AP_MODEL_LOC) File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\nltk\tag\perceptron.py", line 209, in load
self.model.weights, self.tagdict, self.classes = load(loc) File "C:\Program Files (x86)\IronPython
2.7\lib\site-packages\nltk\data.py", line 800, in load
# Load the resource. File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\nltk\data.py", line 921, in _open
# urllib might not use mode='rb', so handle this one ourselves: File "C:\Program Files (x86)\IronPython
2.7\lib\site-packages\nltk\data.py", line 603, in find
if zipfile is None: File "C:\Program Files (x86)\IronPython 2.7\Lib\nturl2path.py", line 26, in url2pathname
raise IOError, error IOError: Bad URL: /C|/E|/nltk_data/taggers/averaged_perceptron_tagger/averaged_perceptron_tagger.pickle
为什么 url 变成了 /C|/E|/nltk_data/tagg...
,为什么它首先需要调用 url2pathname
?我已经在使用 Windows 并且我提供的 url 是 Windows 样式 url.
您的代码正在转义 \n
:
将 \
替换为 \
:
import nltk
nltk.data.path.append(r"E:\nltk_data")
nltk.pos_tag(["hello"])
你可以参考这个问题:What exactly do "u" and "r" string flags do in Python, and what are raw string literals?
有关原始字符串文字如何工作的更多信息。
我不得不深入研究代码,终于找到了问题所在。 nltk用if sys.platform.startswith('win'):
判断操作系统(非常专业的判断方式,顺便说一句)
但是,如果您使用 IronPython,您的平台是 CLI
。
我怀疑这会给 IronPython 用户带来很多问题。因此,下次任何 Python 包的行为都像它的 unix 对应包时,只需检查模块中是否有此代码。
编辑: 我的解决方法是用 sys.platform.startswith('win') or sys.platform.startswith('cli')
替换校验码。
代码简单如下
import nltk
nltk.data.path.append(r"E:\nltk_data")
nltk.pos_tag(["hello"])
错误是
File "C:\Program Files (x86)\IronPython
2.7\lib\site-packages\nltk\tag\__init__.py", line 110, in pos_tag
tagger = PerceptronTagger() File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\nltk\tag\perceptron.py", line 141, in __init__
self.load(AP_MODEL_LOC) File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\nltk\tag\perceptron.py", line 209, in load
self.model.weights, self.tagdict, self.classes = load(loc) File "C:\Program Files (x86)\IronPython
2.7\lib\site-packages\nltk\data.py", line 800, in load
# Load the resource. File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\nltk\data.py", line 921, in _open
# urllib might not use mode='rb', so handle this one ourselves: File "C:\Program Files (x86)\IronPython
2.7\lib\site-packages\nltk\data.py", line 603, in find
if zipfile is None: File "C:\Program Files (x86)\IronPython 2.7\Lib\nturl2path.py", line 26, in url2pathname
raise IOError, error IOError: Bad URL: /C|/E|/nltk_data/taggers/averaged_perceptron_tagger/averaged_perceptron_tagger.pickle
为什么 url 变成了 /C|/E|/nltk_data/tagg...
,为什么它首先需要调用 url2pathname
?我已经在使用 Windows 并且我提供的 url 是 Windows 样式 url.
您的代码正在转义 \n
:
将 \
替换为 \
:
import nltk
nltk.data.path.append(r"E:\nltk_data")
nltk.pos_tag(["hello"])
你可以参考这个问题:What exactly do "u" and "r" string flags do in Python, and what are raw string literals?
有关原始字符串文字如何工作的更多信息。
我不得不深入研究代码,终于找到了问题所在。 nltk用if sys.platform.startswith('win'):
判断操作系统(非常专业的判断方式,顺便说一句)
但是,如果您使用 IronPython,您的平台是 CLI
。
我怀疑这会给 IronPython 用户带来很多问题。因此,下次任何 Python 包的行为都像它的 unix 对应包时,只需检查模块中是否有此代码。
编辑: 我的解决方法是用 sys.platform.startswith('win') or sys.platform.startswith('cli')
替换校验码。