互动手工消歧技术设计

1、需求说明

1)根据解析程序的多个结果进行选择

2)对于解析程序无法完全确定结果的进行人工的指导选择,得到最后的结果

交互式消岐是在已有的语义结点(Semantic Node)的基础上获取该语义树的所有语言结点( Language Node),所有的LangugeNode的集合时一个偏序集,形成一个格结构,称为语言格(Language Lattice),然后在这个基础上再进行消岐。

 

2、系统架构设计

下层歧义定位

针对第一种需求:

是在已有的语义结点(Semantic Node)的基础上获取该语义树的所有语言结点( Language Node),所有的LangugeNode的集合时一个偏序集,形成一个格结构,称为语言格(Language Lattice),然后在这个基础上再进行消岐。 进行第一种情形消歧的架构设计入下:

 

  1. ①从语义结点中获取所有的语言结点
  2. ②从得到的语言结点形成一个语言格,从语言格至底向上的筛选出选择出具有歧异的语言结点。
  3.  ③在分析过程中,遇到具有歧异进行交互操作,用户选择出对于这个歧异语言结点分析正确的结果。
  4.  ④根据用户的选择,再进行进一步的歧异分析,直到选择出到根节点(也就是这个要分析的句子)的正确结果。

3、关键技术、数据结构、算法说明

3.1算法说明

1)  从语义结点中获取所有的语言结点

首先需要说明一个数据结构,这个数据结构应该包含该语言结点本身以及该语言结点的父节点。数据结构中父节点就是在选择该结点时可能出现的歧义。

每个Language Node都有唯一的Position Key,根据Position Key的唯一性,利用Hash方法,从Semantic Node中获取所有Language Node,并将该语言结点的父亲语言结点保存下来。同时,将在Semantic Node中最底端的叶子结点标记出来,方便下面的消岐工作。

说明:Semantic Node的叶子结点在语义方面已经是最底端的结点了,所以叶子结点肯定是没有歧义的,记录下来,减少后面消岐步骤的判断。

2)从得到的语言结点进行交互式消岐

算法f(一个语言结点)

构造一个正确的语言结点序列CorrectNodeList,这个集合中包括已经消岐或者不用消岐的语言结点,并且有一个标志该结点是否有被结合过。

A.初始话CorrectNodeLIst,将上一步得到所有的叶子结点都加入。

B.若该语言结点的父亲结点只有一个,分成两种情况:

 ①这个唯一的父节点Parent是根节点,即为需要Parse的语句,则显示结果。

 ②这个唯一的父节点不是根节点,则将该节点以及该父节点以及父节点所包含的其他子节点加入CorrectNodeList集合中。F(Parent)

B.该节点的父亲结点不是只有一个,针对该节点的每一个父亲结点,判断该父亲结点的孩子结点是不是都在CorrectNodeList,进行计数。并将都子节点都在CorrectNodeList中的父节点标记为需要交互的分支。

该计数值>1,则说明需要进行交互;否则尝试CorrectNodeList域中没有结合过的结点。进行算法F.

 

3)  进行交互操作

A.根据前面的算法显示出需要进行交互的结点,并显示出歧义的分支,也就是从

   2-B中得到的需要交互的分支。

B.户选择出正确的Parse方式后,获取被选择的正确的分支(结点的一个父亲语言结点)。如果选出来的分支就是该语句的根节点,则直接显示结果,结束;否则,标记选出来的分支结点的子结点已经被结合,并标记选出来的分支结点加入CorrectNodeList,算法F(选出来的分支结点)。

通过123)步骤,就可以经过多次的用户交互选择,得到正确的分析。

3.2数据结构说明

3.2.1

public class CorrectNode

{

    public string value;

   public bool IsScanned;

}

CorrectNode数据结构用来描述正确的节点的值以及这个节点是否被扫描过。

public class LangNode : Node

{

     public int AbsolutePos;

     public List Children;

     public bool IsValid;

     public LangNode Next;   

     public List Parents;

     public SemanticPosition Position;

     public LangNode Previous;

     public List SemanticNodes;

     public int SN;

     public SliceType Type;

     public List WordsPatternChartNodes;

...

    }

LangNode数据结构描述语义节点,LangNode内的Parents使得这些语义节点形成语义网格。方便遍历。

4、问题讨论

1.有些语句不能通过手动交互完成翻译

 比如,带逗号的语句