英语单词复数形式的Java API
Posted
技术标签:
【中文标题】英语单词复数形式的Java API【英文标题】:Java API for plural forms of English words 【发布时间】:2011-08-19 22:06:57 【问题描述】:是否有任何 Java API 可以提供复数形式的英文单词(例如 cacti
代表 cactus
)?
【问题讨论】:
适用于哪些自然语言,哪些编程语言? 此外,根据新牛津美国词典,仙人掌的复数形式是 cacti(单 i)和 cactuses。 我们正在查看英文单词,我们的编程环境基于 Java 我不确定是否有 Java 库。如果没有,一个很好的起点是 Lingua::EN::Inflect Perl 模块,可用here。希望有人将 Inflect 移植到 Java。 【参考方案1】:检查Evo Inflector,它实现了基于 Damian Conway 论文“An Algorithmic Approach to English Pluralization”的英语复数算法。 该库针对来自维基词典的数据进行了测试,报告 1000 个最常用的英语单词的成功率是 100%,而维基词典中列出的所有单词的成功率是 70%。
如果您想要更高的准确性,您可以获取维基词典并对其进行解析以创建单数到复数映射的数据库。考虑到由于维基词典的开放性,某些数据可能不正确。
示例用法:
English.plural("Facility", 1)); // == "Facility"
English.plural("Facility", 2)); // == "Facilities"
【讨论】:
太棒了,我正要开始自己根据那篇论文编写一个算法。感谢@Slawek 指出这一点。 根据github上的来源,它支持的英文单词数量似乎有限 图书馆无法提供英文单词的单数形式。【参考方案2】:jibx-tools 提供了方便的复数/去复数。
常规测试:
NameConverter nameTools = new DefaultNameConverter();
assert nameTools.depluralize("apples") == "apple"
nameTools.pluralize("apple") == "apples"
【讨论】:
不建议这样做,它甚至对mouse
都不起作用,它将单词转换为mouses
,这是不正确的【参考方案3】:
我知道 Ruby on Rails 中有一个简单的复数() 函数,也许你可以通过 JRuby 得到它。这个问题真的很不容易,我看了几页关于如何复数的规则,它甚至都不完整。一些规则不是算法——它们取决于不容易获得的词干来源等。所以你必须决定你想要变得多么完美。
【讨论】:
也许,如果你打算自己做一些事情,你可以在这里找到一些信息:english.stackexchange.com【参考方案4】:考虑到 java,看看 modeshapes Inflector-Class 作为包 org.modeshape.common.text 的成员。或者谷歌搜索“inflector”和“randall hauch”。
【讨论】:
我将该库与 jibx-tools 进行比较。图书馆更好。在某些方面,例如leaves
,jibx-tools 更好。【参考方案5】:
很难找到这种 API。相反,您需要找到一些可以服务于您的目的的网络服务。检查this。我不确定这是否可以帮助你.. (我试着在回复中加上 cacti 这个词,然后在某处得到了 cactus)。
【讨论】:
【参考方案6】:Wolfram|Alpha 返回给定单词的变化形式列表。
以此为例:
http://www.wolframalpha.com/input/?i=word+cactus+inflected+forms
这是他们的 API:
http://products.wolframalpha.com/api/
【讨论】:
这不是 API。是否有 wolframAlpha 的公共 API?我原以为他们会尽量避免这种情况【参考方案7】:如果您可以利用 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 仙人掌”)。如果您愿意,可以轻松添加。源代码易于阅读/更新。
【讨论】:
以上是关于英语单词复数形式的Java API的主要内容,如果未能解决你的问题,请参考以下文章