这与以下问题有关 -
我有python app执行以下任务 -
# -*- coding: utf-8 -*-
1。阅读unicode文本文件(非英语) -
def readfile(file, access, encoding):
with codecs.open(file, access, encoding) as f:
return f.read()
text = readfile('teststory.txt','r','utf-8-sig')
这会将给定的文本文件作为字符串返回。
2。将文本拆分为句子。
第3。通过每个句子中的单词并识别动词,名词等。
参考 - Searching for Unicode characters in Python和Find word infront and behind of a Python list
4。将它们添加到单独的变量中,如下所示
名词=“CAR”| “BUS”|
动词=“DRIVES”| “HITS”
5。现在我试图将它们传递给NLTK上下文无关语法,如下所示 -
grammar = nltk.parse_cfg('''
S -> NP VP
NP -> N
VP -> V | NP V
N -> '''+nouns+'''
V -> '''+verbs+'''
''')
它给了我以下错误 -
第40行,在 V - > '''+动词+'''UnicodeDecodeError:'ascii'编解码器无法解码位置114的字节0xe0:序数不在范围内(128)
我如何克服这个问题并将变量传递给NLTK CFG?
答案 0 :(得分:1)
总的来说,你有这些策略:
在我的情况下使用pip 2.0.4安装的nltk不直接接受unicode,但接受引用的unicode常量,以下所有内容似乎都有效:
In [26]: nltk.parse_cfg(u'S -> "\N{EURO SIGN}" | bar')
Out[26]: <Grammar with 2 productions>
In [27]: nltk.parse_cfg(u'S -> "\N{EURO SIGN}" | bar'.encode("utf-8"))
Out[27]: <Grammar with 2 productions>
In [28]: nltk.parse_cfg(u'S -> "\N{EURO SIGN}" | bar'.encode("unicode_escape"))
Out[28]: <Grammar with 2 productions>
请注意,我引用了unicode文本,而不是普通文本"€"
vs bar
。