Разделение абзацев на предложения

Учитывая абзац, я хочу разбить его на предложения. На данный момент я просто делаю это:

var sentences = paragraph.split('.');

Он работает по большей части, однако начинает давать сбой, когда ему дается такое предложение:

Аляска — самый большой штат США.

Поскольку U.S. имеет точки, он анализирует S как предложение.

Как лучше всего определить предложения в абзаце? Я думал о том, чтобы разобрать их на основе последней точки перед заглавной буквой, но если абзац плохо напечатан (строчная буква после точки), он также не будет работать на этом


person user1788996    schedule 26.05.2013    source источник
comment
Я ошибаюсь или вы меньше интересуетесь JavaScript, чем теорией распознавания предложений? Тогда это, вероятно, больше вопрос к programmers.stackexchange.com   -  person Denys Séguret    schedule 26.05.2013
comment
Ах, добро пожаловать в проблемы с регулярными выражениями. Тем не менее, почему бы и нет: split('.\s+')? (Хотя я придерживаюсь второго предложения дистроя, синтаксический анализ языка/грамматики регулярных выражений неудобен).   -  person David says reinstate Monica    schedule 26.05.2013
comment
Не забывайте, что предложение может заканчиваться не точкой!   -  person Denys Séguret    schedule 26.05.2013
comment
Если вы хотите, чтобы этот алгоритм был точным, вы просите что-то очень сложное.   -  person mzedeler    schedule 26.05.2013
comment
@DavidThomas: А как насчет J. Р. Боб Доббс хочет вам что-то продать.? \s+ не совсем подходит.   -  person mu is too short    schedule 26.05.2013
comment
@muistooshort, действительно. Анализ предложений (учитывая различные варианты разграничения предложений и использования знаков препинания в середине предложения) адски надежен в работе. И всегда будут неучтенные крайние случаи.   -  person David says reinstate Monica    schedule 26.05.2013


Ответы (1)


Сначала я бы разбил абзац на слова, разделив его на пробелы. Затем соберите предложения и найдите слова, оканчивающиеся на точку, вопросительный и восклицательный знаки. Если оно заканчивается точкой, проверьте, не содержит ли слово более одной точки — если да, то это аббревиатура, а не конец предложения.

person Andrew - OpenGeoCode    schedule 26.05.2013
comment
Это все еще далеко от совершенства, любое предложение с Дуайтом Д. Эйзенхауэром было бы недействительным. - person nyson; 26.05.2013