2012-08-11 19 views
5

¿Hay una biblioteca en python que pueda convertir palabras (principalmente nombres) en la transcripción fonética de Arpabet?Python Arpabet transcripción fonética

barbos -> B AA1 RB AH0 LZ

Barbacoa -> B AA1 RB iH0 KY UW2

la barbacoa -> B AA1 RB iH0 KY UW2 D

Barbequeing -> B AA1 RB iH0 KY UW2 iH0 NG

BARBACOAS -> B AA1 RB iH0 KY UW2 Z

+0

No tiene Arpabet, pero si usted está buscando para el análisis general de sonido, es posible echar un vistazo a http://pypi.python.org/pypi/Fuzzy/ – Amber

Respuesta

5

Obtener el cmu pronouncing dictionary y luego se puede utilizar para obtener nltk el asociado
transcripción arpabet fonética para cualquier palabra de ese diccionario en sí como esto

>>> entries = nltk.corpus.cmudict.entries() 
>>> len(entries) 
127012 
>>> for entry in entries[39943:39951]: 
...  print entry 
... 
('fir', ['F', 'ER1']) 
('fire', ['F', 'AY1', 'ER0']) 
('fire', ['F', 'AY1', 'R']) 
('firearm', ['F', 'AY1', 'ER0', 'AA2', 'R', 'M']) 
('firearm', ['F', 'AY1', 'R', 'AA2', 'R', 'M']) 
('firearms', ['F', 'AY1', 'ER0', 'AA2', 'R', 'M', 'Z']) 
('firearms', ['F', 'AY1', 'R', 'AA2', 'R', 'M', 'Z']) 
('fireball', ['F', 'AY1', 'ER0', 'B', 'AO2', 'L']) 
+1

que es útil, pero principalmente necesito pronunciar palabras que no están en la lista de entradas, al menos obtengo una lista de sílabas junto con su transcripción, de modo que puedo usar estas sílabas en palabras nuevas ... – hmghaly

8

Usando nltk con el cmudict corpus instalado:

arpabet = nltk.corpus.cmudict.dict() 
for word in ('barbels', 'barbeque', 'barbequed', 'barbequeing', 'barbeques'): 
    print(arpabet[word]) 

rendimientos

[['B', 'AA1', 'R', 'B', 'AH0', 'L', 'Z']] 
[['B', 'AA1', 'R', 'B', 'IH0', 'K', 'Y', 'UW2']] 
[['B', 'AA1', 'R', 'B', 'IH0', 'K', 'Y', 'UW2', 'D']] 
[['B', 'AA1', 'R', 'B', 'IH0', 'K', 'Y', 'UW2', 'IH0', 'NG']] 
[['B', 'AA1', 'R', 'B', 'IH0', 'K', 'Y', 'UW2', 'Z']] 

Para insta ll los cmudict corpus en el tipo pitón intérprete:

>>> import nltk 
>>> nltk.download() 
Use GUI to install 
corpora>cmudict 
+1

Eso también es útil, pero no lo es t trabajo para palabras fuera de este diccionario, ¿hay alguna manera de encontrar el arpabet para cualquier cadena? o al menos alguna forma de silabificar la cadena y buscar sílabas en el diccionario? – hmghaly

+0

Tal cosa podría existir, pero no lo sé. – unutbu

9

Lo que se quiere que se llama diversamente "carta a sonar" o "grafema a fonema" del motor. Hay algunos alrededor, incluido uno en cada sistema de conversión de texto a voz.

Normalmente trato con acentos no estadounidenses, para lo cual uso espeak. No genera arpabet directamente (que está restringido a sonidos de EE. UU. De todos modos), pero puede persuadirlo para que intente un acento estadounidense y convertir de IPA a arpabet más tarde.

>>> from subprocess import check_output 
>>> print check_output(["espeak", "-q", "--ipa", 
         '-v', 'en-us', 
         'hello world']).decode('utf-8') 
həlˈoʊ wˈɜːld 

Se puede utilizar en lugar de -x--ipa para la propia representación de teléfono de eSpeak (que es ASCII):

>>> check_output(["espeak", "-q", "-x", '-v', 'en-us', 'hello world']) 
[email protected]'oU w'3:ld 

Conversión a arpabet no es tan simple como un carácter de consulta de embargo; por ejemplo "tʃ" debe convertirse a "CH", no el "T SH" que le daría una conversión codiciosa (excepto, es decir, en casos impares como "swɛtʃɑːp" para "sweatshop").

+0

Esta parece ser la respuesta más relevante a la pregunta de OP, pero ¿puede explicar cómo usar Python para usar espeak? Descargué 'espeak-1.48.04-source', pero tiene un montón de carpetas, y no estoy seguro de cómo aplicar el código Python anterior, entiendo que es una pregunta respondida hace mucho tiempo, muy apreciada si puede ayudar. – KubiK888

+0

La respuesta de @ vrplumber tiene (al escribir esto) la menor cantidad de votos, pero su proyecto 'listener' maneja la conversión de salida de espeak a ARPAbet. –

3

Puede usar una pequeña utilidad de mi proyecto de escucha para hacer esto. Utiliza eSpeak bajo las cubiertas (para generar IPA), a continuación, utiliza un mapeo extraída del diccionario CMU para producir el conjunto de asignaciones ARPABet que podría coincidir con la IPA generado, por ejemplo:

$ listener-arpa 
we are testing 
we 
     W IY 
are 
     ER 
     AA 
testing 
     T EH S T IH NG 

Eso produce exactas-partidos en el diccionario CMU aproximadamente el 45% del tiempo (obtuve alrededor del 36% usando la correspondencia documentada en CMU/Wikipedia) mientras producía ~ 3 coincidencias por palabra (en promedio). Dicho esto, vemos una "coincidencia cercana" en el 99% del tiempo, es decir, aunque es posible que no coincidamos exactamente con la palabra marcada a mano cada vez, en general estamos apagados solo por unos pocos fonemas.

$ sudo apt-get install espeak 
$ pip install -e git+https://github.com/mcfletch/listener.git#egg=listener 
Cuestiones relacionadas