【问题标题】:Natural language grammar and user-entered names自然语言语法和用户输入的名称
【发布时间】:2023-05-03 06:49:02
【问题描述】:

一些语言,尤其是斯拉夫语言,会根据语法上下文改变人名的结尾。 (对于那些了解语法或学习过对单词(例如德语或俄语)执行此操作的语言的人,并且为了帮助搜索关键字,我说的是名词变格。)

这可能是最简单的一组示例(用波兰语,以保存整个不同字母表的问题):

  1. Dorothy 看到了猫 — Dorota zobaczyła kota
  2. 猫看到了多萝西 — Kot zobaczył Dorotę
  3. 这是 Dorothy 的猫 - 开玩笑说 Doroty
  4. 我把猫给了 Dorothy — Dałam kota Dorotie
  5. 我和 Dorothy 去散步了 — Poszłam na spacer z Dorotą
  6. “你好,多萝西!” — “威塔姆,多罗托!”

现在,如果在这些示例中,此处的名称是由用户输入的,那么就会引入一个语法噩梦的世界。重要的是,如果我选择 Katie (Kasia),examples are not directly comparable — 3 和 4 都是 Kasi,而不是 *Kasy 和 *Kasie — 男性名字将是 wholly different again

我猜以前有人处理过这种情况,但是我的 Google-fu 今天似乎很弱。我可以找到很多关于自然语言处理的链接,但我认为这正是我想要的。需要明确的是:每个用户我只会有一个用户输入的名称,我需要将它们拒绝为已知配置 - 我将有一个本地化文本,其中包含诸如 {name nominative} 和 @987654330 之类的占位符@,为了争论。我真的不想对文本进行词法分析来解决问题,我只需要拒绝那个用户输入的名称。

任何人对如何执行此操作有任何建议,或者我需要开始致电本地化机构;o)


有兴趣的进一步阅读(全部在*上):

免责声明:我知道这在许多其他语言中都会发生;突出显示斯拉夫语言仅仅是因为我有一个项目将本地化为一些斯拉夫语言。

【问题讨论】:

  • 只是一个简短的说明:(对于那些了解语法或学习过对单词执行此操作的语言的人,例如德语或俄语,并帮助搜索关键字,我说的是名词变格.) 你确定这是用德语完成的吗??
  • 在德语中,普通名词会根据大小写而变化,而专有名词(包括人名)则不会。
  • @Sebi:汤米是正确的。名词(和代词)变格在德语中确实会发生,但不会发生在地名或人名中。例如,德语中的等价物是 der Tisch > den Tisch > des Tisches > dem Tische。
  • 是的,当然,我在谈论他的例子中的地名和个人姓名
  • 自然语言处理正是您想要的。毕竟,您正在处理自然语言。

标签: internationalization nlp grammar linguistics


【解决方案1】:

在我看来,您想要一个用于修饰的形态引擎。简而言之,他们可以进行从表面形式(我们读和写的)到某种抽象形式的分析和生成,例如“Dorothy + FEM + DAT”,同时考虑到变格和音系。

看看这里(我不是波兰语,但它看起来不错,最重要的是它有下载 :)) http://nlp.ipipan.waw.pl/~wolinski/morfeusz/

Here 是该主题的一些介绍性内容。

【讨论】:

  • 我想我在这里有点过分了。我认为你是对的——我需要某种形态引擎(我实际上需要的是俄语,而不是波兰语,我只在示例中使用了波兰语,以避免在示例中将人们与西里尔语混淆)。但我不需要像形态分析那样复杂的东西。我知道输入文本可以被假定为一个名字(如果需要,我们可以询问用户的性别)。我只需要能够做类似的事情:Kasia + FEM + GEN = Kasi 但 Dorota + FEM + GEN = Doroty。我认为一个完整的形态引擎在这里可能会有点矫枉过正?
【解决方案2】:

在德语中,唯一​​被修改的是文章:Der, Die, Das。并且名称没有它们。所以对德语没什么好看的。 (顺便说一句,这不是斯拉夫语)

关于俄语(我的母语)。改变结尾的整个概念对于处理来说是痛苦的,但是(!)如果你只有人名并且你有像 {name nominative} 这样的提示,那就相对容易了。大多数女性名字都有共同的结构:词根+a/ya(а/я),每个提示都会给你明确的改变结尾的方法。我看到在波兰语中是一样的:Dorot|a, Dorot|ę。男性名字也很简单。它们要么遵循完全相同的规则(如果以 a/ya (а/я) 结尾)或者以 j/y 结尾(比如我的名字 Andrey),则映射略有不同。

【讨论】:

  • 谢谢,安德烈。那么你认为构建一个相对简单的语法引擎来分析名称并计算出变格实际上会更容易吗?我可以看到为名称结尾构建查找表并不是非常困难,但我担心 Kasia (Kasię, Kasi, Kasi, Kasią) 和Dorota (Dorotę, Doroty, Dorotie, Dorotą),我不能仅仅因为它们是以 -a 结尾的女性名字来预测属格 (генитив) 和与格 (датив)。
  • @Owen Blacker。我理解你,你的任务相对容易。您需要实现两件事:识别变格和修改结尾。两者似乎都是微不足道的。男性名字是 1 或 2 变格。 99% 的女性名字是 1。有 2 或 3 个例外,包括提到的“Любовь”,它是第 3 变格,但仍然遵循规则。所以算法是这样的:如果最后一个字母是а/я,那么第一个。如果 ь 则第 3 次。否则第二个(©或辅音)。 Андрей 以 й 结尾,所以它是结尾。然后是:Андрея,Андрею等等。
  • Руслан 很简单。 н是辅音,所以没有结尾。 Руслана, Руслану。 Илья (а/я => 1st) Ильи, Илье。 Нелли 不是俄语名字,但不落入任何变格,所以它保留了自己。
  • 您应该考虑到您的问题不会以名称结束。带有名称的形容词必须对应于性别(英语根本没有的东西)并且它也有变格。示例:善良的安德烈。 Добрый Андрей, доброго Андрея, доброму Андрею。 Добрая Екатерина, доброй Екатерины, доброй Екатерины。你看?这并不难,你只需要字典来检查名字的性别并有形容词的结尾变体。
  • 现在是我的故事的最后一章。动词。它们仅在过去时的情况下反映性别。安德烈去了:Андрей пошел,Екатерина пошла。同样,规则很简单,但你应该尊重它们。总结:俄语很难自动化,但我们的任务规则很简单,但有很多。