2013-08-02 173 views
2

我正在使用UIMA中的RegEx Annotator。我知道我可以在这样的XML描述符文件创建的正则表达式变量:Java UIMA:正则表达式中的正则表达式变量?

<variables> 
    <variable name="month" value="(Jan|Feb|March)" /> 
</variables> 

和访问它像这样的规则:

<rules> 
    <rule regEx="Month: \v{month}" /> 
</rules> 

这将匹配Month: JanMonth: FebMonth: Mar

现在我想在另一个变量里面使用变量,这可能吗? 我期待这样的事情:

<variables> 
    <variable name="monthmonth" value="\v{month}\v{month}" /> 
</variables> 

,我想创建相应的规则来匹配Month: JanJan例如。

我在http://uima.apache.org/downloads/sandbox/RegexAnnotatorUserGuide/RegexAnnotatorUserGuide.html#sandbox.regexAnnotator.conceptsFile.regexVariables阅读文档,并没有提及关于使用内部变量的正则表达式变量的可能性,虽然它说的The variables can be used in all concept definition within the same file.

我使用UIMA RegularExpressionAnnotator 2.3.1。

任何帮助表示赞赏。 =)

回答

2

根据该文档,

正则表达式的变量名可以包含以下任一字符[a-zA-Z_0-9]的。其他字符是不允许的。

如果这是唯一的限制,123将是一个有效的名称,你可以称为​​。解析器应该如何知道你的意思是名为“123”的规则而不是一百二十三个垂直制表符?

在大多数语言(包括XML)中,名称不能以数字开头。如果在这种情况下,可以在变量定义中嵌入变量名称,因为\v{month}\v{_123}在Java正则表达式中保证无效。 (其他正则表达式更加自由;他们会将大括号解释为文字大括号字符,因为{month}{_123}不能被解释为范围表达式。)

要确定的唯一方法就是测试它。这听起来像是一个很好的功能,如果不支持,也许你应该请求它。

+0

我在问这个评论,因为我试过了,它只是从字面上解释变量'\ v {monthmonth}'的值,这意味着它会试图将'\ v {month} \ v {month}'评估为正则表达式,为此它返回错误。 如何向UIMA申请此功能? 感谢您的回复,我不认为我们可以从变量名的限制中推断出某些东西。你是相当亲= D – justhalf

+0

该项目的[网站](http://uima.apache.org/)似乎提供了问题跟踪器,论坛等问题的常用链接。谁知道,你甚至可能在那里找到一个人谁知道一些事情。 ;) –

+1

...与像我这样的人相反,在花费30秒钟浏览文档后做野驴猜测。 (不确定它在原始评论中是否出现过这种情况。) –

相关问题