实现特征结构:使用啥数据类型?

Posted

技术标签:

【中文标题】实现特征结构:使用啥数据类型?【英文标题】:implementing feature structures: what data type to use?实现特征结构:使用什么数据类型? 【发布时间】:2010-06-11 01:13:57 【问题描述】:

简单来说,特征结构是属性值对的无序列表。

[number:sg, person:3 | _ ],

可以嵌入:

 [cat:np, agr:[number:sg, person:3 | _ ] | _ ],

可以对内容进行子索引并共享价值

[number:[1], person:3 | _ ],

其中 [1] 是另一个特征结构(也就是说,它允许重入)。

我的问题是:人们认为应该使用什么数据结构来实现以后访问值、执行 2 英尺之间的统一、“键入”它们等等。

这方面有一本完整的书,但它是用 lisp 编写的,它简化了列表处理。所以,我的选择是:列表的哈希、列表的列表或 trie。人们对此有何看法?

【问题讨论】:

【参考方案1】:

仔细想想什么是价值。 我会尝试可能可行的最简单的方法:

typedef struct value 
   enum  INT, BOOL, STRING, FEATURE_STRUCTURE  ty;
   union 
     int int;
     bool bool;
     char *string;
     struct fs *feature_structure;
    u;
 *Value;

typedef struct fs *  // list of pairs; this rep could change
    struct avpair *pair;
    Value value;
 *Feature_Structure;

struct avpair 
   const char *attribute;
   Value value;
;

你会想要一堆构造函数,比如

Value mkBool(bool p) 
  Value v = malloc(sizeof(*v));
  assert(v);
  v->ty = BOOL;
  v->u.bool = p;
  return v;

此时您可以开始做生意了。如果“对列表”结果不是正确的表示,您可以更改它。在不知道您计划什么操作或您对成本模型的期望是什么的情况下,我将从这里开始。然后,如果您需要转向更高效的方法,我可能会使用三元搜索树来表示特征结构,并为Value 保持相同的表示。

【讨论】:

以上是关于实现特征结构:使用啥数据类型?的主要内容,如果未能解决你的问题,请参考以下文章

我应该使用啥类型的数据结构来保存表行?

c语言里面的结构体是啥意思

数据结构与数据类型有啥区别?

PHP中int和integer有啥区别?

数据结构3

爬入结构类型的迭代器的通用生命周期参数