Java 消除宫缩
我想删除英文散文输入字符串中的所有撇号,但保留原始含义和大写字母,即Java 消除宫缩,java,string,text-processing,Java,String,Text Processing,我想删除英文散文输入字符串中的所有撇号,但保留原始含义和大写字母,即 难道-->不是吗 我是,我是 是的,是的 不应该-->不应该 不能-->不能 约翰的-->约翰(够好了) 在java中实现这一点的最佳/最简单的方法是什么?有一个压缩字典Map,它将压缩映射到它们的拼写形式。因为撇号替换的内容没有单一的规则,所以这本词典的方法很简单。替换缩略语有一些硬性的规则。只要有一个对字符串执行这些函数的方法 public String removeContractions(String inputS
- 难道-->不是吗
- 我是,我是
- 是的,是的
- 不应该-->不应该
- 不能-->不能
- 约翰的-->约翰(够好了)
在java中实现这一点的最佳/最简单的方法是什么?有一个压缩字典
Map
,它将压缩映射到它们的拼写形式。因为撇号替换的内容没有单一的规则,所以这本词典的方法很简单。替换缩略语有一些硬性的规则。只要有一个对字符串执行这些函数的方法
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;
}
这甚至会保留你的占有欲
当然,也有一些收缩依赖于上下文,比如他会。这可能是“他能”、“他会”、“他有”等等,因此,这超越了简单的替换算法,更多的是在机器学习领域
public String removeControversialContractions(String inputString) {
inputString = inputString.replaceAll("'d", " would");
inputString = inputString.replaceAll("'s", "s");
return inputString;
}
也许对于的
,您可以检查包含它的单词是否以大写字母开头(表示名称),并有条件地将其替换为s
或is
。然而,这不会捕捉到句子开头的正常收缩,所以
如果你想要一个简单完美的方法,我不确定你会得到一个。要做这些更复杂的事情,你需要一个你经常引用的大字典文件或机器学习技术。所有所有格呢?保持资本化怎么样?鲍勃的小马
vs鲍勃的小马名为鲍勃
对。这是一个固有的歧义,这正是我提倡字典法的原因。对于“的”没有“硬性规定”,但肯定有一些可以包含在字典中。i、 Bob的不会被替换,但它总是会映射到it is*(因为所有格形式是*its)。当然,如果有一些明确的规则,您可以先编写这些规则,但它应该与字典一起使用,因为这样可以更精确地区分模糊和明确的规则cases@irr“Bobs a pony”很好inputString=inputString.replaceAll(“'s”,“s”)代码>见最后一个例子。是的,你可以加上这个,但我认为问题的精神是尽可能保留所有格。:)也许这不是目的,但是,在这种情况下,这可能是一个很好的补充。@Bohemian已经有了一个空间。:)至少,我在屏幕上看到了一个<代码>(“不”、“不”)代码>这似乎是最好的答案。正如您所指出的,处理的
很棘手。例如“很好”,但“一直很好”。可能是“'s been”->“have”,然后是“'s”->“is”。为什么约翰的
会映射到约翰的
?@irrelephant它还会映射到什么?