traductor traducirlas significado pinyin lista letras hanzi español dibujar chinos chino chinas caracteres abecedario sorting cjk

sorting - traducirlas - letras chinas y su significado en español



Cómo convertir caracteres chinos a Pinyin (7)

CoreFoundation proporciona cierto método para hacer la conversión:

CFMutableStringRef string = CFStringCreateMutableCopy(NULL, 0, CFSTR("中文")); CFStringTransform(string, NULL, kCFStringTransformMandarinLatin, NO); CFStringTransform(string, NULL, kCFStringTransformStripDiacritics, NO); NSLog(@"%@", string);

La salida es

zhong wen

Para clasificar el texto en idioma chino, quiero convertir los caracteres chinos a Pinyin, separando adecuadamente cada carácter chino y agrupando los caracteres sucesivos.

¿Me puede ayudar en esta tarea proporcionando la lógica o el código fuente para hacer esto?

Por favor, hágamelo saber si alguna fuente abierta o lib ya está presente para esto.


Respuesta corta: no lo haces.

Respuesta larga: no hay una asignación de uno a uno para 汉字 a 汉语拼音. Sólo algunos ejemplos rápidos:

  • 把 puede ser "ba" en el tercer tono o cuarto tono.
  • 了 puede ser "le" sin tono o tercer tono "liao".
  • 乐 puede ser "le" o "yue", ambos en el cuarto tono.
  • 落 puede ser "luo", "la" o "lao", todo en el cuarto tono.

Y así. Tengo un libro para principiantes sobre este tema que tiene 207 ejemplos. Recalco que este es un libro para principiantes y de ninguna manera está completo. Cada uno tiene una página o dos de ejemplos de uso y condiciones en las que puede elegir la pronunciación adecuada. No es algo que se pueda programar fácilmente (si es que lo hace).

Y esto ni siquiera aborda la otra cosa resbaladiza con la que se quiere tratar: la separación de los caracteres en palabras agrupadas. La noción misma de una palabra es un poco resbaladiza en chino. (Hay dos términos que corresponden, aproximadamente a "palabra" en chino, por ejemplo: 字 y 词. El primero es el carácter, el segundo grupo de caracteres que se reúnen en un solo concepto. (Con frecuencia, los hablantes chinos me preguntan cuántos "palabras" que puedo leer cuando realmente significan "caracteres".) Mientras que en algunos casos la distinción es clara (la 词 "乌鸦", por ejemplo, es "cuervo", las dos 字 deben estar juntas para expresar la idea correctamente y sería incorrecto traducirlo como "cuervo negro"), en otros no es tan claro. ¿A qué se traduce "你好"? ¿Es una palabra que significa idiomáticamente "hola"? ¿O son dos palabras que se traducen? ¿Literalmente a "usted bien"? Cada uno de los personajes involucrados está solo o en grupos con otras palabras, pero juntos significan algo completamente diferente de sus significados individuales. Dado esto, ¿cómo planea agrupar las l transliteraciones? ¿Cuáles son difíciles o imposibles de entender en primer lugar?) ¿En "palabras"?


Si bien la respuesta de @JUST MY correct OPINION aborda algunas de las dificultades de convertir caracteres en pinyin, no es un problema imposible de resolver.

He escrito una biblioteca (pinyinify) que resuelve esta tarea con una precisión decente. Aunque no hay una asignación uno a uno entre los caracteres y pinyin, mi biblioteca generalmente puede decidir qué pronunciación es la correcta. Por ejemplo, "我 受不了 了" se convierte correctamente a "wǒ shòubùliǎo le", con dos pronunciaciones diferentes de 了.

Mi enfoque para resolver el problema es bastante simple:

  • Primero segmenta el texto en palabras. Por ejemplo, 我 喜欢 旅游 se dividirá en tres palabras: 我 喜欢 旅游. Esto tampoco es un proceso simple, pero hay muchas bibliotecas para ello. jieba es una de las bibliotecas más populares para este propósito.
  • Usa un diccionario para convertir las palabras en pinyin.
  • Si la palabra no está en el diccionario, vuelva a convertir los caracteres individuales a pinyin utilizando su pronunciación más común.

Si usa Visual Studio, esta podría ser una opción:

Microsoft.International.Converters.PinYinConverter

Cómo instalar:

Primero, descargue Visual Studio International Pack 2.0, descarga oficial. Una vez que se complete la descarga, instale el archivo de ejecución VSIPSetup.msi (sistema operativo x86 en el directorio de instalación predeterminado (C: / Archivos de programa / Microsoft Visual Studio International Feature Pack 2.0). Después de la instalación, debe agregar una referencia en VS. referencia respectivamente: C: / Archivos de programa / Microsoft Visual Studio International Pack / Biblioteca de conversión de Pin-Yin en chino simplificado (Pinyin) y C: / Archivos de programa / Microsoft Visual Studio International Pack / Biblioteca de conversión y herramienta de conversión de chino tradicional a chino simplificado (Huzhuan tradicional y simplificado a)

Cómo utilizar:

public static string GetPinyin(string str) { string r = string.Empty; foreach (char obj in str) { try { ChineseChar chineseChar = new ChineseChar(obj); string t = chineseChar.Pinyins[0].ToString(); r += t.Substring(0, t.Length - 1); } catch { r += obj.ToString(); } } return r; }

Fuente: http://www.programering.com/a/MzM3cTMwATA.html


Tuve este problema y encontré una solución en PHP (que podría ser más limpia, supongo, pero funciona). Tuve algunos problemas porque el archivo dado en este tema es de hexa unicode.

1) Importe los datos de ftp://ftp.cuhk.hk/pub/chinese/ifcss/software/data/Uni2Pinyin.gz (gracias pierr) a su base de datos o lo que sea

2) Importe sus datos en una matriz como $pinyinArray[$hexaUnicode] = $pinyin;

3) Usa este código:

/* * Decimal representation of $c * function found there: http://www.cantonese.sheik.co.uk/phorum/read.php?2,19594 */ function uniord($c) { $ud = 0; if (ord($c{0})>=0 && ord($c{0})<=127) $ud = $c{0}; if (ord($c{0})>=192 && ord($c{0})<=223) $ud = (ord($c{0})-192)*64 + (ord($c{1})-128); if (ord($c{0})>=224 && ord($c{0})<=239) $ud = (ord($c{0})-224)*4096 + (ord($c{1})-128)*64 + (ord($c{2})-128); if (ord($c{0})>=240 && ord($c{0})<=247) $ud = (ord($c{0})-240)*262144 + (ord($c{1})-128)*4096 + (ord($c{2})-128)*64 + (ord($c{3})-128); if (ord($c{0})>=248 && ord($c{0})<=251) $ud = (ord($c{0})-248)*16777216 + (ord($c{1})-128)*262144 + (ord($c{2})-128)*4096 + (ord($c{3})-128)*64 + (ord($c{4})-128); if (ord($c{0})>=252 && ord($c{0})<=253) $ud = (ord($c{0})-252)*1073741824 + (ord($c{1})-128)*16777216 + (ord($c{2})-128)*262144 + (ord($c{3})-128)*4096 + (ord($c{4})-128)*64 + (ord($c{5})-128); if (ord($c{0})>=254 && ord($c{0})<=255) //error $ud = false; return $ud; } /* * Translate the $string string of a single chinese charactere to unicode */ function chineseToHexaUnicode($string) { return strtoupper(dechex(uniord($string))); } /* * */ function convertChineseToPinyin($string,$pinyinArray) { $pinyinValue = ''''; for ($i = 0; $i < mb_strlen($string);$i++) $pinyinValue.=$pinyinArray[chineseToHexaUnicode(mb_substr($string, $i, 1))]; return $pinyinValue; } $string = ''龙江省五大''; echo convertChineseToPinyin($string,$pinyinArray);

echo: (long2)(jiang1)(sheng3,xing3)(wu3)(da4,dai4)

Por supuesto, $pinyinArray es su conjunto de datos ( hexoUnicode => pinyin )

Espero que ayude a alguien.



el siguiente código que se escribe en C # puede ayudarlo a convertir simplemente las palabras chinas que incluyen en gb2312 encodec (solo 2312 de las palabras en chino simplificado que se utilizan con frecuencia) a pinyin.

a veces, una palabra china no es un mapa uno a uno, depende del contexto del que hablemos. Al igual que "行" en "自行车" (bicicleta) se pronuncia "Xing", pero en "银行" (banco) pronunciado "Cuelgue". por lo tanto, si tiene un problema con esto, puede encontrar una solución más compleja para manejar esto.

Lo siento por mi pobre inglés. Espero que esto pueda darte un poco de ayuda.

public class ChineseToPinYin { private static int[] pyValue = new int[] { -20319,-20317,-20304,-20295,-20292,-20283,-20265,-20257,-20242,-20230,-20051,-20036, -20032,-20026,-20002,-19990,-19986,-19982,-19976,-19805,-19784,-19775,-19774,-19763, -19756,-19751,-19746,-19741,-19739,-19728,-19725,-19715,-19540,-19531,-19525,-19515, -19500,-19484,-19479,-19467,-19289,-19288,-19281,-19275,-19270,-19263,-19261,-19249, -19243,-19242,-19238,-19235,-19227,-19224,-19218,-19212,-19038,-19023,-19018,-19006, -19003,-18996,-18977,-18961,-18952,-18783,-18774,-18773,-18763,-18756,-18741,-18735, -18731,-18722,-18710,-18697,-18696,-18526,-18518,-18501,-18490,-18478,-18463,-18448, -18447,-18446,-18239,-18237,-18231,-18220,-18211,-18201,-18184,-18183, -18181,-18012, -17997,-17988,-17970,-17964,-17961,-17950,-17947,-17931,-17928,-17922,-17759,-17752, -17733,-17730,-17721,-17703,-17701,-17697,-17692,-17683,-17676,-17496,-17487,-17482, -17468,-17454,-17433,-17427,-17417,-17202,-17185,-16983,-16970,-16942,-16915,-16733, -16708,-16706,-16689,-16664,-16657,-16647,-16474,-16470,-16465,-16459,-16452,-16448, -16433,-16429,-16427,-16423,-16419,-16412,-16407,-16403,-16401,-16393,-16220,-16216, -16212,-16205,-16202,-16187,-16180,-16171,-16169,-16158,-16155,-15959,-15958,-15944, -15933,-15920,-15915,-15903,-15889,-15878,-15707,-15701,-15681,-15667,-15661,-15659, -15652,-15640,-15631,-15625,-15454,-15448,-15436,-15435,-15419,-15416,-15408,-15394, -15385,-15377,-15375,-15369,-15363,-15362,-15183,-15180,-15165,-15158,-15153,-15150, -15149,-15144,-15143,-15141,-15140,-15139,-15128,-15121,-15119,-15117,-15110,-15109, -14941,-14937,-14933,-14930,-14929,-14928,-14926,-14922,-14921,-14914,-14908,-14902, -14894,-14889,-14882,-14873,-14871,-14857,-14678,-14674,-14670,-14668,-14663,-14654, -14645,-14630,-14594,-14429,-14407,-14399,-14384,-14379,-14368,-14355,-14353,-14345, -14170,-14159,-14151,-14149,-14145,-14140,-14137,-14135,-14125,-14123,-14122,-14112, -14109,-14099,-14097,-14094,-14092,-14090,-14087,-14083,-13917,-13914,-13910,-13907, -13906,-13905,-13896,-13894,-13878,-13870,-13859,-13847,-13831,-13658,-13611,-13601, -13406,-13404,-13400,-13398,-13395,-13391,-13387,-13383,-13367,-13359,-13356,-13343, -13340,-13329,-13326,-13318,-13147,-13138,-13120,-13107,-13096,-13095,-13091,-13076, -13068,-13063,-13060,-12888,-12875,-12871,-12860,-12858,-12852,-12849,-12838,-12831, -12829,-12812,-12802,-12607,-12597,-12594,-12585,-12556,-12359,-12346,-12320,-12300, -12120,-12099,-12089,-12074,-12067,-12058,-12039,-11867,-11861,-11847,-11831,-11798, -11781,-11604,-11589,-11536,-11358,-11340,-11339,-11324,-11303,-11097,-11077,-11067, -11055,-11052,-11045,-11041,-11038,-11024,-11020,-11019,-11018,-11014,-10838,-10832, -10815,-10800,-10790,-10780,-10764,-10587,-10544,-10533,-10519,-10331,-10329,-10328, -10322,-10315,-10309,-10307,-10296,-10281,-10274,-10270,-10262,-10260,-10256,-10254 }; private static string[] pyName = new string[] { "A","Ai","An","Ang","Ao","Ba","Bai","Ban","Bang","Bao","Bei","Ben", "Beng","Bi","Bian","Biao","Bie","Bin","Bing","Bo","Bu","Ba","Cai","Can", "Cang","Cao","Ce","Ceng","Cha","Chai","Chan","Chang","Chao","Che","Chen","Cheng", "Chi","Chong","Chou","Chu","Chuai","Chuan","Chuang","Chui","Chun","Chuo","Ci","Cong", "Cou","Cu","Cuan","Cui","Cun","Cuo","Da","Dai","Dan","Dang","Dao","De", "Deng","Di","Dian","Diao","Die","Ding","Diu","Dong","Dou","Du","Duan","Dui", "Dun","Duo","E","En","Er","Fa","Fan","Fang","Fei","Fen","Feng","Fo", "Fou","Fu","Ga","Gai","Gan","Gang","Gao","Ge","Gei","Gen","Geng","Gong", "Gou","Gu","Gua","Guai","Guan","Guang","Gui","Gun","Guo","Ha","Hai","Han", "Hang","Hao","He","Hei","Hen","Heng","Hong","Hou","Hu","Hua","Huai","Huan", "Huang","Hui","Hun","Huo","Ji","Jia","Jian","Jiang","Jiao","Jie","Jin","Jing", "Jiong","Jiu","Ju","Juan","Jue","Jun","Ka","Kai","Kan","Kang","Kao","Ke", "Ken","Keng","Kong","Kou","Ku","Kua","Kuai","Kuan","Kuang","Kui","Kun","Kuo", "La","Lai","Lan","Lang","Lao","Le","Lei","Leng","Li","Lia","Lian","Liang", "Liao","Lie","Lin","Ling","Liu","Long","Lou","Lu","Lv","Luan","Lue","Lun", "Luo","Ma","Mai","Man","Mang","Mao","Me","Mei","Men","Meng","Mi","Mian", "Miao","Mie","Min","Ming","Miu","Mo","Mou","Mu","Na","Nai","Nan","Nang", "Nao","Ne","Nei","Nen","Neng","Ni","Nian","Niang","Niao","Nie","Nin","Ning", "Niu","Nong","Nu","Nv","Nuan","Nue","Nuo","O","Ou","Pa","Pai","Pan", "Pang","Pao","Pei","Pen","Peng","Pi","Pian","Piao","Pie","Pin","Ping","Po", "Pu","Qi","Qia","Qian","Qiang","Qiao","Qie","Qin","Qing","Qiong","Qiu","Qu", "Quan","Que","Qun","Ran","Rang","Rao","Re","Ren","Reng","Ri","Rong","Rou", "Ru","Ruan","Rui","Run","Ruo","Sa","Sai","San","Sang","Sao","Se","Sen", "Seng","Sha","Shai","Shan","Shang","Shao","She","Shen","Sheng","Shi","Shou","Shu", "Shua","Shuai","Shuan","Shuang","Shui","Shun","Shuo","Si","Song","Sou","Su","Suan", "Sui","Sun","Suo","Ta","Tai","Tan","Tang","Tao","Te","Teng","Ti","Tian", "Tiao","Tie","Ting","Tong","Tou","Tu","Tuan","Tui","Tun","Tuo","Wa","Wai", "Wan","Wang","Wei","Wen","Weng","Wo","Wu","Xi","Xia","Xian","Xiang","Xiao", "Xie","Xin","Xing","Xiong","Xiu","Xu","Xuan","Xue","Xun","Ya","Yan","Yang", "Yao","Ye","Yi","Yin","Ying","Yo","Yong","You","Yu","Yuan","Yue","Yun", "Za", "Zai","Zan","Zang","Zao","Ze","Zei","Zen","Zeng","Zha","Zhai","Zhan", "Zhang","Zhao","Zhe","Zhen","Zheng","Zhi","Zhong","Zhou","Zhu","Zhua","Zhuai","Zhuan", "Zhuang","Zhui","Zhun","Zhuo","Zi","Zong","Zou","Zu","Zuan","Zui","Zun","Zuo" }; /// <summary> /// 把汉字转换成拼音(全拼) /// </summary> /// <param name="hzString">汉字字符串</param> /// <returns>转换后的拼音(全拼)字符串</returns> public static string Convert(string hzString) { // 匹配中文字符 Regex regex = new Regex("^[/u4e00-/u9fa5]$"); byte[] array = new byte[2]; string pyString = ""; int chrAsc = 0; int i1 = 0; int i2 = 0; char[] noWChar = hzString.ToCharArray(); for (int j = 0; j < noWChar.Length; j++) { // 中文字符 if (regex.IsMatch(noWChar[j].ToString())) { array = System.Text.Encoding.Default.GetBytes(noWChar[j].ToString()); i1 = (short)(array[0]); i2 = (short)(array[1]); chrAsc = i1 * 256 + i2 - 65536; if (chrAsc > 0 && chrAsc < 160) { pyString += noWChar[j]; } else { // 修正部分文字 if (chrAsc == -9254) // 修正“圳”字 pyString += "Zhen"; else { for (int i = (pyValue.Length - 1); i >= 0; i--) { if (pyValue[i] <= chrAsc) { pyString += pyName[i]; break; } } } } } // 非中文字符 else { pyString += noWChar[j].ToString(); } } return pyString; } }