我试图获得西班牙语单词'hipertensión'('高血压')的wordnet同义词:
wn.synsets(u'hypertension')
[Synset('high_blood_pressure.n.01')]
因此,synset存在,但如果我使用西班牙语等价物:
wn.synsets(u'hipertensión',lang='spa')
[]
直到这里,我的基本问题。
一些线索:文档(http://www.nltk.org/howto/wordnet.html)给出了这个例子:
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'>
缺少什么?以下是一些失败的实验
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)
答案 0 :(得分:2)
首先,“hipertensión”似乎不是西班牙语方面的同义词,但“hipertensión_arterial”是。
python2.7中的以下工作:
wn.synsets(u'hipertensión_arterial', lang='spa')
wn.synsets(b'hipertensi\xc3\xb3n_arterial'.decode('utf-8'))
我找到“hipertensión_arterial”的方式是通过:
wn.synsets('hypertension')[0].lemma_names('spa')
答案 1 :(得分:-1)
我不知道关于WordNet或其API的第一件事,但从你的例子来看,你需要首先用正确的utf-8 编码unicode字符串u'hipertensión然后解码它:
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。