|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Транслитерация на С++, Java, C#. |
|
Разное - Транслитерация на С++, Java, C#.
|
Новый участник Сообщения: 28 |
Профиль | Отправить PM | Цитировать Товарищи нет ли у кого программы для транслитерации написанной на С++,Java,C#?Вот нашел в сети немного инфы что скажете?Как лучше сделать такую прогу?
Гугл видимо не знает о реализации транслитерации на C#. Следующий код взят из плагина Rus to Lat для Wordpress. Транслитерация переводит следующий текст «Транслитерация русских символов английские» в «Transliteraciya russkix simvolov v anglijskie» Как и в плагине, предложенная транслитерация поддерживает два формата – ГОСТ 16876-71 и ISO 9-95. Использование: string outt = Transliteration.Front("Транслитерация русских символов URL в английские"); Console.WriteLine(outt); Console.ReadLine(); Вот, собственно, сам класс. using System; using System.Collections.Generic; using System.Text; namespace Transliteration { public enum TransliterationType { Gost, ISO } public static class Transliteration { private static Dictionary gost = new Dictionary(); //ГОСТ 16876-71 private static Dictionary iso = new Dictionary(); //ISO 9-95 public static string Front(string text) { return Front(text, TransliterationType.ISO); } public static string Front(string text, TransliterationType type) { string output = text; Dictionary tdict = GetDictionaryByType(type); foreach (KeyValuePair key in tdict) { output = output.Replace(key.Key, key.Value); } return output; } public static string Back(string text) { return Back(text, TransliterationType.ISO); } public static string Back(string text, TransliterationType type) { string output = text; Dictionary tdict = GetDictionaryByType(type); foreach (KeyValuePair key in tdict) { output = output.Replace(key.Value, key.Key); } return output; } private static Dictionary GetDictionaryByType(TransliterationType type) { Dictionary tdict = iso; if (type == TransliterationType.Gost) tdict = gost; return tdict; } static Transliteration() { gost.Add("Є", "EH"); gost.Add("І", "I"); gost.Add("і", "i"); gost.Add("№", "#"); gost.Add("є", "eh"); gost.Add("А", "A"); gost.Add("Б", "B"); gost.Add("В", "V"); gost.Add("Г", "G"); gost.Add("Д", "D"); gost.Add("Е", "E"); gost.Add("Ё", "JO"); gost.Add("Ж", "ZH"); gost.Add("З", "Z"); gost.Add("И", "I"); gost.Add("Й", "JJ"); gost.Add("К", "K"); gost.Add("Л", "L"); gost.Add("М", "M"); gost.Add("Н", "N"); gost.Add("О", "O"); gost.Add("П", "P"); gost.Add("Р", "R"); gost.Add("С", "S"); gost.Add("Т", "T"); gost.Add("У", "U"); gost.Add("Ф", "F"); gost.Add("Х", "KH"); gost.Add("Ц", "C"); gost.Add("Ч", "CH"); gost.Add("Ш", "SH"); gost.Add("Щ", "SHH"); gost.Add("Ъ", "'"); gost.Add("Ы", "Y"); gost.Add("Ь", ""); gost.Add("Э", "EH"); gost.Add("Ю", "YU"); gost.Add("Я", "YA"); gost.Add("а", "a"); gost.Add("б", "b"); gost.Add("в", "v"); gost.Add("г", "g"); gost.Add("д", "d"); gost.Add("е", "e"); gost.Add("ё", "jo"); gost.Add("ж", "zh"); gost.Add("з", "z"); gost.Add("и", "i"); gost.Add("й", "jj"); gost.Add("к", "k"); gost.Add("л", "l"); gost.Add("м", "m"); gost.Add("н", "n"); gost.Add("о", "o"); gost.Add("п", "p"); gost.Add("р", "r"); gost.Add("с", "s"); gost.Add("т", "t"); gost.Add("у", "u"); gost.Add("ф", "f"); gost.Add("х", "kh"); gost.Add("ц", "c"); gost.Add("ч", "ch"); gost.Add("ш", "sh"); gost.Add("щ", "shh"); gost.Add("ъ", ""); gost.Add("ы", "y"); gost.Add("ь", ""); gost.Add("э", "eh"); gost.Add("ю", "yu"); gost.Add("я", "ya"); gost.Add("«", ""); gost.Add("»", ""); gost.Add("—", "-"); iso.Add("Є", "YE"); iso.Add("І", "I"); iso.Add("Ѓ", "G"); iso.Add("і", "i"); iso.Add("№", "#"); iso.Add("є", "ye"); iso.Add("ѓ", "g"); iso.Add("А", "A"); iso.Add("Б", "B"); iso.Add("В", "V"); iso.Add("Г", "G"); iso.Add("Д", "D"); iso.Add("Е", "E"); iso.Add("Ё", "YO"); iso.Add("Ж", "ZH"); iso.Add("З", "Z"); iso.Add("И", "I"); iso.Add("Й", "J"); iso.Add("К", "K"); iso.Add("Л", "L"); iso.Add("М", "M"); iso.Add("Н", "N"); iso.Add("О", "O"); iso.Add("П", "P"); iso.Add("Р", "R"); iso.Add("С", "S"); iso.Add("Т", "T"); iso.Add("У", "U"); iso.Add("Ф", "F"); iso.Add("Х", "X"); iso.Add("Ц", "C"); iso.Add("Ч", "CH"); iso.Add("Ш", "SH"); iso.Add("Щ", "SHH"); iso.Add("Ъ", "'"); iso.Add("Ы", "Y"); iso.Add("Ь", ""); iso.Add("Э", "E"); iso.Add("Ю", "YU"); iso.Add("Я", "YA"); iso.Add("а", "a"); iso.Add("б", "b"); iso.Add("в", "v"); iso.Add("г", "g"); iso.Add("д", "d"); iso.Add("е", "e"); iso.Add("ё", "yo"); iso.Add("ж", "zh"); iso.Add("з", "z"); iso.Add("и", "i"); iso.Add("й", "j"); iso.Add("к", "k"); iso.Add("л", "l"); iso.Add("м", "m"); iso.Add("н", "n"); iso.Add("о", "o"); iso.Add("п", "p"); iso.Add("р", "r"); iso.Add("с", "s"); iso.Add("т", "t"); iso.Add("у", "u"); iso.Add("ф", "f"); iso.Add("х", "x"); iso.Add("ц", "c"); iso.Add("ч", "ch"); iso.Add("ш", "sh"); iso.Add("щ", "shh"); iso.Add("ъ", ""); iso.Add("ы", "y"); iso.Add("ь", ""); iso.Add("э", "e"); iso.Add("ю", "yu"); iso.Add("я", "ya"); iso.Add("«", ""); iso.Add("»", ""); iso.Add("—", "-"); } } } |
|
Отправлено: 21:20, 09-03-2010 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать D.Y., можно развернуть словарь (с Dictionary(Char, Of String) на Dictionary(Of String, Char)) и проверять присутствие по три, два и одному символу в словаре.
Текущий словарь, предложенный во втором посте, при развороте потеряет несколько букв. Нужно будет решить какие именно оставить .Add("E", "Е") или '.Add("E", "Ё") или же .Add("E", "Э") .Add("'", "Ъ") или .Add("Y", "Ы") В VB.NET варианте, без разпознавания регистра, это можно так реализовать. Class Translit Shared Sub Main(ByVal CmdArgs() As String) Dim Translit2Cyrillic As New Dictionary(Of String, Char) With Translit2Cyrillic .Add("A", "А") .Add("B", "Б") .Add("V", "В") .Add("G", "Г") .Add("D", "Д") .Add("E", "Е") '.Add("E", "Ё") .Add("Zh", "Ж") .Add("Z", "З") .Add("I", "И") .Add("Y", "Й") .Add("K", "К") .Add("L", "Л") .Add("M", "М") .Add("N", "Н") .Add("O", "О") .Add("P", "П") .Add("R", "Р") .Add("S", "С") .Add("T", "Т") .Add("U", "У") .Add("F", "Ф") .Add("H", "Х") .Add("Ts", "Ц") .Add("Ch", "Ч") .Add("Sh", "Ш") .Add("Sch", "Щ") '.Add("'", "Ъ") '.Add("Y", "Ы") .Add("'", "Ь") '.Add("E", "Э") .Add("Yu", "Ю") .Add("Ya", "Я") End With Dim InputStr As String = vbNullString For Each st As String In CmdArgs InputStr = InputStr & st & " " Next 'InputStr = "ABVGDEZhZIYKLMNOPRSTUFHTsChShSch'YuYaSch'ABABVGDEZhZIYKLMNOPRSTUFH" Dim i As Integer = 0 Dim BufStr As String = vbNullString For i = 0 To InputStr.Length - 3 BufStr = InputStr(i) & InputStr(i + 1) & InputStr(i + 2) If Translit2Cyrillic.ContainsKey(BufStr) Then Console.Write(Translit2Cyrillic(BufStr)) i = i + 2 Continue For End If BufStr = InputStr(i) & InputStr(i + 1) If Translit2Cyrillic.ContainsKey(BufStr) Then Console.Write(Translit2Cyrillic(BufStr)) i = i + 1 Continue For End If BufStr = InputStr(i) If Translit2Cyrillic.ContainsKey(BufStr) Then Console.Write(Translit2Cyrillic(BufStr)) Continue For End If Console.Write(BufStr) Next If i = InputStr.Length - 3 Then BufStr = InputStr(i) & InputStr(i + 1) & InputStr(i + 2) If Translit2Cyrillic.ContainsKey(BufStr) Then Console.Write(Translit2Cyrillic(BufStr)) i = i + 3 End If End If If i = InputStr.Length - 2 Then BufStr = InputStr(i) & InputStr(i + 1) If Translit2Cyrillic.ContainsKey(BufStr) Then Console.Write(Translit2Cyrillic(BufStr)) i = i + 2 End If End If While i < InputStr.Length BufStr = InputStr(i) If Translit2Cyrillic.ContainsKey(BufStr) Then Console.Write(Translit2Cyrillic(BufStr)) Else Console.Write(BufStr) End If i = i + 1 End While End Sub End Class |
Последний раз редактировалось Admiral, 07-05-2010 в 02:08. Отправлено: 01:56, 07-05-2010 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 28
|
Профиль | Отправить PM | Цитировать Если честно то проблемы с преобразованием возникли в C# я VB вообще не пользовался пытался перевести вот что получилось.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { Dictionary<char, string> words = new Dictionary<char, string>(); Dictionary<string, char> words1 = new Dictionary<string, char>(); public Form1() { InitializeComponent(); words.Add('а', "a"); words.Add('б', "b"); words.Add('в', "v"); words.Add('г', "g"); words.Add('д', "d"); words.Add('е', "e"); words.Add('ё', "yo"); words.Add('ж', "zh"); words.Add('з', "z"); words.Add('и', "i"); words.Add('й', "j"); words.Add('к', "k"); words.Add('л', "l"); words.Add('м', "m"); words.Add('н', "n"); words.Add('о', "o"); words.Add('п', "p"); words.Add('р', "r"); words.Add('с', "s"); words.Add('т', "t"); words.Add('у', "u"); words.Add('ф', "f"); words.Add('х', "h"); words.Add('ц', "c"); words.Add('ч', "ch"); words.Add('ш', "sh"); words.Add('щ', "sch"); words.Add('ъ', "j"); words.Add('ы', "i"); words.Add('ь', "j"); words.Add('э', "e"); words.Add('ю', "yu"); words.Add('я', "ya"); words1.Add("a", 'а'); words1.Add("b",'б'); words1.Add("c", 'ц'); } private void textBox4_TextChanged(object sender, EventArgs e) { } //Obratnaya transliteraciya private void textBox3_TextChanged(object sender, EventArgs e) { string source = textBox3.Text; int i=0; string BufStr = textBox3.Text; for ( i = 0; i < source.Length -3; i++) { BufStr = source + source[i + 1] + source[i + 2]; if (words1.ContainsKey(BufStr)) { textBox4.Text = BufStr; i = i + 2; } BufStr = source ; if(words1.ContainsKey(BufStr)) { textBox4.Text = BufStr; } textBox4.Text = BufStr; } if( i < source.Length - 3) { BufStr = source + source [i + 1] + source [i + 2]; if(words1.ContainsKey(BufStr)) { textBox4.Text = BufStr; i = i + 3; } } if(i < source.Length - 2) { BufStr = source + source [i + 1]; if(words1.ContainsKey(BufStr)) { textBox4.Text = BufStr; i = i + 2; } } } //konec private void textBox2_TextChanged(object sender, EventArgs e) { } private void textBox1_TextChanged_1(object sender, EventArgs e) { string source = textBox1.Text; string destiny = null; for (int i = 0; i < source.Length; i++) { if (words.ContainsKey(source[i])) destiny = destiny + words[source[i]]; else destiny = destiny + source[i]; } System.Text.StringBuilder sb = new System.Text.StringBuilder(destiny); for (int j = 0; j < sb.Length; j++) { if (System.Char.IsLower(sb[j]) == true) sb[j] = System.Char.ToLower(sb[j]); else if (System.Char.IsUpper(sb[j]) == true) sb[j] = System.Char.ToUpper(sb[j]); } string corrected = sb.ToString(); textBox2.Text = corrected; } } } |
Отправлено: 16:32, 07-05-2010 | #12 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать D.Y., в предыдущем посте во втором выборе букв имел ввиду следующий выбор (какую букву оставить), при повороте словаря
.Add("Y", "Й") или .Add("Y", "Ы") .Add("'", "Ъ") или .Add("'", "Ь") private void textBox3_TextChanged(object sender, EventArgs e) { string InputStr = textBox3.Text, BufStr = null, destiny = null; int i = 0; for (i = 0; i < InputStr.Length - 3; i++) { BufStr = null; BufStr = BufStr + InputStr[i] + InputStr[i + 1] + InputStr[i + 2]; if (words1.ContainsKey(BufStr)) { destiny = destiny + words1[BufStr]; i = i + 2; continue; } BufStr = null; BufStr = BufStr + InputStr[i] + InputStr[i + 1]; if (words1.ContainsKey(BufStr)) { destiny = destiny + words1[BufStr]; i = i + 1; continue; } BufStr = null; BufStr = BufStr + InputStr[i]; if (words1.ContainsKey(BufStr)) { destiny = destiny + words1[BufStr]; continue; } destiny = destiny + BufStr; } if (i == InputStr.Length - 3) { BufStr = null; BufStr = BufStr + InputStr[i] + InputStr[i + 1] + InputStr[i + 2]; if (words1.ContainsKey(BufStr)) { destiny = destiny + words1[BufStr]; i = i + 3; } } if (i == InputStr.Length - 2) { BufStr = null; BufStr = BufStr + InputStr[i] + InputStr[i + 1]; if (words1.ContainsKey(BufStr)) { destiny = destiny + words1[BufStr]; i = i + 2; } } while (i < InputStr.Length) { BufStr = null; BufStr = BufStr + InputStr[i]; if (words1.ContainsKey(BufStr)) destiny = destiny + words1[BufStr]; else destiny = destiny + BufStr; i = i + 1; } textBox4.Text = destiny; } Например в VB.NET допустимо собирать строку с символов другой, в C# первоначально этой же строке нужно присвоить саму себя, а потом уже символы другой строки. По этому присуствует обнуление строки BufStr (BufStr = null;). |
Отправлено: 22:15, 07-05-2010 | #13 |
Новый участник Сообщения: 1
|
Профиль | Отправить PM | Цитировать Товарищи нет ли у кого программы для транслитерации написанной на С++,Java,C#?Вот нашел в сети немного инфы что скажете?Как лучше сделать такую прогу? »[/q]
Уважаемый D.Y, пишите ссылку на источник, при копировании материалов. А для всех остальных: выполнится без ошибок. Так со всеми языками, исключая некоторые "экзотические". Перевод по таблице уникода, правда, только в одну сторону. Подробнее здесь: http://usanov.net/1451-unidecode-sha...aciya-dlya-net И источник на оригинал поста от D.Y: http://usanov.net/748-transliteraciya-rus-2-lat-na-c |
Отправлено: 22:25, 07-05-2010 | #14 |
Новый участник Сообщения: 28
|
Профиль | Отправить PM | Цитировать Вот что я имею но при вводе в текстбокс3 ничего не происходит не знаю почему ведь текст бокс4 должен отображать результат
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { Dictionary<char, string> words = new Dictionary<char, string>(); Dictionary<string, char> words1 = new Dictionary<string, char>(); public Form1() { InitializeComponent(); words.Add('а', "a"); words.Add('б', "b"); words.Add('в', "v"); words.Add('г', "g"); words.Add('д', "d"); words.Add('е', "e"); words.Add('ё', "yo"); words.Add('ж', "zh"); words.Add('з', "z"); words.Add('и', "i"); words.Add('й', "j"); words.Add('к', "k"); words.Add('л', "l"); words.Add('м', "m"); words.Add('н', "n"); words.Add('о', "o"); words.Add('п', "p"); words.Add('р', "r"); words.Add('с', "s"); words.Add('т', "t"); words.Add('у', "u"); words.Add('ф', "f"); words.Add('х', "h"); words.Add('ц', "c"); words.Add('ч', "ch"); words.Add('ш', "sh"); words.Add('щ', "sch"); words.Add('ъ', "j"); words.Add('ы', "i"); words.Add('ь', "j"); words.Add('э', "e"); words.Add('ю', "yu"); words.Add('я', "ya"); words1.Add("a", 'а'); words1.Add("b", 'б'); words1.Add("v", 'в'); words1.Add("g", 'г'); words1.Add("d", 'д'); words1.Add("e", 'е'); words1.Add("zh", 'ж'); words1.Add("z", 'з'); words1.Add("i", 'и'); words1.Add("j", 'й'); words1.Add("k", 'к'); words1.Add("l", 'л'); words1.Add("m", 'м'); words1.Add("n", 'н'); words1.Add("o", 'о'); words1.Add("p", 'п'); words1.Add("r", 'р'); words1.Add("s", 'с'); words1.Add("t", 'т'); words1.Add("u", 'у'); words1.Add("f", 'ф'); words1.Add("h", 'х'); words1.Add("c", 'ц'); words1.Add("ch", 'ч'); words1.Add("sh", 'ш'); words1.Add("yu", 'ю'); words1.Add("ya", 'я'); } //Obratnaya transliteraciya private void textBox3_TextChanged(object sender, EventArgs e) { string InputStr = textBox3.Text, BufStr = null, destiny = null; int i = 0; for (i = 0; i < InputStr.Length - 3; i++) { BufStr = null; BufStr = BufStr + InputStr[i] + InputStr[i + 1] + InputStr[i + 2]; if (words1.ContainsKey(BufStr)) { destiny = destiny + words1[BufStr]; i = i + 2; continue; } BufStr = null; BufStr = BufStr + InputStr[i] + InputStr[i + 1]; if (words1.ContainsKey(BufStr)) { destiny = destiny + words1[BufStr]; i = i + 1; continue; } BufStr = null; BufStr = BufStr + InputStr[i]; if (words1.ContainsKey(BufStr)) { destiny = destiny + words1[BufStr]; continue; } destiny = destiny + BufStr; } if (i == InputStr.Length - 3) { BufStr = null; BufStr = BufStr + InputStr[i] + InputStr[i + 1] + InputStr[i + 2]; if (words1.ContainsKey(BufStr)) { destiny = destiny + words1[BufStr]; i = i + 3; } } if (i == InputStr.Length - 2) { BufStr = null; BufStr = BufStr + InputStr[i] + InputStr[i + 1]; if (words1.ContainsKey(BufStr)) { destiny = destiny + words1[BufStr]; i = i + 2; } } while (i < InputStr.Length) { BufStr = null; BufStr = BufStr + InputStr[i]; if (words1.ContainsKey(BufStr)) destiny = destiny + words1[BufStr]; else destiny = destiny + BufStr; i = i + 1; } textBox4.Text = destiny; } private void textBox4_TextChanged(object sender, EventArgs e) { } private void textBox1_TextChanged_1(object sender, EventArgs e) { string source = textBox1.Text; string destiny = null; for (int i = 0; i < source.Length; i++) { if (words.ContainsKey(source[i])) destiny = destiny + words[source[i]]; else destiny = destiny + source[i]; } System.Text.StringBuilder sb = new System.Text.StringBuilder(destiny); for (int j = 0; j < sb.Length; j++) { if (System.Char.IsLower(sb[j]) == true) sb[j] = System.Char.ToLower(sb[j]); else if (System.Char.IsUpper(sb[j]) == true) sb[j] = System.Char.ToUpper(sb[j]); } string corrected = sb.ToString(); textBox2.Text = corrected; } private void textBox2_TextChanged(object sender, EventArgs e) { } } } |
Отправлено: 23:51, 07-05-2010 | #15 |
Новый участник Сообщения: 28
|
Профиль | Отправить PM | Цитировать Все уже разобрался виной всего оказалась банальная не внимательность.
|
Отправлено: 13:16, 14-05-2010 | #16 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Проблемы с java(java runtime environment) | KOLANICH | Microsoft Windows 2000/XP | 1 | 15-03-2008 08:00 | |
[решено] JS. Обратная транслитерация. | VeshchiyOleg | Вебмастеру | 1 | 27-01-2007 21:00 | |
То ли Java, то ли... ??? | Guest | Сетевые технологии | 8 | 20-12-2003 17:19 | |
Java - Java | DYURIK | Программирование и базы данных | 2 | 28-09-2003 04:45 | |
JAVA в XP | FANTOMAS | Microsoft Windows 2000/XP | 6 | 12-10-2002 14:06 |
|