Как использовать HeidelTime в качестве UIMA AnalysisEngine с DKPro

В настоящее время я работаю над проектом по извлечению биографической информации из текстовых источников. Одним шагом является аннотация источника, чтобы увидеть, что на самом деле там. Для этого я бы хотел использовать HeidelTime, потому что в документации сказано, что он хорошо вписывается в конвейер UIMA. Поскольку я все еще новичок в NLP, я пробовал DKPro Core Framework, который до сих пор предоставлял удобный доступ ко всем компонентам, которые я хотел, включая завершение работы в конвейерах следующим образом:

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 реализует необходимый интерфейс, поэтому я добавил его, в том числе предложенные до и после обработки AnalysisEngines:

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, похоже, не переводится должным образом с другими механизмами анализа. В документации сказано, что так и должно быть, однако ответственный класс отсутствует в репозитории и, вероятно, в артефакте Maven, который я тоже вытащил. Я не знаю, с чего начать искать исправление, и до сих пор я не нашел ничего намекающего на направление в Интернете, за исключением некоторых старых вопросов о том, как использовать автономное приложение здесь и здесь.

0 ответов

Другие вопросы по тегам