这是关于问题的。
UIMA RUTA - 如何使用正则表达式和组进行查找和替换
我正在尝试按照建议设置沙发映射。我有一个包含多个 AE 的聚合 AE,并尝试在此管道中合并 2 个 RUTA AE/脚本。两个 RUTA AE(和相关脚本)都负责使用修饰符进行 REGEXP 查找和替换。第二个 AE 取决于第一个 AE 的输出。我必须配置修改器的第二个 AE 的输出视图,否则我会收到“沙发数据已设置”异常。
本质上,我无法将一个AE的输出编织为另一个AE的输入。
我的设置类似于下面,
_initialview --Input> (Normalizer1 RUTA AE) --Output> norm_1_out
norm_1_out --Input> (Normalizer2 RUTA AE) --Output> norm_2_out
norm_2_out --Input> (Other AE)
这是聚合 AE 代码
<?xml version="1.0" encoding="UTF-8"?>
<analysisEngineDescription xmlns="http://uima.apache.org/resourceSpecifier">
<frameworkImplementation>org.apache.uima.java</frameworkImplementation>
<primitive>false</primitive>
<delegateAnalysisEngineSpecifiers>
<delegateAnalysisEngine key="NormalizerPrepStep1">
<import location="../../../ruta-annotators/desc/NormalizeNumbersEngine.xml"/>
</delegateAnalysisEngine>
<delegateAnalysisEngine key="NormalizerPrepStep2">
<import location="../../../ruta-annotators/desc/NormalizeRangesEngine.xml"/>
</delegateAnalysisEngine>
<delegateAnalysisEngine key="Normalizer">
<import location="../../../ruta-annotators/desc/NormalizerEngine.xml"/>
</delegateAnalysisEngine>
<delegateAnalysisEngine key="SimpleAnnotator">
<import location="../../../textanalyzer/desc/analysis_engine/SimpleAnnotator.xml"/>
</delegateAnalysisEngine>
</delegateAnalysisEngineSpecifiers>
<analysisEngineMetaData>
<name>RUTAAggregatePlaintextProcessor</name>
<description>Runs the complete pipeline for annotating documents in plain text format.</description>
<version/>
<vendor/>
<configurationParameters searchStrategy="language_fallback">
<configurationParameter>
<name>SegmentID</name>
<description/>
<type>String</type>
<multiValued>false</multiValued>
<mandatory>false</mandatory>
<overrides>
<parameter>SimpleAnnotator/SegmentID</parameter>
</overrides>
</configurationParameter>
</configurationParameters>
<configurationParameterSettings/>
<flowConstraints>
<fixedFlow>
<node>NormalizerPrepStep1</node>
<node>NormalizerPrepStep2</node>
<node>Normalizer</node>
<node>SimpleAnnotator</node>
</fixedFlow>
</flowConstraints>
<typePriorities>
<name>Ordering</name>
<description>For subiterator</description>
<version>1.0</version>
<priorityList>
</priorityList>
</typePriorities>
<fsIndexCollection/>
<capabilities>
<capability>
<inputs/>
<outputs/>
<inputSofas>
<sofaName>norm_1_out</sofaName>
<sofaName>norm_2_out</sofaName>
<sofaName>normalized</sofaName>
</inputSofas>
<languagesSupported/>
</capability>
</capabilities>
<operationalProperties>
<modifiesCas>true</modifiesCas>
<multipleDeploymentAllowed>true</multipleDeploymentAllowed>
<outputsNewCASes>false</outputsNewCASes>
</operationalProperties>
</analysisEngineMetaData>
<resourceManagerConfiguration/>
<sofaMappings>
<sofaMapping>
<componentKey>SimpleAnnotator</componentKey>
<aggregateSofaName>normalized</aggregateSofaName>
</sofaMapping>
<sofaMapping>
<componentKey>NormalizerPrepStep2</componentKey>
<aggregateSofaName>norm_1_out</aggregateSofaName>
</sofaMapping>
<sofaMapping>
<componentKey>Normalizer</componentKey>
<aggregateSofaName>norm_2_out</aggregateSofaName>
</sofaMapping>
</sofaMappings>
</analysisEngineDescription>
需要注意的几点,
- 所有三个 RUTA AE(step1、step2、normalizer)都使用 RUTA Modifier
- 上述设置引发异常“找不到名为 norm_2_out 的沙发FS”。- 这发生在第 2 步之后。
- 我试图将“norm_2_out”切换为“已修改”作为规范化器的输入沙发,这似乎将处理移至管道中的下一步(规范化器),但这会引发异常“沙发功能 setLocalSofaData() 的数据有已经设置好了。” 在 org.apache.uima.ruta.engine.RutaModifier.process(RutaModifier.java:107)
- 我尝试使用 RUTA 2.2.0(快照),结果相同
由于我对 UIMA 和 RUTA 都比较陌生,因此不确定我是否做错了什么,或者我是否遇到了限制。
顺便说一句,我正在使用 RUTA 2.1.0
谢谢