Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 消除宫缩_Java_String_Text Processing - Fatal编程技术网

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它还会映射到什么?