Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];

Вниз

Перевод с транслита   Найти похожие ветки 

 
ilg   (2002-11-25 11:07) [0]

Здравствуйте!
Подскажите пожалуйста алгоритм перевода строки с транслита на русский... Может кто-нибудь сталкивался с подобной проблемой?
Заранее, Большое спасибо!


 
deflorator2   (2002-11-26 16:31) [1]

Удалено модератором


 
Smithson   (2002-11-26 16:34) [2]

>> deflorstor2 Фффууу
>> ilg
Рисуешь два массива. В одном буквы на транслите, в другом - на русском. Если символ есть в первом массиве, то подставляешь значение из второго. Но вообще-то мог бы и сам додуматься, чай не Америку открыть.


 
Ilg   (2002-11-26 18:19) [3]

>>deflorator2... Зато ты у нас умный :-( И вообще, зачем надо отвечать, если ничего умного сказать не можешь?

Все было бы так легко, если бы не было так сложно...
Порцедуру перевода с русского на транслит я написал за 5 минут (по алгоритму, похожему на тот, что подсказал Smithson)... Но при обратном переводе (с транслита на русский) есть проблемы, например:
1) Значение русской буквы на транслите может состоять из двух и даже трех символов...
2) Значения букв могут быть похожи, например sh=сх или sh=ш?
и т. д.


 
tv   (2002-11-26 18:34) [4]

Такую програму сделать сложно, так как у каждого свои правила транслита, кто как хочет так и пишет. Просто при создании транслитерного вражения нужно сначала создать единственные правила написания, а потом уже тем же способом, что предложил Smithson делать перевод. И то получится грубо.
А так нужно подключать модуль проверки орфографии с автозаменой (как в ворде).


 
sancho   (2002-11-27 21:54) [5]

А может кто даст исходник посмотреть?
Линк или на мыло?
Заранее с.п.б.


 
Arkan   (2002-11-27 22:16) [6]

function TForm2.Transliterate(s: string): string;
var
i: integer;
t: string;
begin
for i:=1 to length(s) do begin
case s[i] of
//lowercase
"а": t:=t+"a";
"б": t:=t+"b";
"в": t:=t+"v";
"г": t:=t+"g";
"д": t:=t+"d";
"е": t:=t+"e";
"ё": t:=t+"ye";
"ж": t:=t+"zh";
"з": t:=t+"z";
"и": t:=t+"i";
"й": t:=t+"y";
"к": t:=t+"k";
"л": t:=t+"l";
"м": t:=t+"m";
"н": t:=t+"n";
"о": t:=t+"o";
"п": t:=t+"p";
"р": t:=t+"r";
"с": t:=t+"s";
"т": t:=t+"t";
"у": t:=t+"u";
"ф": t:=t+"f";
"х": t:=t+"ch";
"ц": t:=t+"z";
"ч": t:=t+"ch";
"ш": t:=t+"sh";
"щ": t:=t+"ch";
"ъ": t:=t+"""";
"ы": t:=t+"y";
"ь": t:=t+"""";
"э": t:=t+"e";
"ю": t:=t+"yu";
"я": t:=t+"ya";
//UPPERCASE
"А": T:=T+"A";
"Б": T:=T+"B";
"В": T:=T+"V";
"Г": T:=T+"G";
"Д": T:=T+"D";
"Е": T:=T+"E";
"Ё": T:=T+"Ye";
"Ж": T:=T+"Zh";
"З": T:=T+"Z";
"И": T:=T+"I";
"Й": T:=T+"Y";
"К": T:=T+"K";
"Л": T:=T+"L";
"М": T:=T+"M";
"Н": T:=T+"N";
"О": T:=T+"O";
"П": T:=T+"P";
"Р": T:=T+"R";
"С": T:=T+"S";
"Т": T:=T+"T";
"У": T:=T+"U";
"Ф": T:=T+"F";
"Х": T:=T+"Ch";
"Ц": T:=T+"Z";
"Ч": T:=T+"Ch";
"Ш": T:=T+"Sh";
"Щ": T:=T+"Ch";
"Ъ": T:=T+"""";
"Ы": T:=T+"Y";
"Ь": T:=T+"""";
"Э": T:=T+"E";
"Ю": T:=T+"Yu";
"Я": T:=T+"Ya";
else
t:=t+s[i];
end;
end;
Result:=t;
end;


 
sancho   (2002-11-28 21:39) [7]

так это вроде как с русского на транслит, просили-то с транслита на русский!
ЗЫ Всё равно спасибо
> Arkan ©



 
Arkan   (2002-11-28 22:24) [8]

сам переделаешь :)
Санчо, а ты случайно не с NHT?


 
AK-74   (2002-11-28 23:25) [9]

Алгоритм обратного перевода отличается настолько, что просто "переделать" из вышенаписанного его не получится. Вот он:

l: array of string = ("ssh","sh","s","ja","j"...);
r: array of string = ("щ","ш","с","я","й"...);

function LatRus(ls: string) : string;
var
i,j: integer;
begin
i:=1;
Result :="";
while i<=length(ls) do
for j:=0 to Length(l) do
if Copy(ls,i,Length(l[j]))=l[j] then begin
rs := Result + r[j];
i := i + Length(l[j]);
break;
end;
end;


Этот алгоритм подходит и для перевода римских чисел в арабские. Осторожно: здесь не хватает проверки на отсутствие символа в массиве l.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
14-28198
Txxx
2002-11-20 01:13
2002.12.09
Загадочный сканер....?!


1-28074
alvin
2002-11-28 07:28
2002.12.09
Файлы ресурсов


1-28085
BThorn
2002-11-28 09:48
2002.12.09
Как создать указатель не на сам TEdit, а на его свойство Text?


14-28251
Линуксоид
2002-11-18 13:08
2002.12.09
Русский шрифт в Linux


1-28101
Начинающий програмер
2002-11-27 16:13
2002.12.09
Интеграция в Винды





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский