2010-05-27 48 views
1

我正在研究一个应用程序,该应用程序会为输入文本提供替代字词/短语。我怀疑什么可能是同义词表的好设计。同义词表的替代设计?

设计考虑:

  1. 数同义词是可变的,即football具有一个同义词(soccer),但in particular具有两个(particularlyspecifically
  2. 如果football是同义词soccer,关系也存在相反的方向。
  3. 我们的目标是,查询一个单词,并寻找它的同义词
  4. 我们要保持桌面小并加入易新词

什么在我脑海中是一个两列的设计,

  • col a = word
  • col b = delimited list of synonyms

有没有更好的选择?如何使用两个表格,一个用于文字,另一个用于关系?

编辑:
在阅读答案后,我想到了另一种方法。它使用一个包含所有同义词的单个列表,每个词都包含在单词边界标记中。随着我的意思是像
|in particular|particularly|specifically|
然后我查询表
SELECT * FROM synonyms WHERE word LIKE '%|specifically|%'
而在代码中,我垃圾桶前面和尾部| S和做的分裂,并有同义词。

有什么不好,我没有看到?

+0

我也想知道如果这种方法(最后一个)是好的。 – Jerry2 2010-10-20 09:55:05

回答

-1

在阅读答案后,我想到了另一种方法。它使用一个包含所有同义词的单个列表,每个词都包含在单词边界标记中。随着我的意思是像

|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]); 
4
  • COL一个字=和
  • 列B =同义词

可怕的想法的分隔列表。每次添加同义词时,都必须在两个地方进行更改。只需添加对

(in particular, particularly) 
(in particular, specifically) 

和执行,在(a,b)a < b。这样,就不会有冗余。

使用两个表格也很好,也许你会节省内存。但是,您将在查询中再加入一次。

2

由于三个原因,我会使用两个表格方法,一个用于单词,另一个用于关于单个表格方法的关系。

  1. 单词表中不会有重复单词。
  2. 执行单词与其同义词之间的双向关系更容易。
  3. 编写可用于分隔列表的SQL语句更繁琐。

Word表格:2列编号

关系表:2列WordId1WordId2

两个synomyms词将有一个排的Word表格和Relation表中的两行。

1

你的一张桌子的设计会有很多重复的同义词列表,但这可能对你很好。

你可能要考虑两个表的设计,绘制的所有单词“规范变化”(如一个字)或ID(数字):

syn1 -> 0x1234eef3 
syn2 -> 0x1234eef3 

则表映射的id于上述列表同义词:

eef3 -> (syn1, syn2)