LINUX.ORG.RU

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

 ,


0

1

Как выполнить транслитерацию с латиницы на кириллицу? Я кириллицы на латиницу достаточно было раздробить слово на буквы и подобрать по словарю соответствующие замены. А обратно sh превращается не в «ш», а в сх.

Ситуацию портит то, что многие слова написаны не по госту.

★★★★★

Последнее исправление: steemandlinux (всего исправлений: 1)
  1. снизить вариативность набора - заставить пользователей писать по шаблону (для букв - кнопки)

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

bvn13 ★★★★★
()
Ответ на: комментарий от bvn13

1. сразу отпадает

2. да вот есть у меня идея использовать левенштейна, pymorphy2 и полный список существующих в стране имен и фамилий, только хз что выйдет с производительностью. Интересно есть ли более простой способ.

steemandlinux ★★★★★
() автор топика

сделать сначала «транслитерацию» многобуквенных сочетаний т.е. sh - ш, и только после этого сделать транслитерацию символов.
т.е сначала заменится sh -> ш а уже потом s -> с и h -> х. никто друг другу мешать не будет.

pfg ★★★★★
()

найти того, кто придумал хранить фио в транслите, оторвать руки, заставить юзеров ввести свои данные заново.

опционально можно отсеять те варианты, где обратная транслитерация выполняется однозначно, но лучше предложить пользователю вариант по умолчанию при вводе.

MyTrooName ★★★★★
()
Ответ на: комментарий от MyTrooName

найти того, кто придумал хранить фио в транслите, оторвать руки, заставить юзеров ввести свои данные заново.

Их больше миллиона :D

steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от Darth_Revan

Так это не русские слова, а английские.

steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от steemandlinux

да не.
если говорить регекспом, то сначала проходишь по тексту заменами 's/sh/ш/' 's/ch/ч/' и т.д. а уже только потом 'tr/csh/цсх/' (ну и все остальные символы)

хотя согласен с Darth_Revan, все равно могут проявится косяки. к примеру «схема» - «shema» - «шема» :) тут либо колхозить свой велосипед со словарем, либо валидировать тексты после конвертации.

pfg ★★★★★
()
Ответ на: комментарий от bvn13

Это при условии что транслитерация правильная. Только мало кто пишет skh. У меня такое подозрение, что проще использовать Закон Паретто и забить на них.

steemandlinux ★★★★★
() автор топика

какая-то забавная херня. Я за прошедшую неделю уже 3 раз от третьего человека слышу этот вопрос про трансляцию фамилий и имен. Волны какие-то космические чтоль? Что все бросились фамилии переводить в кириллицу?

anonymous
()
Ответ на: комментарий от anonymous

Я за прошедшую неделю уже 3 раз от третьего человека слышу этот вопрос про трансляцию фамилий и имен.

В каком-нить ПТУ лабу задали.

debugger ★★★★★
()

Без словаря никак, если транслитерация не взаимно однозначная.

А обратно sh превращается не в «ш», а в сх.

Начинаешь с самого длинного буквосочетания и до литеры. То есть сперва все тетраграфы, потом триграфы, потом диграфы и в конце одиночные буквы. Другое дело, что так или иначе возникает неоднозначность, например если Щ латинизировали как ШЧ (SHCH), то похерится слово веснушчатый, а если как СЧ (SCH), то счастье. Плюс pain in the ass причиняют разделительные знаки. Короче, без словаря никак.

И да, Х вроде транслитерируют все же как KH, а не H.

Thetan ★★★
()
Ответ на: комментарий от Thetan

Я вот понять не могу, сделал я словарь от тетра до одиночных букв. Прогнал по ним слово, проверил в словаре и не нашел слова. Как сменить комбинацию элементов? Скажем до этого пробовал три в начале, три в конце, а потом уже два в начале, три в конце. Сделать матрицу с привязкой индексов букв слова к элементам словаря?

steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от steemandlinux

сочини какую-нибудь сказку

«в целях защиты личной информации», «уточнение данных», «заполните анкету и получите 50 баллов на счет», «из-за недавно вышедшего закона».

отрежешь от миллиона 10 раз по половине - останется 1000, а дальше можно и вручную

те, где нет неоднозначных сочетаний, можно заранее автоматически обработать, но таких процентов 10 наберется. любая фигня вроде «c», «x», «sh», даже «z» и «h» - уже может сфейлить. ov/off, ski/skaya/итп - тоже развлекуха та еще

MyTrooName ★★★★★
()
Ответ на: комментарий от steemandlinux

Можешь генерировать все возможные комбинации и проверять.

TheKnight ★★★
()
Ответ на: комментарий от tz4678

Levenshtein distance скорее про нахождение опечаток, но это быстрее чем разобраться с word2vec.

xpahos ★★★★★
()
Ответ на: комментарий от steemandlinux

Тут не могу помочь, не спец.

словарь от тетра до одиночных букв проверил в словаре и не нашел слова

Надеюсь речь о разных словарях.

Вообще мне более правильным кажется подход словаря из исключений. Допустим, перед тобой слово Andrei. Самый обычный вариант написания имени Андрей латиницей. Но перевод по правилам дает Андреи, что уже неправильно. Поэтому сперва ищем идентичное слово в словаре, находим соответствие Andrei -> Андрей и заменяем слово целиком.

Плюс есть несчастная буква ы, которая обычно латинизируется как y (игрек), но на ту же латинскую букву заменяется и й. В итоге либо у тебя Сергеы, либо Мартйнов. Также не забываем про е, ё, ю, я и их сочетания с ь и ъ.

Это я все к тому, что ты пишешь, что нет единых правил. Нет правил — нет вообще ничего. Одни закономерности. j это й или ж? Поэтому и пытаются придумать обратимые транслитерации, но каждое ведомство идет кто в лес, кто по дрова. В итоге на банковской карте моя знакомая Nadezhda, а на загране Nadejda. Или наоборот, уже не помню.

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

Опять-таки, мимо проходил, если что.

Thetan ★★★
()
Ответ на: комментарий от tz4678

все же очень просто: чем больше букв, тем приоритетнее (выше)

tz4678 ★★
()
Ответ на: комментарий от tz4678

Это не будет работать. Я имею в виду shch->щ и kh->х может и получится, но вот остальное явно нет. И по-моему по правилам транслитерации ej пишется же? Потому что j это и краткое, а y вообще ы.

anonymous
()
Ответ на: комментарий от anonymous

тогда просто оставить все как есть и не париться

tz4678 ★★
()
Ответ на: комментарий от anonymous

И по-моему по правилам транслитерации ej пишется же?

В том-то и дело, что нет правил единых.

Thetan ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.