带有 NLTK 的斯坦福依赖解析器:UnicodeDecodeError:

Posted

技术标签:

【中文标题】带有 NLTK 的斯坦福依赖解析器:UnicodeDecodeError:【英文标题】:stanford-dependency parser with NLTK :UnicodeDecodeError: 【发布时间】:2018-01-01 04:10:18 【问题描述】:

我正在尝试运行以下代码行:

import os
os.environ['JAVAHOME'] = 'path/to/java.exe'
os.environ['STANFORD_PARSER'] = 'path/to/stanford-parser.jar'
os.environ['STANFORD_MODELS'] = 'path/to/stanford-parser-3.8.0-models.jar'

from nltk.parse.stanford import StanfordDependencyParser
dep_parser = StanfordDependencyParser(model_path="path/to/englishPCFG.ser.gz")
sentence = "sample sentence ..."

# Dependency Parsing:
print("Dependency Parsing:")
print([parse.tree() for parse in dep_parser.raw_parse(sentence)])

并在行:

print([parse.tree() for parse in dep_parser.raw_parse(sentence)])

我遇到以下问题:

Traceback(最近一次调用最后一次): 文件“C:/Users/Norbert/PycharmProjects/untitled/StanfordDependencyParser.py”,第 21 行,在 print([parse.tree() 用于在 dep_parser.raw_parse(sentence) 中解析]) 文件“C:\Users\Norbert\AppData\Local\Programs\Python\Python36\lib\site-packages\nltk\parse\stanford.py”,第 134 行,在 raw_parse 返回下一个(self.raw_parse_sents([句子],详细)) 文件“C:\Users\Norbert\AppData\Local\Programs\Python\Python36\lib\site-packages\nltk\parse\stanford.py”,第 152 行,位于 raw_parse_sents return self._parse_trees_output(self._execute(cmd, '\n'.join(sentences), verbose)) _execute 中的文件“C:\Users\Norbert\AppData\Local\Programs\Python\Python36\lib\site-packages\nltk\parse\stanford.py”,第 218 行 标准输出=管道,标准错误=管道) 文件“C:\Users\Norbert\AppData\Local\Programs\Python\Python36\lib\site-packages\nltk\internals.py”,第 135 行,在 java 打印(_decode_stdoutdata(stderr)) _decode_stdoutdata 中的文件“C:\Users\Norbert\AppData\Local\Programs\Python\Python36\lib\site-packages\nltk\internals.py”,第 737 行 返回 stdoutdata.decode(编码) UnicodeDecodeError:“utf-8”编解码器无法解码位置 3097 中的字节 0xac:无效的起始字节

知道有什么问题吗?我什至不处理任何非 utf-8 文本。

【问题讨论】:

您看到错误的句子是“sample sentence ...”吗? @gimg1 不,我只是把它作为占位符。我尝试了大约 5 个只包含正常 a-zA-Z 字母的不同句子,却给了我同样的错误 您可以尝试将字符串编码为 utf-8 以确保它们中没有字符导致错误吗? sentence.encode('utf-8').strip() 【参考方案1】:

我可以通过这样做打印一些东西,也许不是你想要的,而是一个开始。

print("Dependency Parsing:")
result = dependency_parser.raw_parse(sentence)
#print (next(result))
dep = next(result)
print (list(dep.triples()))

如果您想查看整个输出,请取消注释该行 -> print(next(result))。

【讨论】:

以上是关于带有 NLTK 的斯坦福依赖解析器:UnicodeDecodeError:的主要内容,如果未能解决你的问题,请参考以下文章

NLTK 中用于解析的英语语法

斯坦福标记器不起作用

在 NLTK 解析器中使用整数/日期作为终端

烂活斯坦福句法解析库使用小结+最新四月新番下载(以辉夜与阿尼亚为例)

烂活斯坦福句法解析库使用小结+最新四月新番下载(以辉夜与阿尼亚为例)

烂活斯坦福句法解析库使用小结+最新四月新番下载(以辉夜与阿尼亚为例)