更好的数据库结构的数据库设计?

时间:2016-08-17 02:18:10

标签: python django data-structures nlp

我已经创建了一个双语词典应用 1 ,目前它非常简单,但我们将开始更全面地开发条目,并且我正在努力找出最好的它的数据库结构。我曾经使用的以前的字典项目使用了xml(因为字典条目主要是分层的),但我需要使用数据库。 2

这是典型的,中等复杂度的条目(简化一点):

<小时/> DAR
/ DAR /

  • 名词
    1. 房子,住所,住所
      ar-rājldhulad-dār,“那个男人进了房子。”

    2. rjaƷnalid-dār,“我们回到了家。”
  • 动词
    1. 转向
      dūrli-yamīn,“向右转。”
    2. 转身/约会

正如您所看到的,一个单词可以有多个词性,因此“词性”不能简单地成为Entry的属性,它必须与感官相关。每个pos可以具有多个感官(编号),当然每个感觉可以具有多个近似同义的翻译。感官也可能有例句(可能不止一个),但并非总是如此。考虑到入口部分如何相互关联,我想出了以下结构,使用了五个表:

Entry
-id
-headword
-pronunciation
-...

PartOfSpeech
-id
-entry (ForeignKey)
-pos

Sense
-id
-sense_number
-part_of_speech (ForeignKey)
-...

Translation
-id
-tr
-sense (ForeignKey)
-...

Example
-id
-ex
-ex_tr
-sense (ForeignKey)
-...

或者换句话说:

                                  _ Translation
Entry -- PartOfSpeech -- Sense --|
                                  - Example

这看起来很简单,对我来说很有意义,但我想知道它在执行中是否会过于复杂。例如,要显示一系列条目,我需要编写几个嵌套的for循环(for e in entries → for p in pos → for s in senses → for tr in translations) - 并且都需要反向查找!

我认为我甚至无法在Django管理员中编辑整个条目(除非它允许您以某种方式执行内联内联的内联)。无论如何,我打算建立一个编辑器界面,但是能够在你想要的时候检查管理站点上的内容是很好的。

有更好的方法吗?我觉得我必须有一些聪明的东西。

谢谢, 卡伦

<小时/> 1 如果你很好奇:tunisiandictionary.org。在其简单的当前形式中,它只有两个表(Entry,Sense),翻译只用逗号描述在一个字段中。哪个不好。
2 有两个原因:1)因为它是我用Python / Django编写的Web应用程序,2)因为我讨厌xml。

2 个答案:

答案 0 :(得分:1)

您也可以在sql数据库中模拟保存词典。有人写过这个很棒的帮手:

Django Dictionary Model

我也在我的项目中使用它。

答案 1 :(得分:-1)

为什么不使用python dictionary数据结构(或json / bson)和mongodb

在python中,它比xml更方便。

例如,您可以只使用一个python dict对象列表来表示整个字典。每个元素的结构可以如下:

[{
    "_id": "1",
    "word": "étudier",
    'definitions': {
        [(
            "v",
            "to study",
            "j'étudie français",
            "I study french"
        ), ...
        ]
    }
}, ...]

其中定义是元组列表(第一个元素是词性,第二个元素是定义,第三个元素是第一语言的例子,第四个元素是该例子的翻译)。

然后,您可以轻松地在mongodb数据库中对其进行索引。

这是一个非常简单的结构,您不需要使用外键处理过于复杂的数据库。使用mongodb,检索单词的定义就像

一样简单

record = db.collection.find({'word':'étudier')