1

CC ライセンスの中英辞書であるCC-CEDICTを使用するアプリケーションを作成しています。

ディクショナリは、次の形式のエントリを含む圧縮テキスト ファイル (4 MB)としてのみ利用できます。

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/

私の問題を説明するために、これらの行を意図的に選択しました。データには、個々の単語を識別できる識別可能なキーはありません。

英語の定義は変更される可能性があり、辞書は常に更新されますが、1 回の更新で 2 つの定義が変更されると仮定すると、次のダウンロードには次の行が含まれます。

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

どのレコードが更新されたかを確認するにはどうすればよいですか? これは、翻訳が完全に変化する単一の単語である場合に非常に顕著です。

私は、この辞書をキーにする方法について戦略を立てています。これまでのところ、私の最善のアイデアは、(Simplified、Traditional) をキーとして取り、重複を特別なケースとして扱うことです-おそらく独自のテーブルで??

4

2 に答える 2

1

問題は視点の問題です。

レコードにはキーがないと言っていますが、実際にはレコード全体がキーです-同一の重複レコードがないと仮定します。

したがって、挿入削除のみの更新はありません

ディクショナリの変更を強調表示するために、どのレコードが削除され、どのレコードが挿入されたかを追跡できます。


定義の置換を更新として本当に扱いたい場合は、(a) レコードの一意のキーを作成し、(b) 新しい定義リストをいつ検討する必要があるかを認識できるようにするスキームを考え出す必要があります。既存の定義リストの変更。

パート (a) は簡単です。独自の代理キーを追加します。これは、すべての定義で一意である場合もあれば、(簡体字、繁体字) の組み合わせで一意である場合もあります。

パート (b) は難しいです。「姓の市」は「姓の市」とどの時点で関連していると言えますか? 数値スコアを生成する何らかのテキスト比較関数を考え出すことをお勧めします。削除と挿入ではなく、更新と呼ぶこのスコアのしきい値を選択します。これは恣意的ですが、いずれにせよ、あるケースから別のケースへの更新とそうでないものについて、2 人の人が意見を異にする可能性があることに気付くかもしれません。

于 2013-02-10T13:19:13.977 に答える
0

これは解決策ではありませんが、あなた(または他の人)にいくつかのアイデアを与える可能性があります。

これを階層としてモデル化するのはどうですか、Word->Meaning->Translation。翻訳のハッシュを計算し、すべての翻訳のハッシュ値を合計して対応する「意味」レコードに保存してから、すべての意味のハッシュ値を合計してWordレコードに保存します。(はい、これは非正規化されています)。

毎回、ファイル内のすべてのレコードのすべてのハッシュ値を再計算する必要があります。次に、現在保存されている「単語」のハッシュ値を、計算したばかりのハッシュ値と単純に比較できます。それらが異なる場合、何かが変更されています。新しい意味があったか、新しい翻訳または翻訳が削除されたかなど。次に、単語を完全に(カスケードして)削除して、新しい「サブツリー」を再挿入することができます。物事を複雑にしたい場合は、階層に降りて、何が変わったかを正確に検出しようとすることもできます。

于 2013-02-10T11:16:59.227 に答える