【问题标题】:Latin inflection:拉丁语转折:
【发布时间】:2011-07-27 17:58:30
【问题描述】:

我不知道这里是否有人会说(或写)“死语言”拉丁语。但也许你甚至可以在不懂这种语言的情况下帮助我......

我有一个单词数据库(包括名词和动词)。现在我想生成这些名词和动词的所有不同(变形)形式。这样做的最佳策略是什么?

由于拉丁语是一种高度屈折变化的语言,因此有:

a)the declension of nouns

b)the conjugation of verbs

有关动词变位(“mandare”)的示例,请参阅此翻译页面:conjugation

我不想手动为所有单词输入所有这些表单。那么如何自动生成它们呢?最好的方法是什么?

  • 如何使所有单词变形的复杂规则列表
  • 贝叶斯方法
  • ...

非常感谢您!

编辑(可能的解决方案?):

我现在发现有一个名为“William Whitaker's Words”的程序。它也会为拉丁词创建屈折变化,所以它正是在做我想做的事。

Wikipedia 说该程序的工作方式如下:“Words 使用一组基于自然前置、in- 和后缀、变格和共轭的规则来确定条目的可能性。因此分析单词结构的方法,不能保证这些单词曾经在拉丁文学或演讲中使用过,即使程序找到了给定单词的可能含义。”

该程序的源代码也可在here 获得。但我真的不明白这是如何工作的。你能帮助我吗?也许这将是我的问题的解决方案...

【问题讨论】:

    标签: parsing inflection latin


    【解决方案1】:

    您可以执行类似于 hunspell 字典格式的操作(请参阅 http://www.manpagez.com/man/4/hunspell/

    您定义了 2 个表。一个包含词根(永远不变的部分),另一个包含给定类的修改。对于给定的类,对于每个变格(或共轭),它告诉在根的末尾(或开头)添加哪些字符。它甚至可以指定替换给定数量的字符。现在,要获得一个特定变格的词,您需要根据其所属的类进行转换,然后瞧!

    例如,对于mandare,根是ma​​nd,并且类将包含像oas这样的后缀ate, amous, atis... 用于主动指示性现在时。

    【讨论】:

    • 非常感谢您的回答 :) 问题是并非所有单词都遵循“mandare”之类的规则。这是一个规则动词。但是有很多不规则动词,比如“tollere, tollo, sustuli, sublatum”。
    • 对于这种例外,您可以为每个特殊单词定义一个特定的类,其中某些变格的转换可能是用某些东西替换整个词根。甚至可以考虑类的层次结构,其中子类只记录与父类的差异(告诉它与父类相同,除了这个和那个)。
    • 绝对可以采用您的方法并将其付诸实践。可能有比您的方法更复杂的方法,但您的方法肯定会奏效。谢谢!
    【解决方案2】:

    也许this 会有所帮助

    【讨论】:

      【解决方案3】:

      我将以名词为例,但它也适用于动词。

      首先,我将创建两个类:RegularIrregular。对于Regular 名词,我将为三个变格创建三个类,并让它们都实现一个 Declensable(或者无论如何这个词是英文:)接口(@98​​7654324@)。该接口将定义两个static enums(NOMINATIVEVOCATIVE 等,以及SINGULARPLURAL)。 所有都将有一个根字符串和一个静态后缀哈希图。然后,FirstDeclension#get (case, number) 方法将根据 hashmap 附加正确的后缀。

      Irregular 类必须为每个单词定义一个本地哈希图,然后实现相同的 Declensable 接口。

      这有意义吗?

      附录:澄清一下,class Regular 的构造函数是

      public Regular (String stem) {
          this.stem = stem
      }
      

      【讨论】:

      • 感谢您的回答。确实有道理;)但是您的答案中缺少的是单词可以有不同的词干,例如:“dominus”、“puer”和“ager”都属于 o-declension。但它们的词干是“domin”、“puer”和“agr”。所以你需要茎,没有它们就什么都做不了。
      • 对不起,我称它们为“根”而不是“茎”。那是我的西班牙语开始了......“所有都将有一个根字符串和一个后缀的静态哈希图。”在“ager”中,词干应该是“ag”,而不是“agr”,因为“ager”不包含“农业”。为了这个分类,这将是一个不规则的。
      • 顺便说一句,多年前我学了一些拉丁语,以至于无法记住每一个微小的可能性......我希望我能记住更多。因此,对于“奇怪”的情况,层次结构可能会变得更复杂一些,但在最坏的情况下,总是有可能有一个带有空根和哈希中完整单词的不规则实例(尽管我不记得有任何在特定变格中以不同字母开头的单词)。
      • 感谢额外的 cmets 和您的“附录” :) 我确实理解了您写的每一个字,没问题。 “root”而不是“stem”是完美的——我认为是一样的。但我认为你想为变格保留词根,而不是单个词。
      【解决方案4】:

      也许,您可以在实现中遵循 AOT 的路线。 (它在 LGPL 下。)

      AOT 中没有拉丁语形态,只有俄语、德语、英语,其中俄语当然是与拉丁语一样复杂的屈折形态的一个例子,因此 AOT 应该准备好作为实施它的框架。

      不过,我认为,在继续编程之前,必须为已经明确定义的形态学建立一个精细的、精确的形式系统。至于俄语,我想,大部分工作的形态计算机系统都是基于 Andrey Zalizniak 对俄语形态的认真分析以及俄语和相关著作的语法词典。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-17
        • 2022-06-26
        • 2020-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        相关资源
        最近更新 更多