Я использую Stanford-NLP 3.8.0 для своего проекта в работе
Я читал много вопросов о моей проблеме, нет в stackoverflow и любых других сайтах, но я все еще не нашел решения, и не было ни одной ситуации, как моя, во всех местах, где я искал, поэтому я создаю этот вопрос
В своей работе мне нужно использовать Stanford NLP в веб-приложении без зависимостей от Stanford-parse и Stanford-моделей, поэтому решение типа здесь не для меня. Почему без двух этих зависимостей? Потому что они весят слишком много. В моем проекте я могу загрузить только зависимость Standord-Core-Nlp, и это все.
Проблема в следующем.
У меня есть две модели. Первый - "russian-ud-pos.tagger" из проекта MANASLU8 студентов ITMO Univercity, вы можете скачать его здесь . Второй - модель Stanford CRF english.all.3class.distsim.crf.ser.gz, это стандартная модель, которую вы можете скачать здесь
Итак, я получил эти два файла, и я получил два кода, почти идентичные
Пом для обоих кодов одинаков:
edu.stanford.nlp stanford-corenlp 3.8.0
И это все (да, мой pom без парсера, моделей и т. Д., Только Stanford-Core)
1) Первый код работает хорошо. Здесь я положил два моих файла в src / main / resources
И код следующий
Properties props = new Properties();
props.setProperty("annotators", "tokenize,ssplit,pos,lemma,ner");
props.setProperty("pos.model", "russian-ud-pos.tagger");
props.setProperty("ner.model", "english.all.3class.distsim.crf.ser.gz");
props.setProperty("ner.useSUTime", "false");
props.setProperty("ner.applyNumericClassifiers", "false");
props.setProperty("sutime.includeRange", "false");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
Как видите, я не использую никаких путей в объекте свойств, просто имя файла
Когда я запускаю свое приложение, оно показывает мне следующее stackTrace:
19:17:55.979 [main] INFO e.s.nlp.pipeline.StanfordCoreNLP - Adding annotator tokenize
19:17:55.994 [main] INFO e.s.nlp.pipeline.TokenizerAnnotator - No tokenizer type provided. Defaulting to PTBTokenizer.
19:17:55.994 [main] INFO e.s.nlp.pipeline.StanfordCoreNLP - Adding annotator ssplit
19:17:55.994 [main] INFO e.s.nlp.pipeline.StanfordCoreNLP - Adding annotator pos
19:17:56.790 [main] INFO e.s.nlp.tagger.maxent.MaxentTagger - Loading POS tagger from russian-ud-pos.tagger ... done [0.8 sec].
19:17:56.790 [main] INFO e.s.nlp.pipeline.StanfordCoreNLP - Adding annotator lemma
19:17:56.790 [main] INFO e.s.nlp.pipeline.StanfordCoreNLP - Adding annotator ner
19:18:00.737 [main] INFO e.s.n.ie.AbstractSequenceClassifier - Loading classifier from english.all.3class.distsim.crf.ser.gz ... done [3.9 sec].
19:18:01.002 [main] INFO e.s.nlp.tagger.maxent.MaxentTagger - Loading POS tagger from russian-ud-pos.tagger ... done [0.3 sec].
И тогда он успешно работает
2) Вот второй код
Properties props = new Properties();
props.setProperty("annotators", "tokenize,ssplit,pos,lemma,ner");
props.setProperty("pos.model", "file:D:\\russian-ud-pos.tagger");
props.setProperty("ner.model", "file:D:\\english.all.3class.distsim.crf.ser.gz");
props.setProperty("ner.useSUTime", "false");
props.setProperty("ner.applyNumericClassifiers", "false");
props.setProperty("sutime.includeRange", "false");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
Как видите, я даю путь к файлам свойств, например
("file: D: \ english.all.3class.distsim.crf.ser.gz"), но не ("english.all.3class.distsim.crf.ser.gz"),
И когда я запускаю свой код, stacktrace выглядит следующим образом:
19:25:16.109 [main] INFO e.s.nlp.pipeline.StanfordCoreNLP - Adding annotator tokenize
19:25:16.109 [main] INFO e.s.nlp.pipeline.TokenizerAnnotator - No tokenizer type provided. Defaulting to PTBTokenizer.
19:25:16.125 [main] INFO e.s.nlp.pipeline.StanfordCoreNLP - Adding annotator ssplit
19:25:16.125 [main] INFO e.s.nlp.pipeline.StanfordCoreNLP - Adding annotator pos
19:25:16.936 [main] INFO e.s.nlp.tagger.maxent.MaxentTagger - Loading POS tagger from file:D:\russian-ud-pos.tagger ... done [0.8 sec].
19:25:16.936 [main] INFO e.s.nlp.pipeline.StanfordCoreNLP - Adding annotator lemma
19:25:16.936 [main] INFO e.s.nlp.pipeline.StanfordCoreNLP - Adding annotator ner
19:25:21.257 [main] INFO e.s.n.ie.AbstractSequenceClassifier - Loading classifier from file:D:\english.all.3class.distsim.crf.ser.gz ... done [4.2 sec].
edu.stanford.nlp.io.RuntimeIOException: Error while loading a tagger model (probably missing model file)
at edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:791)
at edu.stanford.nlp.tagger.maxent.MaxentTagger.<init>(MaxentTagger.java:312)
at edu.stanford.nlp.tagger.maxent.MaxentTagger.<init>(MaxentTagger.java:265)
at stanfordapplication.StanfordApplication.start(StanfordApplication.java:49)
at Test1.stanfordStringReader(Test1.java:56)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.io.IOException: Unable to open "russian-ud-pos.tagger" as class path, filename or URL
at edu.stanford.nlp.io.IOUtils.getInputStreamFromURLOrClasspathOrFileSystem(IOUtils.java:480)
at edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:789)
... 26 more
Process finished with exit code -1
Здесь, как вы можете видеть, Стэнфорд "Загрузка тега POS из файла: D: \ russian-ud-pos.tagger" и "Загрузка классификатора из файла: D: \ english.all.3class.distsim.crf. ser.gz ", но не загрузил" Загрузка POS-тега из russian-ud-pos.tagger ", как в первом коде
Я пытался использовать другие версии Stanford-Core-NLP (3.9.1 и менее).
Я смотрел код Sanford NLP и отлаживал его, но до сих пор не могу понять причины.
Кроме того, я пытался поместить файлы на диск С и диск D (я думал о правах администратора) и запустить IDEA с административными правами.
И поместите путь без «file», например, «D: \ english.all.3class.distsim.crf.ser.gz».
Кроме того, я пытался применить некоторые флаги к свойствам, например («ner.useSUTime», «false») или («ner.applyNumericClassifiers», «false») и т. Д.
Звучит странно, потому что Стэнфорд загружает первые два файла (как я понимаю)
почему он не может прочитать последний?
Возможно, Стэнфорд не может прочитать или вспомнить, или прочитать это более одного раза
Кто-нибудь, помогите мне, пожалуйста, я пытаюсь решить эту проблему около недели!