我想从输入的英文散文字符串中删除所有撇号,但保留原始含义和大写,即
- 不是 --> 不是
- 我是——>我是
- 他们是——>他们是
- 不应该 --> 不应该
- 不能 --> 不能
- John's --> Johns(足够好)
在java中实现这一目标的最佳/最简单的方法是什么?
我想从输入的英文散文字符串中删除所有撇号,但保留原始含义和大写,即
在java中实现这一目标的最佳/最简单的方法是什么?
有一个收缩字典Map<String, String>
,将收缩映射到它们的拼写形式。因为撇号替换的内容没有单一的规则,所以这本字典接近了要走的路。
更换宫缩有一些硬性规定。只需有一个在您的字符串上执行这些功能的方法。
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
or is
。但是,这不会在句子开头捕捉到正常的收缩,所以......
如果你想要一个简单而完美的方法,我不确定你会得到一个。要完成这些更复杂的事情,您需要一个经常参考的大型字典文件或机器学习技术。