Вопрос

Я недавно узнал о UIMA (http://uima.apache.org/) Это выглядит многообещающе для простых задач NLP, таких как токенизация, расщепление предложений, тегингинг в рече и т. Д.

Мне удалось получить в свои руки уже настроенный минимальный образец Java, который использует компоненты OpenNLP для своего трубопровода.

Код выглядит так:

public void ApplyPipeline() throws IOException, InvalidXMLException,
        ResourceInitializationException, AnalysisEngineProcessException {

    XMLInputSource in = new XMLInputSource(
            "opennlp/OpenNlpTextAnalyzer.xml");
    ResourceSpecifier specifier = UIMAFramework.getXMLParser()
            .parseResourceSpecifier(in);

    AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(specifier);

    JCas jcas = ae.newJCas();
    jcas.setDocumentText("This is my text.");

    ae.process(jcas);
    this.doSomethingWithResults(jcas);

    jcas.reset();
    ae.destroy();
}

private void doSomethingWithResults(JCas jcas) {
    AnnotationIndex<Annotation> idx = jcas.getAnnotationIndex();
    FSIterator<Annotation> it = idx.iterator();

    while (it.hasNext()) {
        System.out.println(it.next().toString());
    }

}

Выдержка из OpenNlpTextAnalyzer.xml:

<delegateAnalysisEngine key="SentenceDetector">
    <import location="SentenceDetector.xml" />
</delegateAnalysisEngine>
<delegateAnalysisEngine key="Tokenizer">
    <import location="Tokenizer.xml" />
</delegateAnalysisEngine>

Код Java производит выход, как это:

Token
   sofa: _InitialView
   begin: 426
   end: 435
   pos: "NNP"

Я пытаюсь получить одну и ту же информацию от каждого объекта аннотации, который использует метод ToString (). Я уже изучил исходный код UIMA, чтобы понять, откуда поступают значения. Мои попытки извлечь их в жизнь, но они в любом случае не умны.

Я изо всех сил пытаюсь найти простые примеры, которые извлекают информацию из объектов JCAS.

Я ищу способ получить, например, все аннотации, производящие мой почтовый ящик или предложения для дальнейшего использования.

Наверное

List<Feature> feats = it.next().getType().getFeatures();

является началом получать значения, но из -за UIMA принадлежит классы для примитивных типов, даже исходный код метода ToString в классе аннотации читается как пощечины на лице.

Где я могу найти код Java, который использует базовые материалы UIMA и где хорошие уроки (кроме Javadoc из самой структуры)?

Это было полезно?

Решение

Создайте классы обертки JCAS для ваших типов аннотаций (вы можете сделать это, используя плагин типа системы UIMA для Eclipse, который поставляется с UIMA). Это предоставит вам классы Java, которые вы можете использовать для доступа к аннотациям - эти предложения предлагают Getters и Setters для функций.

Вы должны взглянуть на uimafit, который предоставляет более удобный API, включая удобные методы для извлечения аннотаций из JCAS, например, Select (JCAS, Token.class) (где токен.

Вы могли бы найти быстрое начало Крытые сценарии и коллекция компонентов UIMA на DKPRO CORE страница.

Существует материал из учебника UIMA@GSCL 2013 (слайды и пример кода), которые могут быть полезны для вас. Идти здесь и прокрутите вниз до «Учебного пособия».

Раскрытие: я разработчик на UIMA, UIMAFIT, DKPRO CORE и COORGANIZER на семинаре UIMA@GSCL 2013.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top