给定一些我们假设是复数的(英语)单词,是否可以推导出单数形式?如果可能的话,我想避免查找/字典表。
一些例子:
示例 -> 示例一个简单的 's' 后缀 Glitch -> Glitch 'es' 后缀,与上面相反 国家 -> 国家 'ies' 后缀。 绵羊 -> 绵羊没有变化:不确定值的可能后备
语言库的建议x
很好,只要它们是开源的(即,以便有人可以检查它们以确定如何用语言进行操作y
)
给定一些我们假设是复数的(英语)单词,是否可以推导出单数形式?如果可能的话,我想避免查找/字典表。
一些例子:
示例 -> 示例一个简单的 's' 后缀 Glitch -> Glitch 'es' 后缀,与上面相反 国家 -> 国家 'ies' 后缀。 绵羊 -> 绵羊没有变化:不确定值的可能后备
语言库的建议x
很好,只要它们是开源的(即,以便有人可以检查它们以确定如何用语言进行操作y
)
这实际上取决于您所说的“以编程方式”是什么意思。部分英语适用于易于理解的规则,而部分则没有。它主要与频率有关。对于简要概述,您可以阅读 Pinker 的“Words and Rules”,但请帮自己一个忙,不要将整个语言学生成理论完全放在心上。那里的经验主义比那种思想流派真正适合追求的要多得多。
许多英语可以在统计上进行词形还原。顺便说一句,词干提取或词形还原是您要查找的术语。Morpha Lemmatizer是使用基于频率的异常引导的统计规则的最有效的词形还原器之一。如果您有一个项目需要这种类型的简化表示英语特定术语的字符串,您可以试一试。
在规范化相关术语方面,还有更多天真的方法可以完成很多工作。看看Porter Stemmer,它足以有效地将英语中的大多数术语聚集在一起。
从单数到复数,与我熟悉的其他一些欧洲语言相比,英语的复数形式实际上是相当常规的。例如,在德语中,计算复数形式非常复杂(例如 Land -> Länder)。我认为大约有 20-30 个例外,其余的遵循一个相当简单的规则集:
话虽如此,复数到单数形式变得更加困难,因为相反的情况有歧义。例如:
所以它可以做到,但你将有一个更大的例外列表,你将不得不存储很多误报(即看起来是复数但不是复数的东西)。
“axes”是“ax”的复数还是“axis”的复数?没有上下文,即使是人类也无法分辨。
您可以查看Inflector.net - 我的 Rails 变形类端口。
不 - 英语不是一种遵守许多规则的语言。
我认为你最好的选择是:
正如 nickf 已经说过的那样,这是不可能的。对于您描述的单词类别来说这很简单,但是所有以 s 自然结尾的单词呢?例如,我的名字 Marius 不是 Mariu 的复数形式。我猜与巴士相同。英语单词的复数是一种单向函数(散列函数),您通常需要句子或段落的其余部分作为上下文。