我如何获得名词的占有形式?

时间:2010-01-25 20:15:30

标签: java algorithm linguistics

这是一种将撇号添加到给定输入名词的算法。

您如何构建字符串以显示所有权?

/**
 * apostrophizes the string properly
 * <pre>
 * curtis = curtis'
 * shaun = shaun's
 * </pre>
 *
 * @param input string to apostrophize
 * @return apostrophized string or empty string if the input was empty or null.
 */
public static String apostrophize(String input) {
    if (isEmpty(input)) return "";

    if ("s".equalsIgnoreCase(StringUtils.right(input,1))) {
        return input + "'";
    } else {
        return input + "'s";
    }
}

3 个答案:

答案 0 :(得分:4)

  

您如何构建一个显示所有权的字符串?

替代方案是:

  • 通过避免为某些任意单词或名称生成占有性来避免此问题。这就是我要做的......除非我感到受虐待。

  • 做一个简单的工作(inevitably)会导致英语在某些情况下无法通过“良好风格”测试。并且准备好转移来自无休止的dingbats的抱怨,他们对时间没什么好处,而不是抱怨不好的风格/语法。

  • 花费很长时间构建能够将单词分析为单数/复数,常用名词/专有名词等的基础设施。然后根据您所用文本的句法/语义分析来实现样式规则。发电。 (然后为您的网站的每种自然语言重复整个过程......或者其他......需要支持。)

答案 1 :(得分:2)

不,这在语法上是不正确的。柯蒂斯是正确的方式来说某些东西属于柯蒂斯,因为柯蒂斯是单数的。如果名词是复数,你可以使用尾随撇号来表示所有格。

编辑: Shaun,在我最谦逊的看法,作为一名作为英语作家和编辑经验的人以及程序员,我觉得这个问题没有任何简单的答案。我不认为写“柯蒂斯”来表达占有欲是正确的,而且我也觉得在这个问题上有广泛的 - 虽然不是普遍的 - 协议。

解决这个问题的任何算法方法的实际工作是确定名词是单数还是复数,这是一个非常难以解决的问题,远远超出StackOverflow答案的范围。祝你好运。

答案 2 :(得分:1)

反转形式更稳定

 String.Format("The {1} of {0}", owner, item);