2010-05-27 76 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)