【问题标题】:Relational database design for hierarchical data?分层数据的关系数据库设计?
【发布时间】:2017-06-27 00:31:55
【问题描述】:

我正在尝试设计一个数据库来充当语言词典,其中每个单词不仅与其定义相关联,还与其语法“分类单元”相关联。例如,它应该看起来像这样:

"eat": verb.imperative
"eat": verb.present
"ate": verb.past
"he": pronoun.masculine.singular
"she": pronoun.feminine.singular
"heiress": noun.feminine.singular
"heirs": noun.masculine.plural
"therefore": adverb
"but": conjunction

似乎保存这种语法“分类法”的自然数据结构应该是某种树或图。虽然我还没有考虑清楚,但我认为应该可以更轻松地执行类型的查询

plural OF masculine OF "heiress" -> "heirs"

然而,在这一点上,我只是想提出一种效率最低的方法来将这样的字典存储在常规关系数据库(即 LibreOffice Base)中。您建议数据模式应该是什么样的?有没有比蛮力方法更有效的方法,我的布尔列与语法类型和子类型一样多?例如,“she”对于代词、女性和单数列是正确的,但对于所有其他列(动词、副词、连词等)是错误的?

【问题讨论】:

  • 在你想出一个或多个直截了当的表征之前,不要担心你的状态表征的特定属性。对于这样的设计,您的研究揭示了其他地方是如何模拟类似功能的? PS请在发布之前始终用谷歌搜索许多带有相关标签的问题的简洁明确的具体陈述。

标签: database database-design libreoffice-base


【解决方案1】:

这是一个非常开放的问题,有很多应用和很多相关研究。就我用过的软件给点建议吧。

一列是词位,例如“吃”。第二列将给出词性,在上面的数据中,它是一个字符串或其他标识符,显示它是动词、代词、名词、副词还是连词。

为动词信息创建另一个表可能是有意义的。例如,时态、方面和情绪可能每个都是单独的列。但是这些列只对动词有意义。对于名词表,列将包括数字(单数、复数)和性别,以及是否是count or mass noun。代词还包括人称(第一人称、第二人称或第三人称)。

您是否打算包含每个单词的所有形式?例如,这个数据库是否会存储“eats”和“eating”以及“jumps”和“jumping”?存储规则如“-s”代表现在单数,“-ing”代表渐进式规则效率更高。然后如果有例外,例如“吃”,它可以被描述为具有“吃”+“-ed”的基本形式。该规则将归入“吃”词位,并且不会有单独的“吃”条目。

还有一些规则,例如复数会将以 y 结尾的单词更改为 -ies。这将使用复数名词后缀(“-s”),而不是单个动词。

考虑到这些事情,我对您的问题提供了一个更具体的答案:不,我不认为这些数据最好用分层来描述,也不能用树或图来描述,而是用分析和关系来描述。对于此类相当简单的项目,LibreOffice Base 将是一个合理的选择,它使用宏来帮助处理。

所以对于:

"heiress" -> masculine plural = "heirs"

首先要做的是将“继承人”分析为“继承人”+女性。然后通过组合“heir”和“-s”组成所需的词形。

我打算添加一个相关软件的列表,例如 Python NLTK,但一方面,可用软件的列表几乎是无穷无尽的,另一方面,软件推荐与 stackoverflow 无关。

【讨论】:

    猜你喜欢
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多