1

这是关于问题的。

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

谢谢

4

1 回答 1

0

我在您的示例中注意到的第一件事是您必须在 AAE 中指定输出沙发。这些都是在 AAE 中创建的所有沙发,例如,由其组件之一创建。然后缺少沙发映射。您必须将 AE 的输出视图与其他 AE 的输入视图连接起来。在您的示例中,我只看到默认输入视图。

我创建了一个单元测试,可以将其用作此任务的示例。

测试在这里:https ://svn.apache.org/repos/asf/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/CascadedModifierTest.java

测试中使用的资源(描述符)在这里:https ://svn.apache.org/repos/asf/uima/ruta/trunk/ruta-core/src/test/resources/org/apache/uima/ruta/引擎

请注意,我删除了 ruta 描述符中的绝对路径并调整了导入脚本的命名空间。它们现在由类路径加载以进行测试,而不是使用绝对路径。

该测试调用了一个聚合分析引擎 AAE.xml,它导入并映射了五个分析引擎:

  • CWEngine.xml:替换大写单词的简单 Ruta 脚本。CW{->REPLACE("CW")};芸香
  • ModiferCW.xml:一个普通的修饰符
  • SWEngine.xml:简单的 Ruta 脚本,用于替换小字。SW{->REPLACE("SW")};甜菜
  • ModiferSW.xml:普通修饰符
  • SimpleEngine.xml:简单的 Ruta 脚本,它定义了一个新类型并匹配“CW”和“SW”。DECLARE CwSw; ("CW" "SW"){-> CwSw};简单的.ruta

聚合分析引擎定义了三个视图:global1(输入)、global2(输出)和 global3(输出)。组件的沙发映射如下:

global1 -> [CWEngine, ModiferCW] -> global2 -> [SWEngine, ModiferSW] -> global3-> [SimpleEngine]

给定Peter is tired.视图 global1 中的文本,聚合分析引擎创建两个新视图,视图 global3 包含文本CW SW SW.和一个类型的注释Simple.CwSw

于 2014-04-17T12:21:19.197 回答