2016-06-12 97 views
0

This questions介紹如何重用管道在dkpro但如果我只創建一個JCAS,然後嘗試更改的文本,然後我得到的異常更改文本DKPro

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

我如何解決這個問題?

回答

2

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項目。

+0

您是否仍然通過這種方式獲得性能優勢,無需重新加載所有模型等(地址是引用的問題)? – zode64

+0

如果您使用例如實例化實際組件uimaFIT'AnalysisEngine引擎= AnalysisEngineFactory.createEngine(...)'調用,那麼典型的模型/資源只加載一次(在實例化或第一個處理過的文檔上)。使用'engine.process(cas);'處理CASes。 – rec