Текущий архив: 2004.10.24;
Скачать: CL | DM;
ВнизНету ли в природе программы транслитерации русских символов? Найти похожие ветки
← →
Игорь Шевченко © (2004-10-05 16:35) [0]Ищется исходный текст программы транслитерации русских символов в латинские и обратно. Крайне желательно с поддержкой четырех стандартов транслитерации (ГОСТ 16876-71, Library of Congress USA (Library of Congress Slavic (Russian) Transliteration), Princeton University Library"s (Princeton University Library"s Russian Transliteration), Система транслитерации Traveller"s Yellow Pages Transliteration).
Совсем хорошо будет, если еще и поддерживается ГОСТ 7.79-2001.
Хотелось бы, чтобы программа была Freeware :)
← →
Layner © (2004-10-05 16:38) [1]RusCoder&Repair 1.2 beta For Win9x & WinNT Freeware
← →
Layner © (2004-10-05 16:39) [2]А... тут ещё исходнико подавай... тогда не знаю...
← →
KilkennyCat © (2004-10-05 16:42) [3]у меня есть только эти стандарты. Нужны?
← →
1008 © (2004-10-05 16:46) [4]http://delphibase.endimus.com/
← →
Игорь Шевченко © (2004-10-05 16:52) [5]KilkennyCat © (05.10.04 16:42) [3]
Стандарты у меня тоже есть :) Просто я думаю, вдруг велосипед уже изобретен ? :)
1008 © (05.10.04 16:46) [4]
Смотрел, не увидел. Ссылочку поточнее ?
← →
1008 © (2004-10-05 16:56) [6]http://delphibase.endimus.com/?action=viewfunc&topic=strconvert&id=10370
← →
KilkennyCat © (2004-10-05 16:59) [7]а давайте я напишу... к утру готово будет, а то один хрен, мой проект стоит, надо отвлечься...
← →
pasha_golub © (2004-10-05 17:04) [8]Hieroglyph 2.7
← →
Игорь Шевченко © (2004-10-05 17:09) [9]KilkennyCat © (05.10.04 16:59) [7]
Я так только за :)
1008 © (05.10.04 16:56) [6]
Я вообще-то несколько иное имел в виду. Этот топик я видел.
← →
Jeer © (2004-10-05 17:21) [10]Мои студенты это в качестве разминки перед практическими занятиями писали на JScript:)
// Add dict
dict1.add("А","a")
dict1.add("Б","b")
dict1.add("В","v")
dict1.add("Г","g")
dict1.add("Д","d")
dict1.add("Е","e")
dict1.add("Ё","jo")
dict1.add("Ж","zh")
dict1.add("З","z")
← →
Игорь Шевченко © (2004-10-05 17:29) [11]Jeer © (05.10.04 17:21) [10]
Я ж говорил, может, кто уже изобрел велосипед.
← →
}|{yk © (2004-10-05 17:40) [12]Могу дать исходники своего полу-"универсального" перекодировщика (на С++Builder 6), правда С++Builder нету
← →
Игорь Шевченко © (2004-10-05 17:42) [13]}|{yk © (05.10.04 17:40) [12]
Если он поддерживает те стандарты, о которых я писал в самом первом посте, то милости просим. whitefranz@hotmail.com
← →
}|{yk © (2004-10-05 17:46) [14]Нет, он позволяет самому создавать таблицы перекодировки
← →
Игорь Шевченко © (2004-10-05 17:56) [15]}|{yk © (05.10.04 17:46) [14]
Тут задача такая, что при обратной перекодировке нескольким символам исходного текста может соответствовать один символ результата. Твой перекодировщик это умеет ?
← →
Amoeba © (2004-10-05 17:56) [16]Есть готовый перекодировщик - Shtirlitz называется.
http://softsearch.ru/programs/58-697-shtirlitz-download.shtml
← →
Игорь Шевченко © (2004-10-05 17:59) [17]Amoeba © (05.10.04 17:56) [16]
Ищется исходный текст. Для вставки в свою программу.
"Недостатки: 1. идиотская навязчивая реклама в отдельном
всплывающем окне " - оно мне не подходит, спасибо.
← →
}|{yk © (2004-10-05 17:59) [18]Нет, такого не предусматривалось
← →
QuasiLamo © (2004-10-05 19:01) [19]пунтосвинчес кажись чего та там транслитерирует
← →
Igorek © (2004-10-05 20:27) [20]
> Игорь Шевченко © (05.10.04 17:56) [15]
> }|{yk © (05.10.04 17:46) [14]
>
> Тут задача такая, что при обратной перекодировке нескольким
> символам исходного текста может соответствовать один символ
> результата.
А неоднозначностей не может быть?
← →
panov © (2004-10-05 20:34) [21]
function RE(const Src: String): String;
var
i: Integer;
begin
Result := "";
for i := 1 to Length(Src) do
begin
case Src[i] of
"ё": Result := Result + "jo";
"Ё": Result := Result + "JO";
"""": Result := Result + "*";
"А".."я": Result := Result + aR[Ord(Src[i])];
else
Result := Result + Src[i];
end;
end;
end;
function ER(const Src: String): String;
var
i: Integer;
Len: Integer;
begin
Result := "";
Len := Length(Src);
i := 1;
while i<=Len do
begin
case Src[i] of
"a": Result := Result + "а";
"b": Result := Result + "б";
"v": Result := Result + "в";
"g": Result := Result + "г";
"d": Result := Result + "д";
"e":
begin
if (i=Len) or (Src[i+1]<>"h") then
begin
Result := Result + "е";
Inc(i);
Continue;
end;
if Src[i+1]="h" then Result := Result + "э";
Inc(i);
end;
"j":
begin
if (i=Len) or (not (Src[i+1] in ["o","j","u","a"])) then
begin
Result := Result + Src[i];
Inc(i);
Continue;
end;
case Src[i+1] of
"o": Result := Result + "ё";
"j": Result := Result + "й";
"u": Result := Result + "ю";
"a": Result := Result + "я";
end;
Inc(i);
end;
"z":
begin
if (i=Len) or (Src[i+1]<>"h") then
begin
Result := Result + "з";
Inc(i);
Continue;
end;
if Src[i+1]="h" then Result := Result + "ж";
Inc(i);
end;
"i": Result := Result + "и";
"k":
begin
if (i=Len) or (Src[i+1]<>"h") then
begin
Result := Result + "к";
Inc(i);
Continue;
end;
if Src[i+1]="h" then Result := Result + "х";
Inc(i);
end;
"l": Result := Result + "л";
"m": Result := Result + "м";
"n": Result := Result + "н";
"o": Result := Result + "о";
"p": Result := Result + "п";
"r": Result := Result + "р";
"s":
begin
if (i=Len) or (Src[i+1]<>"h") then
begin
Result := Result + "с";
Inc(i);
Continue;
end;
if (i+1=Len) or (Src[i+2]<>"h") then
begin
Result := Result + "ш";
Inc(i,2);
Continue;
end;
if Src[i+2]="h" then
begin
Result := Result + "щ";
end;
Inc(i,2);
end;
"t": Result := Result + "т";
"u": Result := Result + "у";
"f": Result := Result + "ф";
"c":
begin
if (i=Len) or (Src[i+1]<>"h") then
begin
Result := Result + "ц";
Inc(i);
Continue;
end;
if Src[i+1]="h" then Result := Result + "ч";
Inc(i);
end;
""": Result := Result + "ъ";
"y": Result := Result + "ы";
"""": Result := Result + "ь";
"*": Result := Result + """";
"A": Result := Result + "А";
"B": Result := Result + "Б";
"V": Result := Result + "В";
"G": Result := Result + "Г";
"D": Result := Result + "Д";
"E":
begin
if (i=Len) or (Src[i+1]<>"H") then
begin
Result := Result + "Е";
Inc(i);
Continue;
end;
if Src[i+1]="H" then Result := Result + "Э";
Inc(i);
end;
"J":
begin
if (i=Len) or (not (Src[i+1] in ["O","J","U","A"])) then
begin
Result := Result + Src[i];
Inc(i);
Continue;
end;
case Src[i+1] of
"O": Result := Result + "Ё";
"J": Result := Result + "Й";
"U": Result := Result + "Ю";
"A": Result := Result + "Я";
end;
Inc(i);
end;
"Z":
begin
if (i=Len) or (Src[i+1]<>"H") then
begin
Result := Result + "З";
Inc(i);
Continue;
end;
if Src[i+1]="H" then Result := Result + "Ж";
Inc(i);
end;
"I": Result := Result + "И";
"K":
begin
if (i=Len) or (Src[i+1]<>"H") then
begin
Result := Result + "К";
Inc(i);
Continue;
end;
if Src[i+1]="H" then Result := Result + "Х";
Inc(i);
end;
"L": Result := Result + "Л";
"M": Result := Result + "М";
"N": Result := Result + "Н";
"O": Result := Result + "О";
"P": Result := Result + "П";
"R": Result := Result + "Р";
"S":
begin
if (i=Len) or (Src[i+1]<>"H") then
begin
Result := Result + "С";
Inc(i);
Continue;
end;
if (i+1=Len) or (Src[i+2]<>"H") then
begin
Result := Result + "Ш";
Inc(i,2);
Continue;
end;
if Src[i+2]="H" then
begin
Result := Result + "Щ";
end;
Inc(i,2);
end;
"T": Result := Result + "Т";
"U": Result := Result + "У";
"F": Result := Result + "Ф";
"C":
begin
if (i=Len) or (Src[i+1]<>"H") then
begin
Result := Result + "Ц";
Inc(i);
Continue;
end;
if Src[i+1]="H" then Result := Result + "Ч";
Inc(i);
end;
"Y": Result := Result + "Ы";
else
Result := Result + Src[i];
end;
Inc(i);
end;
end;
← →
panov © (2004-10-05 20:35) [22]
const aR:array[$c0..$ff] of String=
(
"A","B","V","G","D","E","ZH","Z",
"I","JJ","K","L","M","N","O","P",
"R","S","T","U","F","KH","C","CH",
"SH","SHH",""","Y","""","EH","JU","JA",
"a","b","v","g","d","e","zh","z",
"i","jj","k","l","m","n","o","p",
"r","s","t","u","f","kh","c","ch",
"sh","shh",""","y","""","eh","ju","ja"
);
← →
Тестировщица © (2004-10-05 22:19) [23]2panov
тогда уж лучше так:
function Translate(const s:string; Flag:boolean=True):string;
type
TArray=array["À".."ÿ"] of string;
const
//GOST 16876-71
LA1:TArray =(
"A","B","V","G","D","E","ZH","Z","I","JJ","K","L",
"M","N","O","P","R","S","T","U","F","KH","C","CH",
"SH","SHH",""","Y","""","EH","JU","JA",
"a","b","v","g","d","e","zh","z","i","jj","k","l",
"m","n","o","p","r","s","t","u","f","kh","c","ch",
"sh","shh",""","y","""","eh","ju","ja");
// GOST 7_79—2001
LA2:TArray =(
"A","B","V","G","D","E","ZH","Z","I","J","K","L",
"M","N","O","P","R","S","T","U","F","X","C","CH",
"SH","SHH","`","Y`","``","E`","YU","YA",
"a","b","v","g","d","e","zh","z","i","j","k","l",
"m","n","o","p","r","s","t","u","f","x","c","ch",
"sh","shh","`","y`","``","e`","yu","ya");
var i,L:integer;
LA:TArray;
begin
if Flag then LA:=LA2 else LA:=LA1;
result:="";
L:=Length(s);
for i:=1 to L do
case s[i] of
"Ё": if Flag then result := result+"YO" else result := result+"JO";
"ё": if Flag then result := result+"yo" else result := result+"jo";
"А".."я": result := result + LA[s[i]];
else result :=result+s[i];
end;
← →
Тестировщица © (2004-10-05 22:21) [24]упс... последний end потерялся -)))
← →
DiamondShark © (2004-10-05 22:44) [25]А можно мне сами стандарты?
← →
Наталия © (2004-10-06 07:54) [26]DiamondShark © (05.10.04 22:44) [25]
Отправила
← →
Danilka © (2004-10-06 10:08) [27]В DMClient есть такая функция на js:
function TranslitDecoder() {
var rus = new Array("Аська","ш", "ч", "Ш", "Ч", "Ш", "Ч", "Я", "я", "к","в","е","р","т","ю","у","и","о","п","л","к","ж","х","г","ф","д","с","а","з","икс","с","в","б","н","м","К","В","Е","Р ","Т","Ю","У","И","О","П","Л","К","Ж","Х","Г","Ф","Д","С","А","З","ИКС","С","В","Б","Н","М","ь");
var tr = new Array("ICQ", "sh","ch","Sh","Ch","SH","CH","Ya","ya","q","w","e","r","t","y","u","i","o","p","l","k","j","h","g","f","d","s","a","z", "x", "c","v","b","n","m","Q","W","E","R","T","Y","U","I","O","P","L","K","J","H","G","F","D","S","A","Z","X", "C","V","B","N","M",""");
if ((document.selection.createRange() != null)&&(document.selection.createRange().text != "")) {
var str = document.selection.createRange().text;
var str2;
for (i=0; i<rus.length; i++) {
str2=str.replace(tr[i],rus[i]);
while (str2 != str) {
str = str2;
str2=str.replace(tr[i],rus[i]);
}
}
document.F1.text.value = document.F1.text.value+str;
} else alert("Не выделен текст!\nСперва выдели текст, который хочешь перевести, затем дави сюда.");
}
:))
Смысл такой - все сочетания символов расставляются в массиве в порядке приоритетов, например, sh стоит первее чем s и h, поэтому сначала будут переведены все такие сочетания, а затем уже отдельные буквы s и h.
Правда, в данном случае, в словаре никаких стандартов нет, писалось на скорую руку и тестировалось на транслите, который Ru писал год назад, когда ему перехотелось на русском писать. :))
← →
Игорь Шевченко © (2004-10-06 10:21) [28]Igorek © (05.10.04 20:27) [20]
> А неоднозначностей не может быть?
Как минимум, один из стандартов (ГОСТ 16876-71) является симметричным. За остальные сказать не могу.
← →
Danilka © (2004-10-06 10:39) [29][28] Игорь Шевченко © (06.10.04 10:21)
Какой объем переводимого текста? Если небольшой, килобайт например, то мой алгоритм нормально отработает, если большой, боюсь, тормоза будут.
А словари можно забить для любого стандарта.
← →
TUser © (2004-10-06 11:04) [30]
> у меня есть только эти стандарты. Нужны?
На самом деле было бы крайне интересно. У меня один только какой-то ГОСТ валяется, а про остальные я первый раз слышу. Дайте ссылку, plz.
← →
DiamondShark © (2004-10-06 11:05) [31]
> Наталия © (06.10.04 07:54) [26]
Спасибо!
← →
Игорь Шевченко © (2004-10-06 11:06) [32]Danilka © (06.10.04 10:39) [29]
> Какой объем переводимого текста?
Для начала - одна фамилия :))
← →
Danilka © (2004-10-06 11:14) [33][32] Игорь Шевченко © (06.10.04 11:06)
Тогда, подойдет вот-этот алгоритм: [27] Danilka © (06.10.04 10:08)
:))
А сделать так чтобы переводил с русского на транслит, достаточно поменять местами массивы в replace. А так, там просто идея, можно сделать как угодно, например, общий кодировщик, на вход которого подается строка и ссылки на два массива, один откуда надо кодировать, другой во что. :))
← →
Игорь Шевченко © (2004-10-06 11:19) [34]Danilka © (06.10.04 11:14) [33]
> Тогда, подойдет вот-этот алгоритм: [27] Danilka © (06.10.04
> 10:08)
К сожалению, ключевым словом является "фамилия". Потому я и искал программу, которая много стандартов поддерживает.
← →
ArMellon © (2004-10-06 11:23) [35]И мне можно тоже сами стандарты , если не трудно скиньте на ArMellon@Rambler.ru
← →
Danilka © (2004-10-06 11:26) [36][34] Игорь Шевченко © (06.10.04 11:19)
Можно тогда мне прислать эти стандарты? Честно говоря, я пока не вижу сложностей - написать свои массивы для каждого из стандартов и все.
← →
Игорь Шевченко © (2004-10-06 11:32) [37]Danilka © (06.10.04 11:26) [36]
http://www.langust.ru/etc/translit.shtml
← →
}|{yk © (2004-10-06 11:33) [38]Тут лучше использовать С++ и STL, там есть понятие пар
← →
Danilka © (2004-10-06 11:43) [39][37] Игорь Шевченко © (06.10.04 11:32)
Спасибо.
Угу, вот-это: "Правила международной транслитерации русских собственных имен" будет проблематично таким способом переводить. Из-за условий, например, е переводить как e или je. В принципе, возможно, но словарь будет большой..
[38] }|{yk © (06.10.04 11:33)
Шутник. :))
← →
Danilka © (2004-10-06 11:47) [40][37] Игорь Шевченко © (06.10.04 11:32)
А для остальных стандартов описать словари легко.
Кроме того, "Правила международной транслитерации русских собственных имен" не подходит, т.к. там, в ряде случаев, используются не латинские буквы.
← →
Игорь Шевченко © (2004-10-06 11:50) [41]Danilka © (06.10.04 11:47) [40]
> "Правила международной транслитерации русских собственных
> имен" не подходит, т.к. там, в ряде случаев, используются
> не латинские буквы.
В загранпаспортах и на авиабилетах (откуда, собственно и задача возникла) используются только латинские буквы
← →
Deep © (2004-10-06 12:09) [42]
> Игорь Шевченко ©
уж не для мобильных операторов(sms-ок) софт пишеим? :)
← →
Суслик © (2004-10-06 12:11) [43]
> уж не для мобильных операторов(sms-ок) софт пишеим? :)
ИШ авиатор.
← →
Sergey_Masloff (2004-10-06 12:29) [44]Игорь Шевченко © (06.10.04 11:50) [41]
>В загранпаспортах и на авиабилетах
Не знаю может подойдет... Если учесть что 40% выезжающих за рубеж едут с нашими полисами и случаев заворота от посольств и таможен не припомню - может это подойдет? Обратной задачи не было поэтому только в лат.
function MakeLatin(s :string) :string;
const
rus_a="АБВГДЖЗИКЛМНОПРСТУФХЕЁЫЙЭЪ";
lat_a="ABVGDJZIKLMNOPRSTUFHEEYIEJ";
var
p :string;
n, i :Integer;
begin
p:=AnsiUpperCase(s)+" ";
while TRUE do
begin
n:=Pos("Я",p);
if n>0 then p:=Copy(p,1,n-1)+"YA"+Copy(p,n+1,255) else Break;
end;
while TRUE do
begin
n:=Pos("Ч",p);
if n>0 then
if (Copy(p,n-1,1)=" ") or (Copy(p,n+1,1)=" ") or (n=1) then
p:=Copy(p,1,n-1)+"CH"+Copy(p,n+1,255)
else
p:=Copy(p,1,n-1)+"TCH"+Copy(p,n+1,255)
else Break;
end;
while TRUE do
begin
n:=Pos("Ю",p);
if n>0 then p:=Copy(p,1,n-1)+"YU"+Copy(p,n+1,255) else Break;
end;
while TRUE do
begin
n:=Pos("Ш",p);
if n>0 then p:=Copy(p,1,n-1)+"SH"+Copy(p,n+1,255) else Break;
end;
while TRUE do
begin
n:=Pos("Щ",p);
if n>0 then p:=Copy(p,1,n-1)+"SCH"+Copy(p,n+1,255) else Break;
end;
while TRUE do
begin
n:=Pos("Ц",p);
if n>0 then p:=Copy(p,1,n-1)+"TS"+Copy(p,n+1,255) else Break;
end;
while TRUE do
begin
n:=Pos("Х",p);
if n>0 then
if (Copy(p,n-1,1)<="A") or (n=1) then
p:=Copy(p,1,n-1)+"H"+Copy(p,n+1,255)
else
p:=Copy(p,1,n-1)+"KH"+Copy(p,n+1,255)
else Break;
end;
while TRUE do
begin
n:=Pos("Ж",p);
if n>0 then
if (Copy(p,n-1,1)<="A") or (n=1) then
p:=Copy(p,1,n-1)+"J"+Copy(p,n+1,255)
else
p:=Copy(p,1,n-1)+"ZH"+Copy(p,n+1,255)
else Break;
end;
while TRUE do
begin
n:=Pos("ИЙ",p);
if n>0 then p:=Copy(p,1,n-1)+"Y"+Copy(p,n+2,255) else Break;
end;
while TRUE do
begin
n:=Pos("ЫЙ",p);
if n>0 then p:=Copy(p,1,n-1)+"YI"+Copy(p,n+2,255) else Break;
end;
i:=1;
while i<=Length(p) do
begin
if p[i]="Ь" then begin Delete(p,i,1); Continue; end;
n:=Pos(p[i],rus_a); if n>0 then p[i]:=lat_a[n];
i:=i+1;
end;
Result:=Trim(p);
end;
← →
VictorT © (2004-10-06 12:31) [45]Из моего клиента, правда на Си. А передалывал, если не ошибаюсь, из функции, взятой из UBPFD. Т.е. там она должна быть на дельфях. В моём варианте, если не ошибаюсь по Госту.
CString CDeepBrowserDlg::translit(CString str)
{
CString RArrayL("абвгдеёжзийклмнопрстуфхцчшщьыъэюя");
CString RArrayU("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ");
char arr[][33][5] =
{{"a","b","v","g","d","e","yo","zh","z","i","j",
"k","l","m","n","o","p","r","s","t","u","f",
"h","c","ch","sh","sch",""","y",""","e","yu","ya"},
{"A","B","V","G","D","E","Yo","Zh","Z","I","J",
"K","L","M","N","O","P","R","S","T","U","F",
"H","C","Ch","Sh","Sch",""","Y",""","E","Yu","Ya"}};
long p;
char d;
CString result = "";
long LenS = str.GetLength();
for (long i = 0; i < LenS; i++) {
d = 0;
p = RArrayL.Find(str.GetAt(i));
if (p == -1) {
p = RArrayU.Find(str.GetAt(i));
d = 1;
}
if (p != -1)
result = result + arr[d][p];
else
result = result + str.GetAt(i); //если не русская буква, то берем исходную
}
return result;
}
← →
Игорь Шевченко © (2004-10-06 12:36) [46]Sergey_Masloff (06.10.04 12:29) [44]
Сергей, спасибо, мне преимущественно обратная перекодировка требуется.
VictorT © (06.10.04 12:31) [45]
Это не ГОСТ, насколько я могу судить. Кроме того, мне интереснее обратная перекодировка.
← →
Danilka © (2004-10-06 12:55) [47][41] Игорь Шевченко © (06.10.04 11:50)
Тогда, скорее всего, используется что-то другое, например, ГОСТ или ИСО.
А как на билетах пишут Евгений? На водительских правах пишут EVGENY, хотя по тем правилам должны писать JEVGENIY.
Если используется ГОСТ или ИСО, то мой алгоритм подойдет запросто.
← →
Igorek © (2004-10-06 12:56) [48]> Игорь Шевченко © (06.10.04 10:21) [28]
> Igorek © (05.10.04 20:27) [20]
> > А неоднозначностей не может быть?
> Как минимум, один из стандартов (ГОСТ 16876-71) является
> симметричным. За остальные сказать не могу.
Это вроде не одно и то-же. Однозначным может быть как симметричный, так и не симметричный.
← →
[lamer]Barmaglot © (2004-10-06 13:16) [49]Хм... Вообщето Koi8-r при отрезании старшего бита начинает писать транслитом... Кроме того в линукс есть программа iconv насколько я помню, поддерживаемые ей кодировки занимают несколько экранов, кроме того исходные тексты естественно присутствуют :-)... Так что вам прямая дорога в линукс :-)
← →
Игорь Шевченко © (2004-10-06 13:18) [50]Igorek © (06.10.04 12:56) [48]
> Это вроде не одно и то-же. Однозначным может быть как симметричный,
> так и не симметричный.
С этого места подробнее.
← →
Anatoly Podgoretsky © (2004-10-06 13:32) [51]Igorek © (06.10.04 12:56) [48]
Не может быть симметричным, где из одного символа получается несколько.
← →
}|{yk © (2004-10-06 13:34) [52]Почему не может? Может. Ведь мы же можем как-то различить, где это два разных звука, а где один. Значит есть какие-то правила. Но тут нужно к филологам обращаться
← →
Anatoly Podgoretsky © (2004-10-06 13:38) [53]ИИ
← →
TUser © (2004-10-06 13:43) [54]
> Не может быть симметричным, где из одного символа получается
> несколько
Не всегда, наверное. Обычно бывает спец. символ, который трактуется как начало (конец) комбинации, типа "/". В приведенной ссылке, в одном из вариантов рекомендуют h использовать в качестве суффикса для комбинайий символов - тогда там все будет симметрично.
← →
Igorek © (2004-10-06 16:08) [55]> Игорь Шевченко © (06.10.04 13:18) [50]
> Igorek © (06.10.04 12:56) [48]
> > Это вроде не одно и то-же. Однозначным может быть как
> симметричный, так и не симметричный.
> С этого места подробнее.
Напр. допустим символы [ab]-рус, [cd]-лат.
Тогда преобразование (a->c, b->c) однозначно, но не симметрично (не существует обратного преобразования).
А (a->c, ab->c) - неоднозначно (если нету приоритетов).
Не могу счас сказать точно, в какой взаимосвязи состоят не/однозначность и симметричность в общем случае.
---
Не советую применять алгоритмы на основе FindSubString. Лучше парсить строку посимвольно - конечный автомат для лексического анализа.
← →
}|{yk © (2004-10-06 16:11) [56]Эт точно. Дж. Бакнелл, гл.11
← →
Igorek © (2004-10-06 16:34) [57]
> }|{yk © (06.10.04 16:11) [56]
> Эт точно. Дж. Бакнелл, гл.11
Чо за книга?
← →
}|{yk © (2004-10-06 16:40) [58]Фундаментальные алгоритмы и структуры данных в Delphi
Но всё-таки, как удобно в С++
typedef std::map<String, String> AlphabetMap;
← →
Igorek © (2004-10-06 17:24) [59]
> }|{yk © (06.10.04 16:40) [58]
> Но всё-таки, как удобно в С++
> typedef std::map<String, String> AlphabetMap;
Что именно? Шаблоны вообще или map в частности?
← →
}|{yk © (2004-10-06 17:27) [60]Да вообще STL. Вот бы кто перенес её на Obj Pascal :(
← →
Игорь Шевченко © (2004-10-06 17:34) [61]
> Да вообще STL. Вот бы кто перенес её на Obj Pascal
С написанием компилятора, поддерживающего templates...
← →
Igorek © (2004-10-06 17:43) [62]> }|{yk © (06.10.04 17:27) [60]
> Игорь Шевченко © (06.10.04 17:34) [61]
Не так и фантастично.
Можно сделать подобное на интерфейсах или на published методах.
← →
Игорь Шевченко © (2004-10-06 17:44) [63]Igorek © (06.10.04 17:43) [62]
> Не так и фантастично.
> Можно сделать подобное на интерфейсах или на published методах
Сделай. :)
← →
Igorek © (2004-10-06 17:46) [64]> на published методах.
Вот только проверка конкретизации шаблонного типа уже на стадии компиляции становится невозможной.
← →
Суслик © (2004-10-06 17:46) [65]
> 62] Igorek © (06.10.04 17:43)
> Можно сделать подобное на интерфейсах или на published методах.
нужно ли только кому-то это подобное?
← →
Igorek © (2004-10-06 17:47) [66]
> Игорь Шевченко © (06.10.04 17:44) [63]
> Igorek © (06.10.04 17:43) [62]
> > Не так и фантастично.
> > Можно сделать подобное на интерфейсах или на published
> методах
> Сделай. :)
Деньги в нашем жестоком мире решают все. :-(
← →
Игорь Шевченко © (2004-10-06 17:49) [67]Igorek © (06.10.04 17:47) [66]
> Деньги в нашем жестоком мире решают все. :-(
А ты начни. Задаром. Набросай идею реализации, глядишь, народ подтянется - у нас народ отзывчивый.
← →
wisekaa © (2004-10-06 19:44) [68]
> Игорь Шевченко ©
Не ужели во всех просторах интернета не нашлось подходящего алгоритма?
← →
KilkennyCat © (2004-10-06 20:02) [69]почти закончил. универсальный. в обе стороны симметричные стандарты, несимметричные - в одну. Двухвариантный - для перевода коротких строк и больших текстов (с ресурса или файла напрямую). Осталось проверить на ашипки.
← →
}|{yk © (2004-10-06 20:04) [70]Что-то медленно :)
← →
KilkennyCat © (2004-10-06 20:06) [71]отвлекают на работе - уже четвертые сутки неспамши, кучу документов готовим-с...
← →
Danilka © (2004-10-07 09:35) [72][55] Igorek © (06.10.04 16:08)
> Не советую применять алгоритмы на основе FindSubString.
> Лучше парсить строку посимвольно - конечный автомат для
> лексического анализа.
Угу, если есть необходимость мегабайтные тексты с транслита переводить, а если надо только ФИО, то какие проблемы? :))
← →
Anatoly Podgoretsky © (2004-10-07 09:53) [73]Игорь Шевченко © (06.10.04 12:36) [46]
Не возможно, только силой интеллекта и в контесте, например посде детранслитеризации получили слово вошод (это простой пример, чаще сложнее), в контексте будет понятно да и то не всегда. Для чатов и форумов это подойдет, а в деле не очень.
← →
Игорь Шевченко © (2004-10-07 10:02) [74]Anatoly Podgoretsky © (07.10.04 09:53) [73]
Безусловно, интеллект никто не отменяет. Но дать этому интеллекту подспорье, например, в виде возможных вариантов обратной транслитерации, это, я полагаю, решаемая задача.
← →
Anatoly Podgoretsky © (2004-10-07 10:12) [75]Игорь Шевченко © (07.10.04 10:02) [74]
А подспорье хороше дело, особенно если при этом будет виден оригинал слова и необязательная возможность корректировки.
Программу перекодировки, при наличии таблицы можно написать минут за 30 с отладкой.
При проверке надо учитывать последовательность двойных и тройных символов. Если же добавить грамматический корректор, то качество резко возрастает, это часто используют в OCR
Еще одно неясно для какой цели, если это где то в переписке, чатах, форумах, о встает другая проблема, каждый транслитеризует как бог на душу положит, и очень редко по ГОСТу.
← →
Игорь Шевченко © (2004-10-07 10:35) [76]Anatoly Podgoretsky © (07.10.04 10:12) [75]
> Еще одно неясно для какой цели
Цель простая - есть авиабилет, на котором написана фамилия пассажира латиницей. В ряде случаев эта же фамилия нужна в ее оригинальном (русском) варианте. В настоящий момент трансляцией занимается тот самый интеллект. Есть предложение сделать поспорье этому интеллекту, предложив несколько вариантов обратной транслитерацией с возможностью выбора нужного и возможной корректировки.
← →
Igorek © (2004-10-07 10:42) [77]> Anatoly Podgoretsky © (07.10.04 10:12) [75]
> каждый транслитеризует
> как бог на душу положит, и очень редко по ГОСТу.
Вот это имхо главная проблема. Транслитерация сама по себе проста. Вопрос в том, что всегда есть оригинал (рус.фамилия). Если вы конвертируете с лат. обратно в рус. то результат гарантирован только если первое преобразование было вам известным.
← →
}|{yk © (2004-10-07 10:44) [78]А написать словарь фамилий и искать точное и близкое совпадения?
← →
Игорь Шевченко © (2004-10-07 10:47) [79]}|{yk © (07.10.04 10:44) [78]
Невыгодно
Страницы: 1 2 вся ветка
Текущий архив: 2004.10.24;
Скачать: CL | DM;
Память: 0.71 MB
Время: 0.035 c