我想删除英文散文输入字符串中的所有撇号,但保留原始含义和大写字母,即


不是->不是
我是->我是
他们是->他们是
不应该->不应该
不能->不能
约翰的->约翰(足够好)


在Java中实现这一目标的最佳/最简单方法是什么?

最佳答案

对于替换宫缩有一些严格的规定。只要有一个方法可以在您的字符串上执行这些功能。

public String removeContractions(String inputString) {

    inputString = inputString.replaceAll("n't", " not");
    inputString = inputString.replaceAll("'re", " are");
    inputString = inputString.replaceAll("'m", " am");
    inputString = inputString.replaceAll("'ll", " will");
    inputString = inputString.replaceAll("'ve", " have");

    return inputString;
}


这甚至可以保留所有格。

当然,有些收缩取决于上下文,例如he'd。这可能是“他可能”,“他会”,“他拥有”等,因此,这超出了简单的替换算法,甚至超出了机器学习领域。

public String removeControversialContractions(String inputString) {

    inputString = inputString.replaceAll("'d", " would");
    inputString = inputString.replaceAll("'s", "s");

    return inputString;
}


也许对于's,您可以检查包含它的单词是否以大写字母开头(表示名称),并有条件地将其替换为sis。但是,这不会在句子开头抓住正常的收缩,所以...

如果您想要一种简单而完美的方法,我不确定您会不会得到。要执行这些更复杂的操作,您将需要一个经常引用的大型词典文件或机器学习技术。

07-26 00:28