Ваш запрос хорош, но анализатор Стэнфорд не поддерживает это еще (версия 3.6.0).
Следующий код печатает "false" при использовании французской модели. Команда, которую вы используете, проверяет это внутренне и спокойно избегает анализа, когда ложь.
System.out.println(
LexicalizedParser
.loadModel("frenchFactored.ser.gz")
.treebankLanguagePack()
.supportsGrammaticalStructures()
);
Вот почему я использую Malt анализатор (http://www.maltparser.org/).
Если вы хотите следующий вывод:
1 Je Je C CLS null 2 suj _ _
2 mange mange V V null 0 root _ _
3 des des P P null 2 mod _ _
4 pommes pommes N N null 3 obj _ _
5 . . P PUNC null 2 mod _ _
Затем используйте следующий код, который генерирует его (вы не можете просто использовать командную строку).Я использую как Стэнфорд и Солод для достижения этой цели:
LexicalizedParser lexParser = LexicalizedParser.loadModel("frenchFactored.ser.gz");
TokenizerFactory<CoreLabel> tokenizerFactory = PTBTokenizer.factory(new CoreLabelTokenFactory(), "");
ConcurrentMaltParserModel parserModel = ConcurrentMaltParserService.initializeParserModel(new File("fremalt-1.7.mco"));
Tokenizer<CoreLabel> tok = tokenizerFactory.getTokenizer(new StringReader("Je mange des pommes."));
List<CoreLabel> rawWords2 = tok.tokenize();
Tree parse = lexParser.apply(rawWords2);
// The malt parser requires token in the MaltTab format (Connll).
// Instead of using the Stanford tagger, we could have used Melt or another parser.
String[] tokens = parse.taggedLabeledYield().stream()
.map(word -> {
CoreLabel w = (CoreLabel)word;
String lemma = Morphology.lemmatizeStatic(new WordTag(w.word(), w.tag())).word();
String tag = w.value();
return String.join("\t", new String[]{
String.valueOf(w.index()+1),
w.word(),
lemma != null ? lemma : w.word(),
tag != null ? String.valueOf(tag.charAt(0)) : "_",
tag != null ? tag : "_"
});
})
.toArray(String[]::new);
ConcurrentDependencyGraph graph = parserModel.parse(tokens);
System.out.println(graph);
Оттуда можно программно пройти график с помощью:
graph.nTokenNodes()
Если вы используете Maven, просто добавьте следующие зависимости для вашего П:
<dependency>
<groupId>org.maltparser</groupId>
<artifactId>maltparser</artifactId>
<version>1.8.1</version>
</dependency>
<dependency>
<groupId>edu.stanford.nlp</groupId>
<artifactId>stanford-corenlp</artifactId>
<version>3.6.0</version>
</dependency>
Bonus: импорт
import org.maltparser.concurrent.ConcurrentMaltParserModel;
import org.maltparser.concurrent.ConcurrentMaltParserService;
import org.maltparser.concurrent.graph.ConcurrentDependencyGraph;
import org.maltparser.concurrent.graph.ConcurrentDependencyNode;
import org.maltparser.core.exception.MaltChainedException;
import edu.stanford.nlp.ling.CoreLabel;
import edu.stanford.nlp.ling.WordTag;
import edu.stanford.nlp.parser.lexparser.LexicalizedParser;
import edu.stanford.nlp.process.CoreLabelTokenFactory;
import edu.stanford.nlp.process.Morphology;
import edu.stanford.nlp.process.PTBTokenizer;
import edu.stanford.nlp.process.Tokenizer;
import edu.stanford.nlp.process.TokenizerFactory;
import edu.stanford.nlp.trees.Tree;
Extra: fremalt-1.7.mco файл
http://www.maltparser.org/mco/french_parser/fremalt.html
Спасибо за ваш ответ! – starckman
Я даю эту команду: java -mx1g -cp stanford-corenlp-3.7.0.jar: stanford-french-corenlp-2016-10-31-models.jar edu.stanford.nlp.pipeline.StanfordCoreNLP -props StanfordCoreNLP-французский .properties -annotators tokenize, ssplit, pos, depparse -file /Users/Rafael/Desktop/LANGAGES/CORPUS/Sentences_FR/3aube_schtrouFR30.txt -outputFormat sortie.txt, но я получаю это сообщение об ошибке Невозможно открыть «edu/stanford/nlp/model/pos-tagger/french/french.tagger "как путь к классу, имя файла или URL-адрес – starckman
Являются ли эти файлы jar в каталоге, в котором вы запускаете эту команду. Вы получаете эту ошибку, потому что по какой-то причине банер французских моделей не находится в вашем CLASSPATH. Если вы сделаете jar -tf на французском фляге, вы увидите, что файл тегов. – StanfordNLPHelp