2015-05-13 8 views
0

Я пытаюсь извлечь данные из PennTreeBank, Wall Street Journal corpus. Большинство из них уже имеют деревья синтаксического анализа, но некоторые данные только помечены. т. Е. Файлы wsj_DDXX.mrg и wsj_DDXX.pos.Стэнфордская НЛП - использование текстового или текстового текста для создания полного XML

Я хотел бы использовать уже обработанные деревья и помеченные данные в этих файлах, чтобы не использовать синтаксический анализатор и тегеры в CoreNLP, но мне по-прежнему нужен формат выходного файла, который дает CoreNLP; а именно XML-файл, содержащий зависимости, сущность ядра и дерево разбора и помеченные данные.

Я прочитал многие из java-документов, но не могу понять, как это сделать, как я описал.

Для POS я попытался использовать LexicalizedParser, и он позволяет мне использовать теги, но я могу генерировать только XML-файл с некоторой информацией, которую я хочу; нет возможности для выделения или генерации деревьев синтаксического анализа. Чтобы заставить его правильно генерировать субоптимальные файлы XML здесь, мне пришлось написать скрипт, чтобы избавиться от всех скобок внутри файлов. Это команда я использую:

Java -cp "*" edu.stanford.nlp.parser.lexparser.LexicalizedParser -outputFormat typedDependenciesCollapsed, wordsAndTags -outputFilesExtension XML -outputFormatOptions XML -writeOutputFiles -outputFilesDirectory мой \ реж -tokenized -tagSeparator/-tokenizerFactory edu.stanford.nlp.process.WhitespaceTokenizer -tokenizerMethod newCoreLabelTokenizerFactory Edu/Стэнфорд/NLP/модели/lexparser/englishPCFG.ser.gz мои \ WSJ \ файлы \ реж

Я также не могу сгенерируйте данные, которые я хотел бы иметь для данных WSJ, которые уже имеют деревья. Я попытался использовать то, что сказано here, и я посмотрел на соответствующие Javadocs. Я использовал команду, аналогичную описанной. Но мне пришлось написать программу python для извлечения данных stdout, полученных в результате анализа каждого файла и записи его в новый файл. Эти результирующие данные представляют собой только текстовый файл с зависимостями и не находятся в желаемой нотации XML.

Подводя итог, я хотел бы использовать данные POS и дерева из этих файлов PTB, чтобы генерировать синтаксис CoreNLP, соответствующий тому, что произойдет, если бы я использовал CoreNLP в обычном текстовом файле. Команда псевдо будет выглядеть так:

Java -cp "*" edu.stanford.nlp.pipeline.CoreNLP -useTreeFile wsj_DDXX.mrg

и

ява -cp "*" edu.stanford.nlp.pipeline.CoreNLP -usePOSFile wsj_DDXX.pos

Редактировать: фиксированная ссылка.

ответ

0

Да, это возможно, но немного сложно, и нет возможности использовать функцию, которая может это сделать, поэтому вам придется написать код. Основная идея состоит в том, чтобы заменить аннотаторы tokenize, ssplit и pos (и в случае, если у вас также есть деревья аннотатор parse) с кодом, который загружает эти аннотации из ваших аннотированных файлов.

На очень высоком уровне, вы должны сделать следующее:

  • Загрузите деревья с MemoryTreebank
  • Loop через все деревья и для каждого дерева создают предложение CoreMap, к которому вы добавляете
    • TokensAnnotation
    • TreeAnnotation и SemanticGraphCoreAnnotations
  • Создать Annotation объект со списком, содержащим объекты CoreMap для всех предложений
  • Запуск газопровода StanfordCoreNLP с annotators параметра установлено значение lemma,ner,dcoref и множества вариант enforceRequirements в false.

Посмотрите на отдельные аннотации, чтобы узнать, как добавить необходимые аннотации. Например. существует метод в ParserAnnotatorUtils, который добавляет SemanticGraphCoreAnnotations.