Как я заменяю акцентируемые латинские символы в Ruby?

70
задан paradoja 9 July 2015 в 19:54
поделиться

8 ответов

Направляющие уже имеют встроенное для нормализации, просто необходимо использовать это для нормализации строки, чтобы сформировать KD и затем удалить другие символы (т.е. метки диакритического знака) как это:

>> "àáâãäå".mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'').downcase.to_s
=> "aaaaaa"
57
ответ дан rogerdpack 24 November 2019 в 13:13
поделиться

iconv:

http://groups.google.com/group/ruby-talk-google/browse_frm/thread/8064dcac15d688ce ?

=============

модуль жемчуга, который я не могу понять:

http://www.ahinea.com/en/tech/accented-translate.html

грубая сила ============

(существует много тех существ!:

http://projects.jkraemer.net/acts_as_ferret/wiki#UTF-8support

http://snippets.dzone.com/posts/show/2384

1
ответ дан Gene T 24 November 2019 в 13:13
поделиться

Ключ должен использовать два столбца в Вашей базе данных: canonical_text и original_text. Используйте original_text для дисплея и canonical_text для поисков. Тот путь, если пользователь ищет "Визуальное Кафе", она видит "Визуальный CafГ©" результат. Если она действительно хочет различный объект, названный "Визуальное Кафе", оно может быть сохранено отдельно.

Для получения canonical_text символов в исходном файле Ruby 1.8 сделайте что-то вроде этого:

register_replacement([0x008A].pack('U'), 'S')
3
ответ дан 2 revs, 2 users 80% 24 November 2019 в 13:13
поделиться

Преобразуйте текст в нормализацию, формируют D, удаляют все кодовые точки с unicode категорией, не располагающей метку с интервалами (Mn), и преобразовывают, это назад к нормализации формирует C. Это разделит все диакритические знаки, и Ваша проблема уменьшается до поиска без учета регистра.

См. http://www.siao2.com/2005/02/19/376617.aspx и http://www.siao2.com/2007/05/14/2629747.aspx для деталей.

3
ответ дан Community 24 November 2019 в 13:13
поделиться

Вы, вероятно, хотите разложение Unicode ("NFD"). После разложения строки просто отфильтруйте что-либо не в [A-Za-z]. Г ¦ разложится к "одному", ГЈ к "~" (приблизительно - диакритическое станет отдельным символом), таким образом, фильтрация оставит разумное приближение.

2
ответ дан MSalters 24 November 2019 в 13:13
поделиться

Я думаю, что Вы, возможно, не делаете действительно, что спуститься по тому пути. Если Вы разработаете для рынка, который имеет подобные буквы, то Ваши пользователи, вероятно, будут думать, что Вы - своего рода... зернышко . Поскольку 'ГҐ' даже не близко к ни в каком значении пользователю. Поднимите различную дорогу и чтение о поиске в неASCII путь. Это - только один из тех случаев, кто-то изобрел unicode и сопоставление .

А очень последний PS:

http://www.w3.org/International/wiki/Case_folding http://www.w3.org/TR/charmod-norm/#sec-WhyNormalization

Помимо этого у меня нет язя путем, ссылка на сопоставление переходит к странице MSDN, но я оставляю его там. Это должно было быть http://www.unicode.org/reports/tr10/

7
ответ дан Jonke 24 November 2019 в 13:13
поделиться

lol.. я просто попробовал это.. и это работает.. Я все еще не вполне уверен почему.. но когда я использую это 4 строки кода:

  • ул. = str.gsub (/[^a-zA-Z0-9] /"")
  • ул. = str.gsub (/[] + /", ")
  • ул. = str.gsub (//", - ")
  • ул. = str.downcase

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

-3
ответ дан 24 November 2019 в 13:13
поделиться

Для тех, кто читает это и хочет удалить все не-ascii-символы это может быть полезно, я успешно использовал первый пример.

1
ответ дан 24 November 2019 в 13:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: