ВСЕ КОПИИ в Нормальный случай - PullRequest
4 голосов
/ 20 мая 2011

Я пытаюсь найти элегантное решение о том, как преобразовать что-то вроде этого

ALL CAPS TEXT."ПОЧЕМУ ЭТО БУДЕТ ИСПОЛЬЗОВАТЬ?"ЭТО НЕЛЕПО!ПОМОГИТЕ.

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

"mytext".gsub(/my(regex)/, '\1'.capitalize)

, но текущим рабочим решением будет

"mytext".split(/\. /).each {|x| p x.capitalize } #but this solution sucks

1 Ответ

4 голосов
/ 20 мая 2011

Прежде всего, обратите внимание, что то, что вы пытаетесь сделать, будет только приблизительным.

  1. Вы не можете правильно сказать, где находятся границы предложения. Вы можете аппроксимировать его как Начало всей строки или сразу после точки, вопросительного знака или восклицательного знака, за которым следуют пробелы. Но тогда вы будете неправильно использовать заглавную букву "экономика" в "экономике США".

  2. Вы не можете правильно сказать, какие слова следует использовать с большой буквы. Например, «Джон» будет «Джон».

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

Понимая эти ограничения, вы можете захотеть сделать:

mytext.gsub(/.*?(?:[.?!]\s+|\z)/, &:capitalize)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...