出于特定目的,我必须使用Wordnet 1.6而不是nltk包中实现的当前版本。然后我下载了旧版本here并尝试使用french选项运行一个简单的代码提取。
from collections import defaultdict
import nltk
#nltk.download()
import os
import sys
from nltk.corpus import WordNetCorpusReader
cwd = os.getcwd()
nltk.data.path.append(cwd)
wordnet16_dir="wordnet-1.6/"
wn16_path = "{0}/dict".format(wordnet16_dir)
wn = WordNetCorpusReader(os.path.abspath("{0}/{1}".format(cwd, wn16_path)), nltk.data.find(wn16_path))
senses=wn.synsets('gouvernement',lang=u'fre')
似乎我手动下载的wordnet无法链接到处理外语的nltk模块的文件,我得到的错误如下:
Traceback (most recent call last):
File "C:/Users/Stephanie/Test/temp.py", line 16, in <module>
senses=wn.synsets('gouvernement',lang=u'fre')
File "C:\Python27\lib\site-packages\nltk\corpus\reader\wordnet.py", line 1419, in synsets
self._load_lang_data(lang)
File "C:\Python27\lib\site-packages\nltk\corpus\reader\wordnet.py", line 1064, in _load_lang_data
if lang not in self.langs():
File "C:\Python27\lib\site-packages\nltk\corpus\reader\wordnet.py", line 1088, in langs
fileids = self._omw_reader.fileids()
AttributeError: 'FileSystemPathPointer' object has no attribute 'fileids'
使用英文单词不会产生任何错误(所以并非我没有很好地加载字典):
senses=wn.synsets('government')
print senses
[Synset('government.n.01'), Synset('government.n.02'), Synset('government.n.03'), Synset('politics.n.02')]
如果我使用装有nltk模块的当前版本的Wordnet,我在使用法语时没有任何问题(因此它不是可选参数的语法问题)
from nltk.corpus import wordnet as wn
senses=wn.synsets('gouvernement',lang=u'fre')
print senses
[Synset('government.n.02'), Synset('opinion.n.05'), Synset('government.n.03'), Synset('rule.n.01'), Synset('politics.n.02'), Synset('government.n.01'), Synset('regulation.n.03'), Synset('reign.n.03')]
但是,正如预先确定的那样,我真的必须使用旧版本。我想这可能是一个路径问题。我一直在尝试阅读WordNetCorpusReader函数的代码但是我对python很新。我不知道到目前为止问题是什么,除了它没有找到特殊文件。
所需文件似乎是wn-data-fre.tab,它位于\ nltk_data \ corpora \ omw \ fre中。我很确定我必须使用与wordnet 1.6兼容的版本来更改文件但是,为什么WordNetCorpusReader功能无法找到它?
答案 0 :(得分:4)
简答:
语言参数没有WordNet 1.6。通过NLTK加载不同的WordNet时无法使用lang='fre'
。
长答案:
lang=...
参数是使用Open Multilingual WordNet(OMW:http://compling.hss.ntu.edu.sg/omw/)添加的,它将不同语言的wordnet链接到Princeton WordNet 3.0版。请参阅https://github.com/nltk/nltk/blob/develop/nltk/corpus/reader/wordnet.py#L1050。
lang=...
参数调用函数:
def langs(self):
''' return a list of languages supported by Multilingual Wordnet '''
import os
langs = []
fileids = self._omw_reader.fileids()
for fileid in fileids:
file_name, file_extension = os.path.splitext(fileid)
if file_extension == '.tab':
langs.append(file_name.split('-')[-1])
return langs
查找文件,请参阅https://github.com/nltk/nltk/blob/develop/nltk/corpus/reader/wordnet.py#L1070:
f = self._omw_reader.open('{0:}/wn-data-{0:}.tab'.format(lang))
所以if lang == 'fre'
,然后self._omw_reader = wn-data-fre.tab
。
由于您在初始化{{1}时已将wn-data-fre.tab
设置为nltk_data/corpora/omw/
,因此omw无法在omw_reader
中找到wn16_path
的主要原因} object,请参阅https://github.com/nltk/nltk/blob/develop/nltk/corpus/reader/wordnet.py#L1006。
然后在加载法语数据时,找不到WordNetCorpusReader
。 (请参阅https://github.com/nltk/nltk/blob/develop/nltk/corpus/reader/wordnet.py#L1419和https://github.com/nltk/nltk/blob/develop/nltk/corpus/reader/wordnet.py#L1070)
你可以尝试做的是这个加载2个WordNet实例:
self._omw_reader.open('{0:}/wn-data-{0:}.tab'.format(lang))