2016-09-28 72 views
1

我想从多个标题标记标题级别(1级,2级,3级)。使用字体大小来自HTML的信息。首先,我把使用正则表达式的字体大小一样Uima Ruta标题级别

"<span style=\"font-family:\'(.+?)\'"->1=fontfamily; 
"<span style=\"font-family(.+?)font-size:\'(.+?)\'"->2=font size; 

现在我需要使用的字体大小信息,并基于其标签标题级别所有这些标题的大小进行比较。

输入:

<span style="font-family:'Times New Roman'; font-size:'14pt'"><span class="">MATERIALS AND METHODS</span></span> 
<span style="font-family:'Times New Roman'; font-size:'12pt'"><span class="">Chemicals</span></span> 
<span style="font-family:'Times New Roman'; font-size:'10pt'"><span class="">HILIC-MS Profiling of Metabolites</span> 

回答

0

你可以做这样的事情(使用UIMA鲁塔2.5.0测试):

ENGINE utils.HtmlAnnotator; 
TYPESYSTEM utils.HtmlTypeSystem; 

CONFIGURE(HtmlAnnotator, "onlyContent" = false); 
EXEC(HtmlAnnotator, {TAG}); 

DECLARE FontFamily; 
DECLARE FontSize; 
DECLARE Heading (INT level, INT size); 

"<span style=\"font-family:\'(.+?)\'"->1=FontFamily; 
"<span style=\"font-family(.+?)font-size:\'(\\d+.+?)\'"->2=FontSize; 

INT size; 
RETAINTYPE(MARKUP); 

SPAN{-PARTOF(Heading) -> Heading, Heading.size = size} 
    <-{FontFamily # FontSize{PARSE(size)};}; 
# h:Heading{-> size = h.size}; 
h:Heading{h.size == size -> Heading.level = 1}; 
h1:Heading{h1.level != 0} # h2:Heading.level == 0 
    {h1.size>h2.size -> h2.level = (h1.level + 1)}; 
h1:Heading{h1.level != 0} # h2:Heading.level == 0 
    {h1.size==h2.size -> h2.level = h1.level}; 
RETAINTYPE; 

这些规则使用HtmlAnnotator,这需要一定程度的有效HTML。我需要将<html>标签添加到文档才能使其正常工作。

这些规则并不是最优的,只是一个起点。您应该使用的实际规则主要取决于用例以及它们需要的强大程度。

免责声明:我是UIMA Ruta的开发商