2010-12-05 18 views
6

Cómo convertir de caracteres chinos a Hanyu Pinyin?Convertir caracteres chinos a Hanyu pinyin

E.g.

你 -> Nǐ

马 -> Mǎ


Más información:

Cualquiera de acentos o formas numéricas de Hanyu Pinyin son aceptables, la forma numérica siendo mi preferencia.

Se prefiere una biblioteca Java, sin embargo, una biblioteca en otro idioma que se puede colocar en un contenedor también es correcta.

quisiera cualquier persona que tenga utilizado personalmente tal biblioteca antes de recomendar o hacer comentarios al respecto, en términos de su calidad/reliabilitty.

+0

¿Solo fuente abierta o también por dinero? – bmargulies

+0

@bmargulies: Prefiero el código abierto en lugar del código cerrado, pero estoy de acuerdo con ambos – bguiz

Respuesta

5

El problema de convertir hanzi a pinyin es bastante difícil. Hay muchos caracteres hanzi que tienen múltiples representaciones de pinyin, dependiendo del contexto. Compare 长大 (pinyin: zhang da) con 长城 (pinyin: chang cheng). Por esta razón, la conversión de un solo carácter a menudo es en realidad inútil, a menos que tenga un sistema que genere múltiples posibilidades. También está el problema de la segmentación de palabras, que también puede afectar la representación de los pinyin. Aunque tal vez ya sabías esto, pensé que era importante decir esto.

Dicho esto, el Adso Package contiene un segmentador y un anotador de pinyin probabilístico, basado en la excelente biblioteca de Adso. Sin embargo, lleva un tiempo acostumbrarse, y puede ser mucho más grande de lo que estás buscando (he encontrado en el pasado que era demasiado voluminosa para mis necesidades). Además, no parece haber una API pública en ninguna parte, y es C++ ...

Para un proyecto reciente, porque estaba trabajando con nombres de lugares, simplemente utilicé la API de Google Translate (específicamente, la versión no oficial de Java puerto, que, por lo menos para los nombres comunes, generalmente hace un buen trabajo de traducción a pinyin. El problema son los sistemas de transliteración alternativos comúnmente utilizados, como "HongKong" para lo que debería ser "XiangGang". Teniendo en cuenta todo esto, Google Translate es bastante limitado, pero ofrece un comienzo. No había oído hablar de pinyin4j antes, pero después de jugar con él en este momento, he encontrado que es menos que óptimo, mientras que muestra una lista de posibles pinyin romanizaciones candidatas que hace ningún intento de determinar estadísticamente su probabilidad. Hay un método para devolver una representación única, pero pronto se eliminará, ya que actualmente solo devuelve el primer romani. zación, no la más probable. Donde el programa parece funcionar bien es con la conversión entre romanizaciones y la configurabilidad general.

En pocas palabras, la respuesta puede ser cualquiera de estos, dependiendo de lo que necesite. Idiosincrásico nombres propios?Traductor de google. ¿Necesita estadísticas? Adso. Dispuesto a aceptar listas de candidatos sin información de contexto? Pinyin4j.

+0

+1 y marque @Nat: gracias por la respuesta muy completa. Soy consciente del problema de las múltiples posibilidades para cada personaje, así que gracias por señalar un paquete que sí lo tenga en cuenta. – bguiz

+0

@Nat ¿Alguna actualización del paquete Adso? ¡El enlace parece estar roto! editar: esto debería ser http://adsotrans.com/downloads/ – user3306356

1

vende un paquete de tecnología lingüística que, entre otras cosas, puede producir pinyin para las palabras chinas. Como has indicado que tienes preferencia por el código abierto, y dado que si tu única necesidad es la conversión de pinyin, no puedo decirte que nuestras cosas tienen una ventaja enorme, te dejaré que nos busques si el La alternativa de fuente abierta de @mjv no es adecuada.

2

En Python tratar

from cjklib.characterlookup import CharacterLookup 
cjk = CharacterLookup('C') 
cjk.getReadingForCharacter(u'北', 'Pinyin') 

Obtendría

['běi', 'bèi'] 

responsabilidad: yo soy el autor de esa biblioteca.

Cuestiones relacionadas