从NLTK缺少西班牙语单词

时间:2014-10-20 20:53:20

标签: python nlp nltk wordnet

我正在尝试使用NLTK 3.0中的Open Multilingual Wordnet中的西班牙语Wordnet,但它似乎没有使用'omw'包下载。例如,使用如下代码:

from nltk.corpus import wordnet as wn

print [el.lemma_names('spa') for el in wn.synsets('bank')]

我收到以下错误消息:

IOError: No such file or directory: u'***/nltk_data/corpora/omw/spa/wn-data-spa.tab'

根据documentation,西班牙语应该包含在'omw'包中,但是没有下载它。你知道为什么会这样吗?

3 个答案:

答案 0 :(得分:12)

如果nltk_data目录中的Open Multilingual WordNet中缺少某种语言,则会出现完整的错误追溯:

>>> from nltk.corpus import wordnet as wn
>>> wn.synsets('bank')[0].lemma_names('spa')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/nltk/corpus/reader/wordnet.py", line 418, in lemma_names
    self._wordnet_corpus_reader._load_lang_data(lang)
  File "/usr/local/lib/python2.7/dist-packages/nltk/corpus/reader/wordnet.py", line 1070, in _load_lang_data
    f = self._omw_reader.open('{0:}/wn-data-{0:}.tab'.format(lang))
  File "/usr/local/lib/python2.7/dist-packages/nltk/corpus/reader/api.py", line 198, in open
    stream = self._root.join(file).open(encoding)
  File "/usr/local/lib/python2.7/dist-packages/nltk/data.py", line 309, in join
    return FileSystemPathPointer(_path)
  File "/usr/local/lib/python2.7/dist-packages/nltk/compat.py", line 380, in _decorator
    return init_func(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/nltk/data.py", line 287, in __init__
    raise IOError('No such file or directory: %r' % _path)
IOError: No such file or directory: u'/home/alvas/nltk_data/corpora/omw/spa/wn-data-spa.tab'

首先要检查它是否自动安装:

>>> import nltk
>>> nltk.download('omw')
[nltk_data] Downloading package omw to /home/alvas/nltk_data...
[nltk_data]   Package omw is already up-to-date!
Tru

然后你应该去检查nltk_data并发现缺少'spa'文件夹:

alvas@ubi:~/nltk_data/corpora/omw$ ls
als  arb  cmn  dan  eng  fas  fin  fra  fre  heb  ita  jpn  mcr  msa  nor  pol  por  README  tha

所以这是短期解决方案:

$ wget http://compling.hss.ntu.edu.sg/omw/wns/spa.zip
$ mkdir ~/nltk_data/corpora/omw/spa
$ unzip -p spa.zip mcr/wn-data-spa.tab > ~/nltk_data/corpora/omw/spa/wn-data-spa.tab

或者,您只需从nltk_data/corpora/omw/mcr/wn-data-spa.tab复制文件。

[OUT]:

>>> from nltk.corpus import wordnet as wn
>>> wn.synsets('bank')[0].lemma_names('spa')
[u'margen', u'orilla', u'vera']

现在lemma_names()应该适用于西班牙语,如果您正在寻找Open Multilingusl Wordnet中的其他语言,您可以在这里浏览(http://compling.hss.ntu.edu.sg/omw/),然后下载并放入相应的nltk_data目录。

长期解决方案是让NLTK和OMW项目的开发人员更新他们的NLTK API数据集。

答案 1 :(得分:5)

我们(OMW)准备了一个修复程序,并很快将其推出。

答案 2 :(得分:0)

您可以使用这个项目:https://github.com/lingeringsocket/wn-mcr-transform

然后像英语一样使用 nltk 语料库,但使用西班牙语。

基本上将使用 MCR 3.0 语料库替换 nltk 语料库中从英语到西班牙语的所有知识。

适用于:

  • 加泰罗尼亚语 - 猫
  • 英语 - eng
  • Euskara - eus
  • 加利西亚语 - glg
  • 葡萄牙语 - por
  • 西班牙语 - spa