是否有任何 Java API 可以提供复数形式的英文单词(例如cacti
for cactus
)?
7 回答
检查基于 Damian Conway 论文“ An Algorithmic Approach to English Pluralization”实现英语复数算法的Evo Inflector。该库针对来自维基词典的数据进行了测试,并报告 1000 个最常用的英语单词的成功率是 100%,而维基词典中列出的所有单词的成功率是 70%。
如果您想要更高的准确性,您可以获取维基词典并对其进行解析以创建单数到复数映射的数据库。考虑到由于维基词典的开放性,某些数据可能不正确。
示例用法:
English.plural("Facility", 1)); // == "Facility"
English.plural("Facility", 2)); // == "Facilities"
jibx-tools提供了一个方便的复数/去复数器。
常规测试:
NameConverter nameTools = new DefaultNameConverter();
assert nameTools.depluralize("apples") == "apple"
nameTools.pluralize("apple") == "apples"
我知道 Ruby on Rails 中有一个简单的复数()函数,也许你可以通过 JRuby 得到它。这个问题真的很不容易,我看了几页关于如何复数的规则,它甚至都不完整。一些规则不是算法——它们取决于不容易获得的词干来源等。所以你必须决定你想变得多么完美。
考虑到 java,看看modeshapes Inflector-Class 作为包org.modeshape.common.text的成员。或者谷歌搜索“inflector”和“randall hauch”。
很难找到这种 API。相反,您需要找到一些可以服务于您的目的的网络服务。检查这个。我不确定这是否可以帮助你..(我试图在回复中加上仙人掌这个词并在某处得到仙人掌)。
Wolfram|Alpha 返回给定单词的变化形式列表.
看这个例子:
http://www.wolframalpha.com/input/?i=word+cactus+inflected+forms
这是他们的 API:
如果您可以利用 javascript,我为此创建了一个轻量级 (7.19 KB) javascript。或者您可以将我的脚本移植到 Java。非常容易使用:
pluralizer.run('goose') --> 'geese'
pluralizer.run('deer') --> 'deer'
pluralizer.run('can') --> 'cans'
https://github.com/rhroyston/pluralizer-js
顺便说一句:看起来仙人掌到仙人掌是一种超级特殊的转换(大多数人都会说'1仙人掌')。如果您愿意,可以轻松添加。源代码易于阅读/更新。