代码之家  ›  专栏  ›  技术社区  ›  codekaizen

解析半结构化数据-我可以使用任何分类器吗?

  •  1
  • codekaizen  · 技术社区  · 14 年前

    我有一套半正规格式的文件。行通常由新行字符分隔,每行的主要组件由空格分隔。一些例子包括一套家具组装说明、一套目录、一套食谱和一套银行对账单。

    问题在于,每个集合中的每个样本与其对等成员之间的差异使得regex解析不可行:一个项目的数量可能在项目名称之前或之后,相同的项目在样本之间可能有不同的名称,行之间可能存在说明性文本或注释等。

    我使用分类器(神经网络、贝叶斯、GA和GP)处理整个文档或数据集,但不从文档中提取项目并在上下文中对它们进行分类。能做到吗?有更可行的方法吗?

    2 回复  |  直到 9 年前
        1
  •  2
  •   Ira Baxter    14 年前

    如果您的数据具有结构,可以使用语法来描述其中的一些结构。(传统上,你使用语法来识别它们能识别什么,通常是太多了,并且额外的语法检查来删去语法不能消除的内容)。

    如果您使用的语法可以运行并行的潜在解析,这样就消除了不可行的解析, 您可以直接解析不同的顺序。(GLR解析器可以很好地做到这一点)。

    想象你有描述数量的数字,描述各种对象的名词,以及动作的动词。 那么,可以接受不同项目顺序的语法可能是:

     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.
    

    您可以通过添加一个外部约束来消除这一点,即参与者必须是人。

        2
  •  0
  •   carlosdc    14 年前

    有很多方法可以做到这一点。这是一个活跃的研究领域,叫做: information extraction . 尤其是从半结构化来源中提取信息。