【发布时间】:2012-01-27 10:39:12
【问题描述】:
我想检查一个字符串在 PHP 中是单数还是复数。
【问题讨论】:
-
如果你想可靠地做到这一点,你需要一本字典
-
自己思考。复数词的特点是什么?在许多情况下,最后一个字母“s”。但也有例外。另一种创新方法是从在线词典中获取资源并加以使用。
我想检查一个字符串在 PHP 中是单数还是复数。
【问题讨论】:
即使只使用一种语言,例如英语,也不容易做到。首先,您需要识别名词。
使用规则如:单词以“s”结尾很简单,
SHEEP 单数 SHEEP 复数
LADY 单数 LADIES 复数 但是LADY'S呢
因此,您需要变得更聪明,并在 S 之前立即测试撇号
尝试使用 Brill Parser 之类的东西,它可以识别名词,并且可能适合以合理的准确度识别单数/复数,但即使这样也不完美。
再一次,您可能想用法语或德语进行此操作...您的问题非常广泛,无法识别语言
编辑
这个wikipedia article中描述了英语单复数复杂性的例子
像porter stemming 这样的技术可以识别单词的“词根”,与实际单词进行比较可以帮助检查扩展名是典型的单数还是复数。 Porter Stemmer 的 PHP 实现是可用的here。
【讨论】:
考虑到不同语言中复数词的不确定性已经显示出的困难,在英语(和其他)中,复数并不总是以“s”结尾,有时以“s”结尾的词也不是复数,我'将尝试提供可能的解决方案。
您可以为复数总是以“s”结尾的单词创建一个大数组,为不规则复数创建另一个数组,并验证句子中的每个单词。
我稍后会用一些 PHP 示例来完成这篇文章。
我找到了一些 java 示例 here
【讨论】:
嗯,这取决于您的语言并不容易,甚至可能无法确定。
例如,您如何区分“男人”和“男人”?
您可以使用启发式,就像所有东西一样,以“s”结尾的复数形式并提供额外的例外情况,例如提到的“man”。这也会导致错误的答案,因为例如“kiss”以“s”结尾但不是复数。
【讨论】: