Помощник статьи рельсов - "А" или " Ан"


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

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

6 35

6 ответов:

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

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

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

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

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

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

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

(Источник )

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

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

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

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

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

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

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

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

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