Stanford Parser - java.io.IOException: невозможно определить как путь к классу, имя файла или URL - PullRequest
0 голосов
/ 11 октября 2019

Не могу заставить работать Stanford Parser Version 3.5.1. Я знаю, что доступны более новые версии этого инструмента, но у меня есть тонны старого кода, использующего эту конкретную версию. Это для академического курса.

Я использую Windows 7, JDK 1.8.0_65, python 3.3.3 и NLTK 3.0.2

Мои переменные среды следующие:

  • CLASSPATH : C:\Program Files (x86)\stanford-parser-full-2015-01-30\jars\stanford-parser-3.5.1-models.jar;C:\Program Files (x86)\stanford-parser-full-2015-01-30\jars\stanford-parser-3.5.1-sources.jar;C:\Program Files (x86)\stanford-parser-full-2015-01-30\jars\stanford-parser.jar
  • JAVA_HOME : C:\Program Files\Java\jdk1.8.0_65\bin
  • Path : C:\ProgramData\Oracle\Java\javapath;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Common Files\Apple\Internet Services\;C:\Program Files\Git\cmd;C:\Program Files (x86)\stanford-parser-full-2015-01-30\jars\

Я запускаю этот код:

изnltk.parse import stanford

parser = stanford.StanfordParser (model_path = 'C: \ Program Files (x86) \ stanford-parser-full-2015-01-30 \ edu \ stanford \ lp \ models \ lexparser\ englishPCFG.ser.gz ')

parser.raw_parse (' Я люблю яблоки ')

И я получаю эту ошибку

Загрузка парсераиз сериализованного файла C: \ Program Files (x86) \ stanford-parser-full-2015-01-30 \ edu \ stanford \ lp \ models \ lexparser \ englishPCFG.ser.gz ...

java. io.IOException: Невозможно определить "C: \ Program Files (x86) \ stanford-parser-full-2015-01-30 \ edu \ stanford \ lp \ models \ lexparser \ englishPCFG.ser.gz" в качестве пути к любому классу,имя файла или URL

на edu.stanford.nlp.io.IOUtils.getInputStreamFromURLOrClasspathOrFileSystem (IOUtils.java:463)

в edu.stanford.nlp.io.IOUtils.readStreamFromString (IOUtils.java:396)

в edu.stanford.nlp.parser.lexparser. LexicalizedParser.getParserFromSerializedFile (LexicalizedParser.java:599)

в edu.stanford.nlp.parser.lexparser.LexicalizedParser.getParserFromFile (LexicalizedParser.java:394)

1042

10parser.lexparser.LexicalizedParser.loadModel (LexicalizedParser.java:181)

в edu.stanford.nlp.parser.lexparser.LexicalizedParser.main (LexicalizedParser.java:1395)

Загрузка парсератекстовый файл C: \ Program Files (x86) \ stanford-parser-full-2015-01-30 \ edu \ stanford \ lp \ models \ lexparser \ englishPCFG.ser.gz java.io.IOException: невозможно разрешить "C:\ Program Files (x86) \ stanford-parser-full-2015-01-30 \ edu \ stanford \ lp \ models \ lexparser \ englishPCFG.ser.gz "в виде пути к классу, имени файла или URL-адреса

вedu.stanford.nlp.io.IOUtils.getInputStreamFromURLOrClasspathOrFileSystem (IOUtils.java: 463)

в edu.stanford.nlp.io.IOUtils.readerFromString (IOUtils.java:591)

в edu.stanford.nlp.parser.lexparser.LexicalizedParser.getParserFromTextFileFile.java: 533)

в edu.stanford.nlp.parser.lexparser.LexicalizedParser.getParserFromFile (LexicalizedParser.java:396)

в edu.stanford.nlp.parser.lexparser.Lexical.loadModel (LexicalizedParser.java:181)

в edu.stanford.nlp.parser.lexparser.LexicalizedParser.main (LexicalizedParser.java:1395)

Исключение в потоке "главная" Java. lang.NullPointerException

в edu.stanford.nlp.parser.lexparser.LexicalizedParser.loadModel (LexicalizedParser.java:183)

в edu.stanford.nlp.parser.lexparser.Lexical(LexicalizedParser.java:1395)

Traceback (последний вызов был последним): файл "C: \ Users \ Zimtyth \ Desktop \ PFE \ Implémentation \ Codes \ Code final \ Lib_Stanford_Parser.py", строка 100, вresultat = parse_sent ("Меня зовут Мелрой, и я хочувыиграть. ") Файл" C: \ Users \ Zimtyth \ Desktop \ PFE \ Implémentation \ Codes \ Code final \ Lib_Stanford_Parser.py ", строка 10, в parse_sent вернуть parser.raw_parse (отправлено) Файл" C: \ Python33 \ lib\ site-packages \ nltk \ parse \ stanford.py ", строка 152, в raw_parse return next (self.raw_parse_sents ([предложение], подробный)) Файл" C: \ Python33 \ lib \ site-packages \ nltk \ parse \stanford.py ", строка 170, в raw_parse_sents возвращает self._parse_trees_output (self._execute (cmd, '\ n'.join (предложения), подробный)) Файл" C: \ Python33 \ lib \ site-packages \ nltk \ parse "\ stanford.py ", строка 230, в _executestdout = PIPE, stderr = PIPE) Файл "C: \ Python33 \ lib \ site-packages \ nltk \ internals.py", строка 161, в java повысить OSError ('Ошибка команды Java:' + str (cmd)) OSError:Сбой команды Java: ['C: \ Program Files \ Java \ jdk1.8.0_65 \ bin \ java.exe', '-mx1000m', '-cp', 'C: \ Program Files (x86) \ stanford-parser-full-2015-01-30 \ jars \ stanford-parser.jar; C: \ Program Files (x86) \ stanford-parser-full-2015-01-30 \ jars \ stanford-parser-3.5.1-models.jar',' edu.stanford.nlp.parser.lexparser.LexicalizedParser ',' -model ',' C: \ Program Files (x86) \ stanford-parser-full-2015-01-30 \ edu \ stanford \ lp \ models\ lexparser \ englishPCFG.ser.gz ',' -sentences ',' newline ',' -outputFormat ',' penn ',' -encoding ',' utf8 ',' c: \ users \ zimtyth \ appdata \ local \ temp\ tmpbf5zdg ']

Я уже проверил пару ответов в SO по этому поводу, например this , но все же не смог заставить его работать. Это похоже на проблему с Java, скажите, пожалуйста, что я здесь не так делаю?

1 Ответ

0 голосов
/ 12 октября 2019

Я полагаю, что ваш код неверен, и у вас нет файла в местоположении 'C:\Program Files (x86)\stanford-parser-full-2015-01-30\edu\stanford\lp\models\lexparser\englishPCFG.ser.gz'.

Если файл jar моделей находится на вашем пути к классам, вы сможете получитьчто нужно сделать, указав путь к модели (внутри файла jar):

parser = stanford.StanfordParser(model_path='edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz')

Другой вариант - развернуть файл jar (jar -xf), и тогда у вас будет файл englishPCFG.ser.gz, который вы можете использовать в качестве параметра для model_path.

ps. Для других людей, читающих это в 2019+: на самом деле вам больше не следует использовать этот пакет NLTK, а скорее: nltk.parse.corenlp.CoreNLPParser

...