Java 如何使用HeidelTime作为DKPro的UIMA分析引擎

Java 如何使用HeidelTime作为DKPro的UIMA分析引擎,java,maven,nlp,uima,dkpro-core,Java,Maven,Nlp,Uima,Dkpro Core,我目前正在做一个项目,从文本来源中提取传记信息。一个步骤是对源代码进行注释,以查看其中的实际内容。要做到这一点,我想使用它,因为它说它非常适合UIMA管道。因为我还是NLP的初学者,所以我已经涉猎了NLP,到目前为止,它为我提供了方便地访问我想要的所有组件的途径,包括在管道中封装东西,如: public static void main(String[] args) throws UIMAException, IOException { Path inputDir = Paths.get

我目前正在做一个项目,从文本来源中提取传记信息。一个步骤是对源代码进行注释,以查看其中的实际内容。要做到这一点,我想使用它,因为它说它非常适合UIMA管道。因为我还是NLP的初学者,所以我已经涉猎了NLP,到目前为止,它为我提供了方便地访问我想要的所有组件的途径,包括在管道中封装东西,如:

public static void main(String[] args) throws UIMAException, IOException {
    Path inputDir = Paths.get(args[0]);
    String language = args[1];
    String fileForm = String.format("[+]*%s", args[2]);
    Path outputFile = Paths.get(args[3]);

    CollectionReader reader = createReader(TextReader.class,
            TextReader.PARAM_SOURCE_LOCATION, inputDir.toString(),
            TextReader.PARAM_LANGUAGE, language,
            TextReader.PARAM_PATTERNS, new String[]{fileForm});
    AnalysisEngineDescription segmenter = createEngineDescription(StanfordSegmenter.class,
            StanfordSegmenter.PARAM_LANGUAGE, language,
            StanfordSegmenter.PARAM_WRITE_SENTENCE, true,
            StanfordSegmenter.PARAM_WRITE_TOKEN, true
    );
    AnalysisEngineDescription ner = createEngineDescription(StanfordNamedEntityRecognizer.class);
    AnalysisEngineDescription writer = createEngineDescription(TokenizedTextWriter.class,
            TokenizedTextWriter.PARAM_TARGET_LOCATION, outputFile.toString(),
            TokenizedTextWriter.PARAM_OVERWRITE, true,
            TokenizedTextWriter.PARAM_EXTENSION, ".txt"
    );
    runPipeline(reader, segmenter, ner, writer);
}
文档说明HeidelTime的主分析类实现了必要的接口,因此我添加了它,包括建议的预处理和后处理分析引擎:

public static void main(String[] args) throws UIMAException, IOException {
    Path inputDir = Paths.get(args[0]);
    String language = args[1];
    String fileForm = String.format("[+]*%s", args[2]);
    Path outputFile = Paths.get(args[3]);

    CollectionReader reader = createReader(TextReader.class,
            TextReader.PARAM_SOURCE_LOCATION, inputDir.toString(),
            TextReader.PARAM_LANGUAGE, language,
            TextReader.PARAM_PATTERNS, new String[]{fileForm});
    AnalysisEngineDescription segmenter = createEngineDescription(StanfordSegmenter.class,
            StanfordSegmenter.PARAM_LANGUAGE, language,
            StanfordSegmenter.PARAM_WRITE_SENTENCE, true,
            StanfordSegmenter.PARAM_WRITE_TOKEN, true
    );
    AnalysisEngineDescription ner = createEngineDescription(StanfordNamedEntityRecognizer.class);
    // ======= HeidelTime ======
    AnalysisEngineDescription treeTagger = createEngineDescription(TreeTaggerWrapper.class);
    AnalysisEngineDescription heidelTime = createEngineDescription(HeidelTime.class);
    AnalysisEngineDescription intervalTagger = createEngineDescription(IntervalTagger.class);
    // ======= HeidelTime ======
    AnalysisEngineDescription writer = createEngineDescription(TokenizedTextWriter.class,
            TokenizedTextWriter.PARAM_TARGET_LOCATION, outputFile.toString(),
            TokenizedTextWriter.PARAM_OVERWRITE, true,
            TokenizedTextWriter.PARAM_EXTENSION, ".txt"
    );
    runPipeline(reader, segmenter, ner, treeTagger, heidelTime, intervalTagger, writer);
}
但是,运行此操作时,我遇到以下错误:

1016 [main] WARN  org.apache.uima.resource.metadata.TypeSystemDescription  - [jar:file:/C:/Users/User/.m2/repository/com/github/heideltime/heideltime/2.2.1/heideltime-2.2.1.jar!/desc/type/HeidelTime_TypeSystemStyleMap.xml] is not a type file. Ignoring.
org.apache.uima.util.InvalidXMLException: Invalid descriptor at jar:file:/C:/Users/User/.m2/repository/com/github/heideltime/heideltime/2.2.1/heideltime-2.2.1.jar!/desc/type/HeidelTime_TypeSystemStyleMap.xml.
    at org.apache.uima.util.impl.XMLParser_impl.parse(XMLParser_impl.java:218)
    at org.apache.uima.util.impl.XMLParser_impl.parseTypeSystemDescription(XMLParser_impl.java:729)
    at org.apache.uima.util.impl.XMLParser_impl.parseTypeSystemDescription(XMLParser_impl.java:718)
    at org.apache.uima.fit.factory.TypeSystemDescriptionFactory.createTypeSystemDescription(TypeSystemDescriptionFactory.java:107)
    at org.apache.uima.fit.factory.CollectionReaderFactory.createReader(CollectionReaderFactory.java:213)
    at de.uniba.minf.msc.stemper.corpus.pantheon.Pipeline.main(Pipeline.java:37)
Caused by: org.apache.uima.util.InvalidXMLException: The XML parser encountered an unknown element type: styleMap.
    at org.apache.uima.util.impl.XMLParser_impl.buildObject(XMLParser_impl.java:301)
    at org.apache.uima.util.impl.SaxDeserializer_impl.getObject(SaxDeserializer_impl.java:142)
    at org.apache.uima.util.impl.XMLParser_impl.parse(XMLParser_impl.java:209)
    ... 5 more

HeidelTime组件似乎无法与其他分析引擎正确转换。文档中说应该这样做,但是存储库中缺少了responsible类,可能还有我提取的Maven工件。我不知道从哪里开始寻找解决方案,到目前为止,我还没有在网上找到任何关于这个方向的线索,除了一些老问题,比如如何使用单机版和。

我不知道随着时间的推移,HeidelTime与DKPro Core的偏差有多大。您收到的消息不是错误,而是警告。这不要紧。您希望得到什么输出?您得到什么输出?这是我得到的异常,因为类型系统描述的通配符查找。uimaFIT/DKPro在
types
子文件夹中搜索*.xml,HeidelTime在这样的文件夹中有一些样式映射xml,这导致了解析异常。我不知道随着时间的推移,HeidelTime与DKPro核心的偏差有多大。您收到的消息不是错误,而是警告。这不要紧。您希望得到什么输出?您得到什么输出?这是我得到的异常,因为类型系统描述的通配符查找。uimaFIT/DKPro在
types
子文件夹中搜索*.xml,HeidelTime在这样的文件夹中有一些样式映射xml,这会导致解析异常。