2011-11-30 144 views
3

我打算組合一個可以用來查詢單詞同義詞的數據庫。數據庫最終會變成巨大的,所以我們的想法是讓事情保持快速。同義詞數據庫所需的設計建議

我一直在想如何做到這一點,但是我的數據庫設計技巧目前還沒有達到要求。

我最初的想法是將每個單詞存儲在一張表中,然後是另一個表格,其中每個單詞可以鏈接到另一個單詞,並且該表格可以被查詢。

我正在開發的應用程序允許用戶突出顯示一個單詞,然後鍵入或從數據庫中爲該單詞選擇一些同義詞。應用程序從用戶輸入中學習,所以如果有人突出顯示「car」並鍵入「motor」,數據庫將被更新,以便在關係不存在的情況下將其鏈接起來。

我不想要發生的是用戶輸入「shop」一詞並將其鏈接到單詞車。所以我想我需要爲每個關係增加一些權重。

最終會使用用戶輸入的同義詞,以便他們可以自動選擇與某個單詞一起使用的常用同義詞。較低的重量詞將不會被顯示出來,所以商店永遠不會是汽車的同義詞,除非它具有很高的重量,並且沒有人會這樣做。

以上是否正確?你能提供任何建議或改進?

+0

什麼類型的應用程序是這樣嗎?桌面?網?此外,這是用於一般同義詞,還是針對特定的域,其中可能沒有可用的常用同義詞表作爲基準? – cdeszaq

+0

我喜歡這個詞去同義詞表關係。如果輸入的是一個單詞而不是選定的單詞,那麼如果關係(「shop」代替「car」)的關係是由多於X個人輸入的話,那麼可能只會將關係添加到數據庫中? –

+0

這是一個Web應用程序。 @JohnieKarr這就是我所想的越多,它被賦予的權重就越大,直到它有足夠的權重出現在列表中。 –

回答

1

從關係數據庫的角度來看,您真正需要的是單詞之間的多對多關係,可能還有關於關係的其他數據。

關係表看起來是這樣的:

WORD_TABLE 
---------- 
id 
word 

RELATION_TABLE 
-------------- 
word_1_id 
word_2_1d 
weight 

我將建立它的出路是做的方式,用戶可以投票(向上或向下)的各種詞對。這將以相當簡單的方式爲您提供所需的權重。您可能還希望預先使用同義詞庫或某些其他類似來源的數據來填充它,以涵蓋已知的同義詞併爲您的用戶減少工作量。

此外,這種數據結構的另一個術語是加權圖。一般來說,關係數據庫並不是特別擅長建模圖表(他們可以做到,但有更好的選擇)。您可能想要查看圖形數據庫(Neo4J想到)作爲關係數據庫的替代方案。

0

它似乎是在同一個實體集的實體內的多對多關係。我會爲所有單詞和另一個關係表提供一張表格。關係表將有兩個foriegn鍵字表。該表會像

Word (w_pk, ....) 
Synonym (fk1_to_w_pk, fk2_to_w_pk, weight) 

Synonym當添加條目,你必須檢查

- fk1_to_w_pk ≠ fk2_to_w_pk 
- both (fk1_to_w_pk, fk2_to_w_pk) and (fk2_to_w_pk, fk1_to_w_pk) do not already exist in Synonym 
0

這應該很好地工作:

create table suggestions (
    word varchar(255), 
    suggestion varchar(255) not null, 
    weight float not null default 1.0, 
    primary key(word, suggestion, weight) 
); 
  • 當用戶提出一個詞,你用默認權重將它添加到列表中。
  • 當另一個用戶建議這個單詞時,可以用1.0來增加體重。
  • 要基於話建議建議至少3次: select suggestion from suggestions where word = ? and weight > 3 order by weight desc.
+0

這並不能解釋同義詞部分是如何工作的。 – mlissner