2016-03-04 3 views
1

Я использую Stanford Parser (версия 3.6.0) для французского языка. Моя командная строкаStanford Parser: frenchFactored.ser.gz

java -cp stanford-parser.jar:* edu.stanford.nlp.parser.lexparser.LexicalizedParser -maxlength 30 -outputFormat conll2007 frenchFactored.ser.gz test_french.txt > test_french.conll10 

Но я не получаю функции в выходном сигнале, см:

1 Je _ CLS CLS _ 2 NULL _ _

2 чесотка _ _ VV 0 корень _ _ _ _

3 дез _ _ 2 ПП NULL _ _ _ _

4 Pommes _ _ NN 3 NULL _ _ _ _

5. _ PUNC PUNC _ 2 NULL _ _

Что я мог пропустить в командной строке?

ответ

0

В Stanford CoreNLP 3.6.0 имеется французский парсер зависимости от глубокого обучения.

Скачать Стэнфорд CoreNLP 3.6.0 здесь:

http://stanfordnlp.github.io/CoreNLP/download.html

Также убедитесь, чтобы получить французскую модели банку, который также доступен на этой странице.

А затем запустить эту команду, чтобы использовать парсер французскую зависимость, убедитесь, что у французской модель баночки в вашем CLASSPATH:

java -Xmx6g -cp "*:stanford-corenlp-full-2015-12-09/*" edu.stanford.nlp.pipeline.StanfordCoreNLP -props StanfordCoreNLP-french.properties -file sample-french-document.txt -outputFormat text 
+0

Спасибо за ваш ответ! – starckman

+0

Я даю эту команду: 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

+0

Являются ли эти файлы jar в каталоге, в котором вы запускаете эту команду. Вы получаете эту ошибку, потому что по какой-то причине банер французских моделей не находится в вашем CLASSPATH. Если вы сделаете jar -tf на французском фляге, вы увидите, что файл тегов. – StanfordNLPHelp

0

Там нет ничего плохого с вашей командой:

Известные форматы: oneline, Penn, latexTree, XMLTree, слова, wordsAndTags, rootSymbolOnly, зависимости, typedDependencies, typedDependenciesCollapsed, фразеологизмы, semanticGraph, conllStyleDependencies, conll2007 , Последние два являются форматами значений, разделенных табуляцией. Последний имеет намного больше столбцов, заполненных символами подчеркивания. [...]

Источник: http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/trees/TreePrint.html

Вы можете попробовать другой -outputFormat.

+0

Спасибо, для китайского парсер (xinhuaFactored.ser.gz) я получаю грамматические функции, такие как nsubj, auxpass и так далее, но с французским одной как вы видите, я получаю только «NULL», это просто означает, что аннотации функций недоступны в Stanford Parser для французского языка? – starckman

+0

Он также работает на английском языке (я пробовал это сейчас.) Кажется, что он не реализован для французского языка. Итак, ваша команда в порядке, но парсер работает не так, как вы ожидаете. – mejem

+0

ОК, вот что я читаю здесь https://mailman.stanford.edu/pipermail/parser-user/2014-June/002937.html: «У нас пока нет парсера прямой зависимости, вместо того, чтобы анализировать группы сначала, а затем конвертировать для английского и китайского языков. Вам нужно будет либо преобразовать деревья синтаксического анализа для французских зависимостей аналогичным образом, либо обучить, а затем использовать парсер зависимостей другой группы. Это не невозможно, но это будет тонкой работой ». но потому, что он датирован 2014 годом, поэтому я не был уверен, что это все еще так. Благодаря ! – starckman

0

Ваш запрос хорош, но анализатор Стэнфорд не поддерживает это еще (версия 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

+0

Извините, я не был подключен в течение долгого времени и не ответил, большое спасибо. Я использовал Mate Parser для французского языка, который я рекомендую https://code.google.com/archive/p/mate-tools/downloads – starckman

 Смежные вопросы

  • Нет связанных вопросов^_^