Rails article helper - "a" или "an" - PullRequest
       27

Rails article helper - "a" или "an"

35 голосов
/ 21 марта 2011

Кто-нибудь знает о Rails Helper, который может автоматически добавлять соответствующую статью к заданной строке? Например, если я передам функцию «яблоко», то получится «яблоко», а если отправить «банан», то вернется «банан»

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

Ответы [ 6 ]

37 голосов
/ 21 марта 2011

Ничего из того, что я знаю, но кажется достаточно простым написать помощника для этого права?Сверху головы

def indefinite_articlerize(params_word)
    %w(a e i o u).include?(params_word[0].downcase) ? "an #{params_word}" : "a #{params_word}"
end

надеюсь, что это поможет

редактировать 1: Также нашел эту ветку с патчем, который может помочь вам пуленепробиваемый это больше https://rails.lighthouseapp.com/projects/8994/tickets/2566-add-aan-inflector-indefinitize

13 голосов
/ 16 июня 2013

Теперь для этого есть драгоценный камень: indefinite_article .

4 голосов
/ 21 марта 2011

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

  • Некоторые люди скажут "исторический момент", но напишут "aисторический момент ".
  • Но это" история "!
  • Сокращения и аббревиатуры проблематичны (« Репортер NBC », но« авторитет НАТО »)
  • Слова начинаютсяс гласным, но произносится с начальным согласным («союз»)
  • Другие?

( источник )

3 голосов
/ 22 марта 2011

Я знаю, что следующий ответ идет слишком много для практической простой реализации, но в случае, если кто-то хочет сделать это с точностью при некоторой шкале реализации.

Правило на самом деле довольно простое, но проблема в том, что правило зависит от произношения, а не от написания:

Если исходным звуком является гласный звук (необязательно гласный буква ), тогда добавьте «an», в противном случае добавьте «a».

Ссылаясь на примеры Джона:

«час», потому что здесь «h» - это гласный звук, а «исторический», потому что здесь «h» - согласный звук. «NBC», потому что «N» здесь читается как «en», тогда как «НАТО», потому что «N» здесь читается как «n».

Таким образом, вопрос сводится к выяснению: «когда определенные буквы произносятся как гласные». Для этого вам необходимо получить доступ к словарю, в котором есть фонологические представления для каждого слова, и проверить его начальную фонему.

2 голосов
/ 28 мая 2011

Посмотрите на http://deveiate.org/projects/Linguistics/wiki/English - он обеспечивает обработку неопределенных статей и многое другое.Я успешно использовал его во многих проектах.

1 голос
/ 28 июля 2014

Мне нравится драгоценный камень , если вы хотите комплексное решение. Но если вы просто хотите, чтобы тесты читались более красиво, полезно установить патч String, чтобы он следовал стандартному шаблону Rails inflector :

class String
  def articleize
    %w(a e i o u).include?(self[0].downcase) ? "an #{self}" : "a #{self}"
  end
end
...