Форум: "Основная";
Текущий архив: 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.47 MB
Время: 0.009 c