Изменить текст в многоразовом конвейере в DKPro

Этот вопрос описывает, как повторно использовать конвейер в dkpro, но если я создаю только один JCas, а затем пытаюсь изменить текст, я получаю исключение

org.apache.uima.cas.CASRuntimeException: Data for Sofa feature setLocalSofaData() has already been set.

Как мне обойти это?

1 ответ

Решение

Данные дивана в CAS могут быть установлены только один раз. Его нельзя изменить после того, как он был установлен.

Чтобы повторно использовать CAS, позвоните в reset() метод на это. Это удаляет все аннотации и позволяет снова установить диван / текст.

Для постепенного построения CAS распространенной стратегией является добавление аннотаций в CAS при добавлении текста в строковый буфер и задание текста только в конце процесса.

Пример на основе uimaFIT может выглядеть примерно так:

Strings[] texts = {
    "Hello world.",
    "This is a test." };

// Create empty CAS/JCas initialized using uimaFIT typesystem auto-detection
JCas jcas = JCasFactory.createJCas();

// Instantiate some analysis engine
AnalysisEngine engine = AnalysisEngineFactory.createEngine(...);

// Process texts re-using the previously created CAS/JCas instance
for (String t : texts) {
    jcas.reset();
    jcas.setDocumentText(t);
    jcas.setDocumentLanguage("en");
    engine.process(jcas);
}

engine.collectionProcessComplete();
engine.destroy();

Раскрытие информации: я работаю над проектом Apache UIMA.

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