2012-02-10 35 views
16

La cantidad predominante de documentación y ejemplos NLTK se dedica a la lematización y derivados, pero es muy escasa en estos asuntos de normalización como:¿Hay alguna clase en NLTK para normalizar y canonizar texto?

  • convertir todas las cartas para bajar o mayúsculas
  • eliminación de puntuacion
  • convertir números en palabras
  • eliminación de acentos y otros diacríticos
  • siglas en expansión
  • eliminación de palabras vacías o las palabras "demasiado comunes"
  • texto canónicos (tumor = tumorales, es = es)

Favor punto que en NLTK a cavar. Se aceptan todos los equivalentes NLTK (JAVA o cualquier otro) para los fines mencionados anteriormente. Gracias.

UPD. He escrito una biblioteca de python de normalización de texto para fines de texto a voz https://github.com/soshial/text-normalization. También podría serle útil.

Respuesta

16

También en la especificación NLTK, muchas (sub) tareas se resuelven utilizando purely python methods.

a) convertir todas las letras para bajar o mayúsculas

text='aiUOd' 
print text.lower() 
>> 'aiuod' 
print text.upper() 
>> 'AIUOD' 

b) eliminar puntuacion

text='She? Hm, why not!' 
puncts='.?!' 
for sym in puncts: 
    text= text.replace(sym,' ') 
print text 
>> 'She Hm why not ' 

c) convertir números en palabras

Aquí, no sería tan fácil escribir un pocas líneas, pero hay muchas soluciones ya existentes, si googleas.Code snippets, libraries etc

d) eliminar los acentos y otros diacríticos

mirar hacia arriba punto b), basta con crear la lista con diacríticos como puncts

e) abreviaturas expansión

Crear un diccionario con abreviaturas:

text='USA and GB are ...' 
abbrevs={'USA':'United States','GB':'Great Britain'} 
for abbrev in abbrevs: 
    text= text.replace(abbrev,abbrevs[abbrev]) 
print text 
>> 'United States and Great Britain are ...' 

f) la eliminación de palabras vacías o palabras "demasiado comunes"

Crear una lista con palabras vacías:

text='Mary had a little lamb' 
temp_corpus=text.split(' ') 
stops=['a','the','had'] 
corpus=[token for token in temp_corpus if token not in stops] 
print corpus 
>> ['Mary', 'little', 'lamb'] 

g) texto canonicalización (tumor = tumor, es = es)

para tumor-> uso tumoral regex.

Por último, pero tenga en cuenta que todos los ejemplos anteriores generalmente necesitan calibración en los textos reales, los escribí como la dirección a seguir.

+3

Como considero una herramienta NLP, debería poder realizar todas las operaciones de procesamiento que pudieran implicar algunos datos lingüísticos. Significa que pensé y todavía pienso que nltk ya tiene los diccionarios de palabras equivalentes, abreviatura del diccionario, dict canonicalización, conversión en números de texto, ** fechas **, temperatura, ** monedas ** y así sucesivamente ... Tal vez simplemente no lo sabemos bien? – soshial

+1

Estoy seguro de que no se puede resolver el mapeo de cajas en el caso general con solo '.lower()' y '.upper()'. Considere el turco 'I' =' ı', 'İ' =' i'; Alemán 'ß' =' SS'; Griego 'Σ' = ambos' ς' y 'σ'. – hippietrail

+0

La resolución de abreviaturas es arriesgada. ¿Cómo sabes que 'US' significa 'Estados Unidos'? 'Tú y yo: ¡nosotros!' -> 'Tu y yo: ¡Estados Unidos!' –

0

Sugiero usar stopwords.words() para la eliminación de palabras prohibidas. Admite los siguientes idiomas: danés, holandés, inglés, francés, alemán, italiano, noruego, portugués, ruso, español y sueco.

0

Podría ser un poco tarde, pero esto puede ser útil. Aquí están las palabras de finalización para algunos idiomas (inglés, francés, alemán, finlandés, húngaro, turco, ruso, checo, griego, árabe, chino, japonés, coreano, catalán, polaco, hebreo, noruego, sueco, italiano, portugués y español).): https://pypi.python.org/pypi/many-stop-words

Cuestiones relacionadas