斯坦福NLP - 使用解析或标记文本生成完整XML

时间:2015-05-13 15:52:03

标签: parsing nlp stanford-nlp pos-tagger

我正在尝试从PennTreeBank,华尔街日报语料库中提取数据。其中大部分已经有解析树,但有些数据只是标记的。 即wsj_DDXX.mrg和wsj_DDXX.pos文件。

我想在这些文件中使用已解析的树和标记数据,以免在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 my \ dir -tokenized -tagSeparator / -tokenizerFactory edu.stanford.nlp .process.WhitespaceTokenizer -tokenizerMethod newCoreLabelTokenizerFactory edu / stanford / nlp / models / lexparser / englishPCFG.ser.gz my \ wsj \ files \ dir

我也无法为已经拥有树的WSJ数据生成我想要的数据。我尝试使用所说的here,然后查看了相应的Javadoc。我使用了类似于描述的命令。但我必须编写一个python程序来检索分析每个文件所产生的stdout数据并将其写入新文件。此结果数据仅是具有依赖项的文本文件,并且不是所需的XML表示法。

总而言之,我想使用这些PTB文件中的POS和树数据来生成CoreNLP解析,该解析对应于在常规文本文件中使用CoreNLP时会发生的情况。伪命令将是这样的:

  

java -cp“*”edu.stanford.nlp.pipeline.CoreNLP -useTreeFile wsj_DDXX.mrg

  

java -cp“*”edu.stanford.nlp.pipeline.CoreNLP -usePOSFile wsj_DDXX.pos

编辑:修复了一个链接。

1 个答案:

答案 0 :(得分:0)

是的,这是可能的,但有点棘手,并且没有可以执行此操作的开箱即用功能,因此您必须编写一些代码。基本的想法是用您的代码替换tokenizessplitpos注释器(如果您还有树parse注释器),您的代码将从您的注释中加载这些注释带注释的文件。

在很高的层次上,您必须执行以下操作:

  • 使用MemoryTreebank
  • 加载树木
  • 遍历所有树,并为每个树创建一个您添加的句子CoreMap
    • a TokensAnnotation
    • 一个TreeAnnotationSemanticGraphCoreAnnotations
  • 使用包含所有句子的Annotation个对象的列表创建CoreMap对象
  • 运行StanfordCoreNLP管道,annotators选项设置为lemma,ner,dcoref,选项enforceRequirements设置为false

查看各个注释器,了解如何添加所需的注释。例如。 ParserAnnotatorUtils中有一个方法可以添加SemanticGraphCoreAnnotations