Изменить текст в многоразовом конвейере в 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.