去除宫缩

Boh*_*ian 2 java string text-processing

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

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

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

AFS*_*AFS 9

有一个收缩字典Map<String, String>,将收缩映射到拼写形式.因为撇号取代的内容没有单一的规则,所以这本词典接近了.


ast*_*eri 8

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

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;
}
Run Code Online (Sandbox Code Playgroud)

这甚至可以保护你的所有权.

当然,有些收缩取决于背景,例如he'd.这可能是"他可以","他会","他有"等等,因此不仅仅是简单的替代算法,而且更多的是机器学习领域.

public String removeControversialContractions(String inputString) {

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

    return inputString;
}
Run Code Online (Sandbox Code Playgroud)

也许对于's您可以检查,看是否包含它的词用大写字母(表示名称)开始,有条件用要么更换sis.然而,这不会在句子开头出现正常的收缩,所以...

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