实现特征结构:使用啥数据类型?
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
保持相同的表示。
【讨论】:
以上是关于实现特征结构:使用啥数据类型?的主要内容,如果未能解决你的问题,请参考以下文章