在 DKPro 中更改可重用管道中的文本
Change text in reusable pipeline in DKPro
描述了如何在 dkpro 中重用管道,但是如果我只创建一个 JCas 然后尝试更改文本,那么我会得到异常
org.apache.uima.cas.CASRuntimeException: Data for Sofa feature setLocalSofaData() has already been set.
我该如何解决这个问题?
CAS中的沙发数据只能设置一次。设置后不可修改。
为了重新使用 CAS,调用它的 reset()
方法。这将清除所有注释并允许您再次设置 sofa/text。
要逐步构建 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 项目。
org.apache.uima.cas.CASRuntimeException: Data for Sofa feature setLocalSofaData() has already been set.
我该如何解决这个问题?
CAS中的沙发数据只能设置一次。设置后不可修改。
为了重新使用 CAS,调用它的 reset()
方法。这将清除所有注释并允许您再次设置 sofa/text。
要逐步构建 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 项目。