2013-02-10 36 views
1

我正在寫一個使用CC許可的中英文字典CC-CEDICT的應用程序。跟蹤數據中沒有主鍵的變化

詞典僅適用於以下列格式條目爲zipped text file (4MB)

Traditional Simplified [pin1 yin1] /English equivalent 1/equivalent 2/ 

這是示例數據:

是 是 [shi4] /is/are/am/yes/to be/ 
昰 是 [shi4] /variant of 是[shi4]/used in given names/ 
時 時 [Shi2] /surname Shi/ 
時 時 [shi2] /o'clock/time/when/hour/season/period/ 

我選擇那些線故意來說明我的問題。數據中沒有可以識別單個詞的可辨別鍵。

英語的定義可以改變,做作爲字典在不斷更新,但在一個更新的假設時的兩個定義時變化,所以接下來的下載包含線路:

時 時 [Shi2] /last name Shi/ 
時 時 [shi2] /o'clock/time period/when/hour/season/ 

我如何告訴哪些記錄已更新?當翻譯是完全變化的單個單詞時,這真的很明顯。

我在一個策略之後,如何能夠鍵入這本詞典。到目前爲止,我最好的想法是將(簡體,繁體)作爲關鍵,並將重複作爲一種特殊情況處理 - 在他們自己的表中可能是?

+0

你不能 - 如果你想跟蹤更改 - 你**必須有一個主鍵。任何真正的數據表都應該有主鍵...... – 2013-02-10 10:43:14

回答

0

這不是一個解決方案,但可能會給你(或其他人)一些想法。

如何建模爲一個層次結構,Word-> Meaning-> Translation。 計算翻譯的散列值,對所有譯文的散列值求和並將其存儲在相應的「含義」記錄中,然後對所有含義的散列值求和並將其存儲在Word記錄中。 (是的,這是非規範化的)。

您必須每次重新計算文件中所有記錄的所有散列值。然後,您可以簡單地將當前存儲的「單詞」散列值與您剛計算出的散列值進行比較。如果他們不同,事情就會改變。要麼有新的含義,要麼刪除新的翻譯或翻譯等等。然後,您可以完全刪除該單詞(級聯)並重新插入新的「子樹」。如果你想使事情複雜化,你也可以下降到層次結構中,並試圖準確地檢測到發生了什麼變化。

1

這個問題是一個角度。

你說你的記錄有沒有鑰匙,但實際上全程記錄是關鍵 - 假設你有沒有相同的重複記錄。

因此有沒有更新只有插入刪除

您可以跟蹤哪些記錄被刪除,哪些被插入,以突出顯示字典中的變化。


如果你真的治療定義爲替代更新,那麼你將不得不拿出是:(a)記錄創建一個唯一的密鑰和(b)可以讓你的方案確定何時應將新定義列表視爲對現有定義列表的修改。

部分(一)很容易,添加自己的代理鍵。這可能在所有定義中都是唯一的,或者僅限於(簡體,繁體)的組合。 (b)較難。你什麼時候說「石氏」與「姓氏」有關?我建議想出一些產生數字分數的文本比較函數。爲此分數選擇一個閾值,在此處將其稱爲更新,而不是刪除和插入。這將是任意的,但你可能會發現兩個人可能不同意什麼是更新,什麼不是從一種情況到另一種情況。