我想从英语散文的输入字符串中删除所有的撇号,但保留了原有的意义和资本化,即删除收缩
- 不是 - >不是
- 我 - - >我
- 他们 - >它们是
- 不应该 - >不应该
- 不能 - >不能
- 约翰 - >约翰(足够好)
在java中实现这个最好/最简单的方法是什么?
我想从英语散文的输入字符串中删除所有的撇号,但保留了原有的意义和资本化,即删除收缩
在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
,你可以检查,看看是否包含它的词用大写字母(表示名称)开始,有条件用两种s
或is
更换。然而,这不会在句子的开头捕捉正常的收缩,所以...
如果你想要一个简单的和完美的方法,我不知道你会得到一个。要做这些更复杂的事情,你需要一个你经常参考的大型字典文件或机器学习技术。
有收缩字典Map<String, String>
将收缩映射到他们拼写的形式。由于撇号取代的内容没有单独的规则,因此这本字典就是要走的路。
所有的所有物呢?那么保留资本总额呢? – Bohemian
'鲍勃的小马'vs'鲍勃的小马被命名为鲍勃' – irrelephant
对。所以这是一个固有的模糊性,这正是我提倡字典方法的原因。没有“硬性规定”,但当然也有一些可以包含在字典中。即*鲍勃的*不会被替换,但*它*总是会映射到*它是*(因为激活形式是*它的*)。当然,如果有一些明确的规则,你可以先编码,但它应该与字典一起使用,因为这样可以更精确地区分含糊和明确的情况。 – AFS
为什么John's'会映射到Johns? – irrelephant
@irrelephant它还映射了什么? – Bohemian