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

Stanford NLP - Using Parsed or Tagged text to generate Full XML

我正在尝试从 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 并查看了相应的 Javadocs。我使用了与所描述的类似的命令。但是我不得不编写一个 python 程序来检索分析每个文件产生的标准输出数据并将其写入一个新文件。此生成的数据只是一个具有依赖项的文本文件,而不是所需的 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

编辑:修复了 link.

是的,这是可能的,但有点棘手,而且没有开箱即用的功能可以做到这一点,因此您将不得不编写一些代码。基本思想是用从您的代码加载这些注释的代码替换 tokenizessplitpos 注释器(如果您也有树 parse 注释器)注释文件。

在非常高的级别上,您必须执行以下操作:

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

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