UIMA RUTA - 如何使用正则表达式和组进行查找和替换

2023-12-29

RUTA新手在这里。我正在使用 RUTA 处理文档,并且在开始注释之前需要进行大量规范化操作。我试图找到使用正则表达式和组在 RUTA 中的原始文档上查找和替换字符序列的最佳方法。本质上,我试图了解如何在 RUTA 中执行类似于 String.replaceAll 的操作。

例如,在Java中,

inputString = inputString.replaceAll( "(?i)7\\s*\\(SEVEN\\)", "7");

但我无法找到一个简单的方法来在 RUTA 中实现这一点。

Thanks


一般来说,这并不简单,因为您无法更改 CAS 中的文档文本。

UIMA Ruta 中有一些功能可以修改文档,但结果需要存储在另一个 CAS 视图或附加文件中。一些一般性评论:

  • 简单的正则表达式可以应用于匹配您的问题中的模式:http://uima.apache.org/d/ruta-current/tools.ruta.book.html#ugr.tools.ruta.language.regexprule http://uima.apache.org/d/ruta-current/tools.ruta.book.html#ugr.tools.ruta.language.regexprule
  • REPLACE 操作可以记住修改。
  • 修改器分析引擎能够执行修改,并且能够将更改的文档存储在附加的 CAS 视图和附加的 HMTL 文件中(HMTL 因为修改器还可以添加彩色跨度)
  • 如果您想使用“initialView”,视图编写器分析引擎能够将一个视图复制到另一个视图
  • 如果您的文档包含注释并且这些注释在替换后也应该有效,则需要不同的功能。 HTMLConverter 有一些用于替换的参数,但在没有更多信息或进一步测试的情况下,我不知道它是否可以解决您在这个用例中的问题。

这是您问题中示例的脚本:

ENGINE utils.Modifier;
ENGINE utils.ViewWriter;
TYPESYSTEM utils.SourceDocumentInformation;
DECLARE ToReplace;

// just create an annotation
"(?i)7\\s*\\(SEVEN\\)" -> ToReplace;

// replace the text covered by all annotations with the string "7"
ToReplace{-> REPLACE("7")}; 
//... the annotation should be removed again with UNMARK before different replacements are performed...  
// it is also possible to do this in a more generic way with features and variables

// ... either store the changed text in the "modified" view and in an additional html file
Document{-> CONFIGURE(Modifier, "outputLocation" = "D:/modified/"), EXEC(Modifier)};

// ... or store the changed text in the "modified" view and in an additional xmiCAS
Document{-> EXEC(Modifier), CONFIGURE(ViewWriter, "inputView" = "modified", "output" = "../modified/"), EXEC(ViewWriter)};

只是提一下:修饰符有一些小错误,导致出现双空格。

对替换进行建模的更通用方法可能是:

DECLARE Annotation ToReplace(STRING r);
"(?i)(7)\\s*\\(SEVEN\\)" -> ToReplace ("r" = 1);
ToReplace{-> REPLACE(ToReplace.r)};

ToReplace 注释现在具有附加的字符串功能,用于存储应替换注释的覆盖文本的值。正则表达式有一个附加的捕获组,用于指定注释中的字符串(使用捕获组的编号分配值)。 REPLACE 规则现在更加通用,因为不需要在操作中给出实际值,但会应用功能的值。因此,最后一个规则可用于其他规则指定的任何替换。

通常,需要在具有沙发映射的管道中指定对已更改文本进行操作的连续替换,因为后续规则需要对不同视图进行操作。在 UIMA Ruta Workbench 中,可以在单独的脚本文件中定义查找/替换,然后为每个脚本文件使用一个启动配置。启动配置能够指定输入和输出文件夹。与 ViewWriter 结合使用,用户可以构建一系列脚本文件,并在先前脚本文件的输出文件夹中运行。

连续替换也可以在一个脚本文件中完成,但有一些限制。 REPLACE 操作实际上将新文本存储在每个 RutaBasic 注释的替换功能中。第一个 RutaBasic 获取完整的新字符串,另一个 RutaBasic 设置为空字符串。当修饰符创建新文本时,Ruta 基本注释的覆盖文本将被特征值替换,因此第一个标记被完整的替换字符串替换,而其他标记被删除。了解此过程后,规则可以根据先前的替换进行操作并更改相应的特征值。总体而言,连续替换是可能的,但并不简单。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UIMA RUTA - 如何使用正则表达式和组进行查找和替换 的相关文章

随机推荐