Если вы сегментируете фрагмент текста на предложения, то вам нужно начать с определения того, какие метки могут разделять предложения. В общем, это !
, ?
и .
(но если все, что вам нужно, это .
для текстов, которые вы обрабатываете, то просто согласитесь).
Теперь, поскольку они могут появляться внутри кавычек или как части сокращений, вам нужно найти каждое вхождение этих знаков препинания и запустить какой-нибудь классификатор машинного обучения, чтобы определить, начинается ли это вхождение новым предложением или это делает что-то еще. Это включает в себя данные обучения и правильно составленный классификатор. И это не будет на 100% точным, потому что, вероятно, нет способа быть на 100% точным.
Я предлагаю поискать в литературе методы сегментации предложений и взглянуть на различные наборы инструментов обработки естественного языка, которые там есть. Я еще не нашел ни одного для Ruby, но мне нравится OpenNLP (который находится в Java).