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