Для конкретных целей я должен использовать Wordnet 1.6 вместо текущей версии, реализованной в пакете nltk. Затем я загрузил старую версию here и попытался запустить простой фрагмент кода, используя французский вариант.Как использовать языковой параметр в synsets (nltk), если вы загружаете wordnet вручную?
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')]
Если я использую версию Wordnet загруженную с модулем NLTK не имеет никакого пр oblem используя французский (так что это не проблема синтаксиса с дополнительным аргументом)
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 не может ее найти?
Ошибка заключается в 'если Ланг не self.langs():' блок. Может быть, в WordNet 1.6 нет «свободного» языка? Или, может быть, это было «fr»? Вы должны посмотреть на файлы данных ... – clemtoy
@clemtoy, это тоже не работает с fr, мне трудно понять, что в wordnet 1.6 нет французского языка, тогда как домен wn построен на нем и имеет домены на французском языке , Моя проблема в том, что я плохо разбираюсь в архитектуре файлов, это язык, связанный с версией wordnet или другим файлом, в каталоге wordnet 1.6 нет .tab, но это не значит, что они должны быть там? –
@clemtoy, если быть точнее, файл, который ищет код, выглядит как wn-data-fre.tab, который находится в \ nltk_data \ corpora \ omw \ fre, а не в \ nltk_data \ wordnet, где текущая версия wordnet есть. Поэтому я подумал, что, возможно, файл не зависит от версии, но, может быть, я ошибаюсь (я уверен, что мне нужно изменить файл с версией, совместимой с wordnet 1.6, но оставшийся вопрос - где ее поставить?) –