我正在开发一个应用程序,它为输入文本提供替代词/短语。对于同义词表的好设计,我有疑问。
设计考虑因素:
同义词的
football有一个同义词(soccer),而in particular有两个(particularly,in particular football是soccer的同义词,这种关系也在相反的方向上存在。H 112我们的目标是查询一个单词并找到它的同义词H 213H 114,我们希望保持小的表,使添加新单词很容易H 215G 216>G 216
我脑海中想到的是两栏设计
col a = word andcol b = delimited list of synonyms还有更好的选择吗?用两张桌子怎么样,一张是用词,另一张是关系?
编辑:
读完答案后,我想到了另一种方法。它使用的是一个列表,其中包含所有同义词单词,每个同义词都封装在word边界标记中。我的意思是
|in particular|particularly|specifically|
然后我会用
SELECT * FROM synonyms WHERE word LIKE '%|specifically|%'
在代码中,我丢弃了前面和后面的|s,进行了拆分,并使用了同义词。
有什么不好的吗,我没看到?
发布于 2010-05-30 14:48:10
读完答案后,我想到了另一种方法。它使用的是一个列表,其中包含所有同义词单词,每个同义词都封装在word边界标记中。我的意思是
|in particular|particularly|specifically|
然后我会用
SELECT * FROM `synonyms` WHERE `word` LIKE '%|$word|%'在代码中,我删除了前面和后面的|s,并做了一个explode,并具有同义词:
$synonyms = $row['word'];
$synonyms = explode('|', substr($synonyms, 1, -1));
unset($synonyms[$word]);发布于 2010-05-27 02:19:08
糟糕的主意。每次添加同义词时,必须在两个地方更改它。只需加对
(in particular, particularly)
(in particular, specifically)并在(a,b)和a < b中强制执行。那样的话,就不会有冗余了。
使用两个表也可以,可能会节省内存。但是,您的查询中还会有一个加入。
发布于 2010-05-27 02:19:12
由于三个原因,我将使用两种表格方法,一种用于文字,另一种用于关系,而不是单一表格方法。
Word表:2列Id,Word
关系表:2列WordId1,WordId2
具有两个synomym的单词将在Word表中有一行,在Relation表中有两行。
https://stackoverflow.com/questions/2918068
复制相似问题