我想从英文散文的输入字符串中删除所有撇号,但保留原始含义和大小写,即
在java中实现此目的的最佳/最简单方法是什么?
答案 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
,您可以检查包含它的单词是否以大写字母(表示名称)开头,并有条件地将其替换为s
或is
。然而,这不会在句子开头出现正常的收缩,所以......
如果你想要一个简单的和完美的方法,我不确定你会得到一个。要做这些更复杂的事情,你需要一个你经常参考的大字典文件或机器学习技术。