解析半结构化数据 - 我可以使用任何分类器吗?
问题描述:
我有一套具有半正规格式的文档。行通常由换行符分隔,每行的主要组成部分由空格分隔。一些例子是一套家具装配说明,一套目录,一套配方和一套银行对账单。解析半结构化数据 - 我可以使用任何分类器吗?
问题在于,每组中的每个样本与其同级成员的不同之处在于使RegEx解析不可行:项目的数量可能在项目名称之前或之后出现,相同的项目在样本之间可能有不同的名称,行之间可能存在说明文字或注释等。
我已经使用了分类器(Neural Nets,Bayesian,GA和GP)来处理整个文档或数据集,但不是从文档中提取项目并对它们进行分类在上下文中。这可以做到吗?有没有更可行的方法?
答
如果您的数据有结构,可以说您可以使用语法来描述某些结构。 (通常你使用语法来识别他们可以做什么,通常是太多,并且使用额外的语法检查来删除语法不能消除的东西)。
如果您使用可以运行并行潜在语法的语法,这样可以在语法不可行时消除语法分析,您可以直接解析不同的语句。 (GLR解析器可以很好地完成这项工作)。
成像您有NUMBERS描述数量,描述各种对象的NOUNS和操作的VERBS。 然后可以接受的项目不同的顺序语法可能是:
G = SENTENCE '.' ;
SENTENCE = VERB NOUN NUMBER ;
SENTENCE = NOUN VERB NUMBER;
VERB = 'ORDER' | 'SAW' ;
NUMBER = '1' | '2' | '10' ;
NOUN = 'JOE' | 'TABLE' | 'SAW' ;
此示例极其简单,但它会处理:
JOE ORDERED 10.
JOE SAW 1.
ORDER 2 SAW.
它还将接受:
SAW SAW 10.
您可以通过添加演员必须是人的外部约束来消除此情况。
谢谢艾拉 - 这清理了很多。你有没有用于生成GLR解析器的指针,或者更多地解释“外部”(例如外部约束或外部语法检查)? – codekaizen 2010-11-04 00:22:45
Bison将生成GLR解析器。您可能可以使用Elkhound http://scottmcpeak.com/elkhound。作为一般背景,您可以从http://en.wikipedia.org/wiki/GLR_parser了解更多信息。关于外部约束:通常语法规则具有相关的语义行为。为了满足我们的需求,我们在15年前推出了自己的GLR解析器,其中之一就是使语义操作可能反对(并因此否定减少)。你可以附加约束条件,例如坚持第二个SENTENCE规则,即NOUN必须是一些演员,而SAW则不是。 – 2010-11-04 01:59:07