Pull to refresh

Правильная транслитерация: доменные имена из русских названий

Lumber room
Возник вопрос на стыке IT и языка.

Есть ли какие-то чёткие правила для транслитерации названий, основываясь на которых можно было бы однозначно подбирать написание доменных имён в транслите для совершенно произвольных русских слов?

Поясню: с названием домена для г. Пушкино не запутаешься — pushkino.ru (хотя домен уже и купил не город, а банк). Но что делать, когда в названии (или ином слове, определяющем имя домена) встречаются буквы «ь», «ё», «ы», «й» и прочие сложности?
Несколько конкретных примеров
Total votes 19: ↑16 and ↓3 +13
Views 1.4K
Comments 60

Маленькая фишка гугла (очередная)

Lumber room
Только что гугл попросил ввести капчу при логине. Я ввел. Как-то так:
image

Ну так вот оно сработало. Хорошо, когда все для людей.

P.S. Наблюдение второе. Гугл сэкономил мне 5 секунд на вводе капчи, а я потратил минут 6 на написании этой заметки.
Total votes 68: ↑57 and ↓11 +46
Views 380
Comments 21

syncTranslit плагин

jQuery *
Во многих веб проектах используются friendly urls. Например, вместо id статьи в url испольуется его текстовый идентификатор (slug). Обычно slug генерируется автоматически на серверной стороне при создании статьи. Но если вы хотите иметь возможность задавать slug самостоятельно (через форму) — можете использовать мой плагин syncTranslit.

syncTranslit plugin
Читать дальше →
Total votes 28: ↑23 and ↓5 +18
Views 5.1K
Comments 41

Одно маленькое решение большой РФ проблемы или стартап за вечер

Hosting
Как известно появление зоны РФ создало новую проблему — как зайти на кириллический сайт, если под рукой нет русской клавиатуры? Конечно, существуют различные варианты виртуальных клавиатур, но их использование никогда не было делом особенно приятным.

Так и появилась идея создать простой сервис для посещения РФ сайтов.

Имея печальный опыт бесконечно затягивающихся объемных стартапов, первым делом было принято решение запустить проект за один день. Далее чуть-чуть JavaScript магии, покупка домена на нашем хостинге, долгие споры какие правила транслитерации лучше выбрать и вот оно: visitrf.ru



И еще: проект ни в коей мере не претендует на гениальность и инновационность. Он претендует на то чтобы стать полезным для своей не слишком широкой аудитории.

Идеи, предложения?
Total votes 90: ↑65 and ↓25 +40
Views 1.3K
Comments 108

Обычная (или не совсем обычная) транслитерация на Python

Python *
Как-то раз возникла необходимость написать транслитерацию на Python — из кириллицы в латиницу. Из слова «ситх» получается «sith», а из «шелест» выходит «shelest».

Казалось бы, чего тут вообще писать — задача едва сложнее print "Hello world". И это отчасти так — но не совсем.

Дело в том, что некоторые буквы в русском языке при транслитерации преобразуются не в одну, а сразу несколько латинских букв: это Ж, Ц, Ч, Ш, Щ, Ю и Я. По сути, если бы правилами транслитерации предполагалось преобразовывать их в одну латинскую букву, то транслитерация русского в английский действительно была бы не намного сложнее той самой простейшей программы.

Но, поскольку правила транслитерации мы менять точно не собираемся, то посмотрим, что получится при использовании обычной транслитерации.

К примеру, фраза «ШАПКА и Юля» преобразуется в «SHAPKA и YUlya», либо в «ShAPKA и Yulya» — в зависимости от того, что задано в таблице транслитерации для «Ш» и «Ю» (иногда задаётся «SH» и «YU», а иногда «Sh» и «Yu»).

То есть регистр следующей буквы в стандартных функциях транслитерации не учитывается, и все буквы в верхнем регистре заменяются по общим правилам. Поэтому в ходе транслитерации для слов «ЧАША» и «Щи» легко получается что-то вроде «ChAShA» или «SCHi», когда реально мы скорее хотели получить «CHASHA» и «Schi».

Тем не менее, все найденные реализации транслитерации из кириллицы в латиницу на Python, как выяснилось, эту особенность не учитывали. Это и многочисленные решения, приведённые на форумах, и библиотека pytils, реализующая транслитерацию в одном из своих модулей.

Значит, напишем свою функцию транслитерации, с блэкджеком и^W^W^W^H^H. :)

Читать дальше →
Total votes 36: ↑29 and ↓7 +22
Views 36K
Comments 31

Как Яндекс сделал самую подробную русскоязычную карту мира

Яндекс corporate blog Geoinformation services *
Сегодня Яндекс объявил о крупном обновлении Карт. Теперь на сервисе доступна подробная карта мира, с детализацией вплоть до домов и маршрутизацией. Все основные названия на ней представлены сразу на двух языках: местном и русском.
Кроме того, карты России, Украины, Казахстана и Беларуси теперь полностью принадлежат Яндексу.

Сервис теперь работает на единой платформе, позволяющей поддерживать и самостоятельно обновлять любые объёмы данных. Карты России, Украины, Беларуси и Казахстана обновляют картографы Яндекса каждый месяц. Все остальные страны, схемы которых нарисованы партнёром Яндекса — компанией Navteq, изменяются раз в три месяца.

image

Детальнее всего на части Navteq выполнены Европа и Северная Америка: со всеми основными улицами и домами в городах и подробной сетью дорог, по которым сервис умеет строить автомобильные маршруты.

Большинство топонимов на картах Navteq было записано латиницей, хотя для некоторых языков (например, тайского и арабского) использовались оригинальные алфавиты. Чтобы пользователям было легче ориентироваться, Яндекс автоматически перевёл иностранные названия городов и популярных туристических мест на русский язык. Перед нами стояла задача перевести с 37 языков более 7 миллионов топонимов из 237 стран.

В этом посте мы подробно расскажем о том, как мы выбирали методы перевода и использовали их на практике.
Читать дальше →
Total votes 167: ↑149 and ↓18 +131
Views 69K
Comments 186

Поиск различных вариантов транслитерации русских текстов (ФИО) латиницей для выборок в MySQL

PHP *MySQL *Regular expressions *
Собственно, столкнулся с банальной задачей — есть база, в которой есть масса данных ФИО, написанных латиницей. Зачастую достаточно безграмотно и непредсказуемо транслитерировано. Вроде бы и есть ГОСТ 7.79 (ISO 9), но на практике его далеко не всегда соблюдают.
Задача — есть БД с записями (как правило, ФИО) латиницей. Плохой латиницей. Требуется по русской подстроке поиска в вэб-приложении выбрать из БД (MySQL) записи, похоже транслитерированные на латиницу.

Читать дальше →
Total votes 8: ↑6 and ↓2 +4
Views 12K
Comments 6

Транслитерация в Perl6

Perl *Programming *
Translation
«Транслитерация» означает замену символов. Именно этим и занимается метод Str.trans

say "GATTACA".trans( "TCAG" => "0123" );  # выводит "3200212\n"


Люди, знакомые с Perl 5 или с оболочкой Unix распознают в этом tr/tcag/0123/, а для остальных поясним: каждая буква T заменяется на 0, каждая C на 1, и так далее. Две строки, TCAG и 0123, предоставляют алфавиты, которые надо взаимозаменять.

Это можно использовать для скорости при реализации разных операций. Например, простая функция, «шифрующая» текст методом ROT-13 (замена символа тем, что стоит через 13 позиций от него):
Читать дальше →
Total votes 10: ↑8 and ↓2 +6
Views 2.7K
Comments 3

Обратимая транслитерация кириллицы

Programming *
Sandbox
Возможно, кто-то еще помнит, как писали SMS, а иногда и письма, «транслитом». Но зачем транслитерация сегодня, когда везде уже unicode? К сожалению, унаследованные приложения выходят из эксплуатации намного медленнее, чем хотелось бы. Например, и сегодня используются томографы, не допускающие кириллицу в именах пациентов. При том, что информационная система, используемая тем же отделением, прекрасно кириллицу понимает. И оператору томографа нужно не просто позвать пациента на исследование, но и правильно записать его фамилию в какие-нибудь документы. Похожие ситуации могут встретится в разных местах.

То есть, возникает задача как-то передать текстовые данные в унаследованную систему, чтобы:
  • человек — оператор унаследованной системы смог прочесть полученный текст «по звучанию»
  • при необходимости можно было бы однозначно восстановить исходный кириллический текст

Чтобы не было скучно, добавим более подробных требований, связанных с совместимостью и простотой для человека:
  1. использовать только буквы в узком смысле, без знаков препинания и диакритических элементов (это заодно позволит сохранить регистр)
  2. каждую исходную букву преобразовывать независимо от остальных (без сложностей вроде «в начале / в конце слова» и т.п.)
  3. замены как можно более короткие, в идеале одно-буквенные
  4. правила обратного преобразованния как можно проще, например, замены должны соответствовать условию Фано
  5. близкие по звучанию замены, в представлении «обычного человека» — на практике это некая смесь из латыни, английской, французской, немецкой и, иногда, испанской фонетики

Конечно, перечисленное не совсем требования (кроме первых двух), а, скорее, эвристики.

Можно найти много готовых вариантов транслитерации кириллицы в латиницу. Но среди них не нашлось ничего, что бы удовлетворяло всем требованиям в приемлемой степени. То использует диакритические символы, как стандарты, то выбрасывает буквы (обычно «Ъ»), то предлагают необратимые (щ —> shch) или фонетически дикие (ш —> w) варианты замены, или имеют другие фатальные недостатки.

Значит, делаем свой велосипед. Собственно, нужно составить таблицу соответствия, и описать алгоритм преобразования туда и обратно.
Читать дальше →
Total votes 38: ↑31 and ↓7 +24
Views 54K
Comments 90

Обновляем расширение Intl в PHP 7 на Linux Ubuntu 16.04

PHP *Language localisation *Development for Linux *
Программисты делятся на два типа: консерваторы, для которых переход на новую версию равносилен перелёту на другую планету (если читаешь это из Windows XP — поздравляю, это ты); и Викторы Цои, чьи сердца и глаза требуют перемен, и обновляют всё и вся при первой возможности. Если ты второго типа, и у тебя уже стоит последняя версия PHP на последней LTS версии Ubuntu, но покоя не даёт то, что расширение Intl использует устаревшую версию библиотеки ICU, или тебе просто понравились картинки из «Аватара» — добро пожаловать под кат! (Картинок больше не будет.)

Аватар

Читать дальше →
Total votes 16: ↑16 and ↓0 +16
Views 24K
Comments 11

Искусство парсинга 2 или транслитерация собственной разметки

C++ *Algorithms *HTML *
Tutorial

+БОНУС: взаимное включение классов друг в друга в C++


Привет, Хабр! Эта статья — прямое продолжение статьи Искусство парсинга или DOM собственными руками, где мы разобрали HTML-документ и построили на его основе абстрактное синтаксическое дерево (AST) с доступом к любому элементу через индексацию при помощи лишь стандартной библиотеки C++, проще говоря, научились самостоятельно парсить XML-подобные штуки. Напомню, что процесс парсинга, или синтаксического анализа/разбора состоит из двух этапов: лексического разбора (разбора текста на токены) и построения AST. Если первый мы рассмотрели очень подробно, с примерами и исходниками, то описание второго похоже на пустую куколку бабочки, у которой есть только оболочка, а прекрасное содержимое автор извлёк перед публикацией. На то была причина, для HTML построить дерево действительно просто, нужно всего 4 класса: пустой тег, блок, текстовый узел и корень документа, наследуемый от блока. Сегодня мы оставим такую простоту позади и построим дерево, где свойства элементов, и пустых, и блочных, будут содержаться не в атрибутах тегов, а непосредственно в классах, а для этого классов придётся создать много. Действительно много. Строить будем не из простых известных языков разметки, а создадим свой, с правилами, показанными на изображении под катом. Плюс в конце ещё переведём, или, говоря правильнее, транслитируем документ с предыдущей статьёй, размеченной нашим языком, в HTML, а в качестве бонуса я отвечу начинающим программистам C++ на тривиальный, но труднонаходимый вопрос: как включать классы «друг в друга»?
Читать дальше →
Total votes 20: ↑17 and ↓3 +14
Views 6.1K
Comments 16

Как написать свой транслитератор

Образовательные проекты JetBrains corporate blog Machine learning *
Выпускница CS центра 2018 года, Дарья Родионова, рассказывает о транслитерации: что это такое, какие есть подходы к транслитерации, как создать свой транслитератор и как усовершенствовать модель.
Читать о транслитерации
Total votes 12: ↑12 and ↓0 +12
Views 5K
Comments 6

Юлия → Iuliia. Всё о транслитерации

Open source *Programming *Algorithms *Interfaces *
🔥 Technotext 2020

Транслитерация


Транслитерация — это запись кириллических слов латиницей (Анна → Anna, Самара → Samara). Её используют в загранпаспортах, водительских удостоверениях, трансграничной доставке, библиотечных каталогах и множестве других международных процессов.


Так вышло, что я недавно окунулся в эту тему, а в Википедии она раскрыта слабо. Поэтому расскажу, что к чему (спойлер — если вы думаете, что с транслитерацией всё плохо, то на самом деле всё ещё хуже).


И конечно, поскольку это Хабр — предложу open-source библиотеки для решения проблемы.

Читать дальше →
Total votes 193: ↑192 and ↓1 +191
Views 50K
Comments 538

Интернационализация поиска по городским адресам. Реализуем русскоязычный Soundex на Sphinx Search

Search engines *Open source *Sphinx *Algorithms *Regular expressions *

Как много в вашем городе иностранных туристов? В моём мало, но встречаются, как правило стоят потерянные посреди улицы и повторяют одно единственное слово – название чего бы то ни было. А прохожие пытаются им на пальцах объяснить куда пройти, а когда «моя твоя не понимать» – берут за руку и ведут к пункту назначения. Как это не удивительно, обычно цель в пяти минутах ходьбы, т.е. какое-то примерное представление о городе эти туристы всё же имели. Может по бумажной карте ориентировались.

А как часто лично вы оказывались в такой ситуации, в незнакомом городе в другой стране?

Появление смартфонов и приложений для навигации решило много проблем. Ура, можно посмотреть свою геолокацию, можно найти куда идти, прикинуть в каком направлении и даже проложить маршрут.

Осталась одна проблема: все улицы в приложении подписаны местными иероглифами на местном наречии, и ладно если в стране пребывания принята латиница, клавиатура на латинице есть во всех смартфонах и мир к ней привык, и то я испытывал дискомфорт, из-за диакритических знаков, принятых в чешском алфавите. А боль и страдания иностранцев, видящих кириллицу, могу только представить, посмотрите псевдокириллицу и поймёте. Если бы я оказался на их месте, я бы писал названия и адреса латиницей, пытаясь воспроизвести звучание - фонетический поиск.

В публикации опишу как реализовать фонетические алгоритмы поиска Soudex на движке Sphinx Search. Одной транслитерацией здесь не обойдётся, хотя и без неё никуда. Получившийся конфигурационный файл, доступен на GitHub Gist.

Длиннопост
Total votes 8: ↑8 and ↓0 +8
Views 2.1K
Comments 6

Продолжаем интернационализацию поиска по адресам с помощью Sphinx или Manticore. Теперь Metaphone

Search engines *Open source *Sphinx *Algorithms *Regular expressions *

Это продолжение публикации «Интернационализация поиска по городским адресам. Реализуем русскоязычный Soundex на Sphinx Search», в которой я разбирал, как реализовать поддержку фонетических алгоритмов Soundex в Sphinx Search, для текста написанного кириллицей. Для текста на латинице поддержка Soundex уже есть. С Metphone аналогично, для латиницы есть, для кириллицы не очень, но попытаемся исправить этот досадный факт с помощью транслитерации, регулярных выражений и напильника.

Это прямое продолжение, в котором разберём как реализовать оригинальный Metaphone, русский Metaphone (в том смысле что транслитерация не понадобится), Caverphone, и не сможем сделать Double Metaphone.

Реализация подойдёт как для использования на платформе Sphinx Search, так и Manticore Search.

В конце, посмотрим как Metaphone воспримет "ракомакофон".

Продолжаем...
Total votes 1: ↑1 and ↓0 +1
Views 2.4K
Comments 2