Рассмотрим этого текст пунктКак разделить абзац на предложения, разделенные точкой (.), За исключением случаев, когда период является частью аббревиатуры?
группа по сохранению вызывает 20-летний запрет ключевой защиты для американского идола. Горная промышленность и некоторые республиканские члены Конгресса говорят, что это наносит ущерб экономике Аризоны и энергетической независимости страны. «Несмотря на значительное давление со стороны горнодобывающей промышленности, президент и секретарь Салазар не отступили», - сказала Джейн Дановиц, директор общественных земель США для группы окружающей среды Pew.
В приведенном выше примере его легко разделить предложения на период (.), Но это приведет к неправильным результатам при обработке периода в U.S.A. Предположим, у меня есть список сокращений, таких как
String abbrev[] ={"u.s.a", "u.a.e", "u.k", "p.r.c","u.s.s.r", };
String regex= "\\.";
Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(sx);
int beginIndex=0;
// Check all occurance
int index=0;
while (matcher.find()) {
System.out.print("Start index: " + matcher.start());
System.out.print(" End index: " + matcher.end() + " ");
String group=matcher.group();
System.out.println("group: " + group);
int dotIndex= group.indexOf(".");
String sub= sx.substring(beginIndex, matcher.start()+dotIndex);
beginIndex= matcher.start()+dotIndex;
System.out.println(sub);
}
я мог бы сделать грубой силы матч со всеми сокращениями вокруг dotIndex. Есть ли лучший подход?
Можете ли вы просто воспользоваться пространством после обычного предложения или существуют другие граничные условия? –
@JoshG: Я думал об этом, но как насчет других случаев, например. этот пример с «например» и пробелом. Вам нужно будет проверить (или отрицать) в зависимости от того, что перед ним, например '(?
Как вы планируете выделить аббревиатуру в середине предложения по сравнению с одним в конце предложения? Например, «Я живу в США». –