1

我正在编写一个使用CC-CEDICT的应用程序,CC-CEDICT是 CC 许可的中英词典。

该词典仅作为压缩文本文件 (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/

我如何知道哪些记录已更新?当翻译是一个完全改变的单词时,这一点非常明显。

我正在制定关于如何键入这本字典的策略。到目前为止,我最好的想法是将 (Simplified, Traditional) 作为键,并将重复项视为特殊情况 - 也许在他们自己的表中?

4

2 回答 2

1

问题是一种观点。

您说您的记录没有密钥,但实际上整条记录都是密钥- 假设您没有相同的重复记录。

因此没有更新,只有插入删除

您可以跟踪哪些记录被删除,哪些记录被插入,以突出字典中的更改。


如果您真的想将定义替换视为更新,那么您将不得不提出一个方案,该方案 (a) 为记录创建唯一键,并且 (b) 允许您识别何时应考虑新的定义列表对现有定义列表的修改。

(a) 部分很简单,添加您自己的代理键。这在所有定义中可能是唯一的,或者只是在(简体、繁体)的组合中是唯一的。

(b) 部分更难。你在什么时候说“姓施”与“姓施”有关?我建议提出某种产生数字分数的文本比较函数。为这个分数选择一个阈值,在这个阈值上你称之为更新而不是删除和插入。这将是任意的,但您可能会发现两个人可能会就什么是更新和什么不是从一个案例到另一个案例存在分歧。

于 2013-02-10T13:19:13.977 回答
0

这不是解决方案,但可能会为您(或其他人)提供一些想法。

将其建模为层次结构怎么样,单词->含义->翻译。计算翻译的哈希值,将所有翻译的哈希值相加并将其存储在相应的“含义”记录中,然后将所有含义的哈希值相加并将其存储在 Word 记录中。(是的,这是非规范化的)。

您每次都必须重新计算文件中所有记录的所有哈希值。然后,您可以简单地将当前存储的“单词”哈希值与您刚刚计算的哈希值进行比较。如果它们不同,则某些情况发生了变化。要么有新的含义,要么有新的翻译或翻译被删除,等等。然后,您可以完全删除该词(级联)并重新插入新的“子树”。如果您想使事情复杂化,您也可以进入层次结构并尝试准确检测发生了什么变化。

于 2013-02-10T11:16:59.227 回答