去除宫缩

时间:2012-12-27 22:18:06

标签: java string text-processing

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

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

在java中实现此目的的最佳/最简单方法是什么?

2 个答案:

答案 0 :(得分:9)

有一个收缩字典Map<String, String>,用于将收缩映射到拼写出来的表格。因为撇号取代的内容没有单一的规则,所以这本词典接近了。

答案 1 :(得分:7)

取代宫缩有一些硬性和快速的规则。只需要一个在字符串上执行这些功能的方法。

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。然而,这不会在句子开头出现正常的收缩,所以......

如果你想要一个简单的完美的方法,我不确定你会得到一个。要做这些更复杂的事情,你需要一个你经常参考的大字典文件或机器学习技术。