【问题标题】:Check if string input is plural or singular? [duplicate]检查字符串输入是复数还是单数? [复制]
【发布时间】:2012-01-27 10:39:12
【问题描述】:

我想检查一个字符串在 PHP 中是单数还是复数。

【问题讨论】:

  • 如果你想可靠地做到这一点,你需要一本字典
  • 自己思考。复数词的特点是什么?在许多情况下,最后一个字母“s”。但也有例外。另一种创新方法是从在线词典中获取资源并加以使用。

标签: php string


【解决方案1】:

即使只使用一种语言,例如英语,也不容易做到。首先,您需要识别名词。

使用规则如:单词以“s”结尾很简单,

SHEEP 单数 SHEEP 复数

LADY 单数 LADIES 复数 但是LADY'S呢

因此,您需要变得更聪明,并在 S 之前立即测试撇号

尝试使用 Brill Parser 之类的东西,它可以识别名词,并且可能适合以合理的准确度识别单数/复数,但即使这样也不完美。

再一次,您可能想用法语或德语进行此操作...您的问题非常广泛,无法识别语言

编辑

这个wikipedia article中描述了英语单复数复杂性的例子

porter stemming 这样的技术可以识别单词的“词根”,与实际单词进行比较可以帮助检查扩展名是典型的单数还是复数。 Porter Stemmer 的 PHP 实现是可用的here

【讨论】:

  • 然后你会得到 rhinoceros,一个以 s 结尾且没有撇号符号的非复数名词。
  • 是的,英语是一门美妙的语言,有很多不规则之处
【解决方案2】:

考虑到不同语言中复数词的不确定性已经显示出的困难,在英语(和其他)中,复数并不总是以“s”结尾,有时以“s”结尾的词也不是复数,我'将尝试提供可能的解决方案。

您可以为复数总是以“s”结尾的单词创建一个大数组,为不规则复数创建另一个数组,并验证句子中的每个单词。

我稍后会用一些 PHP 示例来完成这篇文章。

我找到了一些 java 示例 here

【讨论】:

    【解决方案3】:

    嗯,这取决于您的语言并不容易,甚至可能无法确定。

    例如,您如何区分“男人”和“男人”?

    您可以使用启发式,就像所有东西一样,以“s”结尾的复数形式并提供额外的例外情况,例如提到的“man”。这也会导致错误的答案,因为例如“kiss”以“s”结尾但不是复数。

    【讨论】:

    • 而“kiss”可以是动词,而不仅仅是名词
    猜你喜欢
    • 2022-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 2011-09-21
    • 2010-10-29
    • 2013-05-25
    • 2021-12-10
    • 2015-05-16
    相关资源
    最近更新 更多