|
Компьютерный форум 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. есть на VB.NET (выполнена в виде консольной программы), перенести на C# думаю проблем не составит.
А если всё же будет составлять, то для этих .NET языков есть конвертор Imports System Imports System.Collections.Generic Class Translit Shared Sub Main(ByVal CmdArgs() As String) Dim Cyrillic2Translit As New Dictionary(Of Char, String) With Cyrillic2Translit .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 = Console.ReadLine For Each ch As Char In InputStr.ToCharArray If Cyrillic2Translit.ContainsKey(ch) Then Console.Write(Cyrillic2Translit(ch)) ElseIf Cyrillic2Translit.ContainsKey(Char.ToUpper(ch)) Then Console.Write(Cyrillic2Translit(Char.ToUpper(ch)).ToLower) Else Console.Write(ch) End If Next Console.Read() End Sub End Class |
Отправлено: 22:58, 09-03-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 28
|
Профиль | Отправить PM | Цитировать Хороший пример, но возможно придется переделать немного(дописать нижний регистр) ведь здесь нет учета регистра.Я думаю что так будет правильнее.
|
Отправлено: 23:22, 09-03-2010 | #3 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать D.Y., здесь есть учёт регистров.
If Cyrillic2Translit.ContainsKey(ch) Then Console.Write(Cyrillic2Translit(ch)) ElseIf Cyrillic2Translit.ContainsKey(Char.ToUpper(ch)) Then Console.Write(Cyrillic2Translit(Char.ToUpper(ch)).ToLower) Else Console.Write(ch) |
Отправлено: 23:31, 09-03-2010 | #4 |
Новый участник Сообщения: 28
|
Профиль | Отправить PM | Цитировать прошу прощения не заметил.
|
|
Отправлено: 08:15, 10-03-2010 | #5 |
Новый участник Сообщения: 28
|
Профиль | Отправить PM | Цитировать А как можно сделать обратную транслитерацию снова использовать массивы или есть какая нибудь функция ?
|
Отправлено: 23:30, 01-05-2010 | #6 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать D.Y., если на VB.NET то готовой функции нету.
Да можно воспользоваться словарём. Для некоторых букв (.Add("Ъ", "'"), .Add("Ь", "'")) или предлагать пользователю при распознании варианты, или самостоятельно в программе анализировать (по частоте использования в языке или более сложный вариант - по грамматическим правилам). Буквы транслирующие в несколько (.Add("Ж", "Zh"), .Add("Ц", "Ts"), .Add("Ч", "Ch"), .Add("Ш", "Sh"), .Add("Щ", "Sch")) - заслуживают отдельной обратной транслитерации. |
Отправлено: 23:38, 01-05-2010 | #7 |
Новый участник Сообщения: 28
|
Профиль | Отправить PM | Цитировать Есть вот такой вариант транслитерации но у меня почему то не отображает текст во втором "Textboxе".Не могли бы вы мне подсказать в чем причина??
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<string, string> words = new Dictionary<string, string>(); 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"); 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"); } private void textBox1_TextChanged(object sender, EventArgs e) { string source = textBox1.Text; foreach (KeyValuePair<string, string> pair in words) { source = source.Replace(pair.Key, pair.Value); } textBox2.Text = source; } private void textBox2_TextChanged(object sender, EventArgs e) { } private void textBox1_TextChanged_1(object sender, EventArgs e) { } } } |
Последний раз редактировалось D.Y., 02-05-2010 в 18:08. Причина: не закрытый тег Отправлено: 18:05, 02-05-2010 | #8 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать D.Y., не знакома конструкция - KeyValuePair<string, string> pair in words.
Функцию private void textBox1_TextChanged(object sender, EventArgs e) переписал бы так private void textBox1_TextChanged(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]; } textBox2.Text = destiny; } В этом случаи в C#, в отличии от VB.NET, сами буквы должны быть заключены в одинарные кавычки (на примере первой буквы - words.Add('а', "a"); вместо words.Add("а", "a");. |
Отправлено: 01:05, 05-05-2010 | #9 |
Новый участник Сообщения: 28
|
Профиль | Отправить PM | Цитировать Вот я немного переделал программу добавив проверку регистра тем самым избавив ее от избыточности
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>(); 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"); } 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; } } } |
Отправлено: 22:28, 06-05-2010 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Проблемы с 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 |
|