Python 对于给定的unicode单词,获取wordnet语法集的正确方法是什么?

Python 对于给定的unicode单词,获取wordnet语法集的正确方法是什么?,python,utf-8,nltk,wordnet,Python,Utf 8,Nltk,Wordnet,我正在尝试获取西班牙语单词“hipertensión”(“高血压”)的wordnet语法: 因此,语法集是存在的,但是如果我使用西班牙语的等价词: wn.synsets(u'hipertensión',lang='spa') [] 在此之前,我的基本问题是 一些线索:文档()给出了以下示例: wn.synsets(b'\xe7\x8a\xac'.decode('utf-8'), lang='jpn') [Synset('dog.n.01'), Synset('spy.n.01')] 我验证了

我正在尝试获取西班牙语单词“hipertensión”(“高血压”)的wordnet语法:

因此,语法集是存在的,但是如果我使用西班牙语的等价词:

wn.synsets(u'hipertensión',lang='spa')
[]
在此之前,我的基本问题是

一些线索:文档()给出了以下示例:

wn.synsets(b'\xe7\x8a\xac'.decode('utf-8'), lang='jpn')
[Synset('dog.n.01'), Synset('spy.n.01')]
我验证了所需的类型是unicode:

type(b'\xe7\x8a\xac'.decode('utf-8'))
<type 'unicode'> 
类型(b'\xe7\x8a\xac'.解码('utf-8'))
少了什么?下面是一些失败的实验

wn.synsets( b'hipertensión'.decode('utf-8'), pos=wn.NOUN, lang='spa')
[]

wn.synsets(bytearray('hipertensión').decode('utf-8'), pos=wn.NOUN, lang='spa')
[]

wn.synsets(bytes('hipertensión'), lang='spa')
[]

wn.synsets( u'hipertensión'.decode('utf-8'), pos=wn.NOUN, lang='spa')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7  /encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf3' in position 10: ordinal not in range(128)
wn.synset(b'hipertensión'。decode('utf-8'),pos=wn.noon,lang='spa'))
[]
语法集(bytearray('hipertensión')。decode('utf-8'),pos=wn.NOUN,lang='spa'))
[]
synset(字节('hipertensión'),lang='spa')
[]
语法集(u'hipertensión'.decode('utf-8'),pos=wn.noon,lang='spa'))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/utf_8.py”,第16行,解码
返回编解码器.utf_8_解码(输入,错误,真)
UnicodeEncodeError:“ascii”编解码器无法对位置10中的字符u'\xf3'进行编码:序号不在范围内(128)

我不知道WordNet或其API的第一件事,但从您的示例判断,您需要先将unicode字符串u'hipertensión'编码为正确的utf-8,然后对其进行解码:

 u'hipertensión'.encode('utf-8').decode('utf-8')
并将其输入WordNet:

wn.synsets(u'hipertensión'.encode('utf-8').decode('utf-8'), lang="spa")
日语示例使用b“”,因为示例字符串已进行utf-8编码

您的u'hipertensión'字符串是unicode,编码方式是您的python shell/程序和/或操作系统设置首选的,这是不可预测的。因此,在解码之前,必须将其强制转换为utf-8

首先,“hipertensión”在西班牙方面似乎不是一个语法集,但“hipertensión_”是

我在python2.7中的以下工作:

wn.synsets(u'hipertensión_arterial', lang='spa')
wn.synsets(b'hipertensi\xc3\xb3n_arterial'.decode('utf-8'))
我发现“hipertensión_动脉”的途径是:


它不起作用,密度为21.5。您建议的代码仍然提供一个空数组:wn.synsets(u'hipertensión'.encode('utf-8')。decode('utf-8'),lang=“spa”)提供[]
wn.synsets(u'hipertensión_arterial', lang='spa')
wn.synsets(b'hipertensi\xc3\xb3n_arterial'.decode('utf-8'))
wn.synsets('hypertension')[0].lemma_names('spa')