La siguiente función reemplaza letras con similitud fonética en idioma español. Esto para reducir la vectorización de texto en escenarios de documentos con faltas ortográficas (como texto de redes sociales).
Para otras técnicas ver:
How to Write a Spelling Corrector, by Peter Norvin
Fuzzy matching (Soundex, NYSIIS, Metaphone)
script python:
import re def clean_fonetic(xtext, py='py3'): xtext = str(xtext) xtext = xtext.lower() xtext = re.sub('w', 'u', xtext) xtext = re.sub('np', 'mp', xtext) xtext = re.sub('nb', 'mb', xtext) xtext = re.sub('ce', 'se', xtext) xtext = re.sub('ci', 'si', xtext) xtext = re.sub('v', 'b', xtext) xtext = re.sub('z', 's', xtext) xtext = re.sub('lla', 'ya', xtext) xtext = re.sub('lle', 'ye', xtext) xtext = re.sub('lli', 'yi', xtext) xtext = re.sub('llo', 'yo', xtext) xtext = re.sub('llu', 'yu', xtext) xtext = re.sub('ka', 'ca', xtext) xtext = re.sub(r'\bk\b', 'que', xtext) xtext = re.sub(r'\bq\b', 'que', xtext) xtext = re.sub('ke', 'que', xtext) xtext = re.sub('ki', 'qui', xtext) xtext = re.sub('ko', 'co', xtext) xtext = re.sub('ku', 'cu', xtext) xtext = re.sub('kra', 'cra', xtext) xtext = re.sub('kre', 'cre', xtext) xtext = re.sub('kri', 'cri', xtext) xtext = re.sub('kro', 'cro', xtext) xtext = re.sub('kru', 'cru', xtext) xtext = re.sub('ga', 'ga', xtext) xtext = re.sub('ge', 'je', xtext) xtext = re.sub('gi', 'ji', xtext) xtext = re.sub('go', 'go', xtext) xtext = re.sub('gu', 'gu', xtext) xtext = re.sub(r'\bha', 'a', xtext) xtext = re.sub(r'\bhe', 'e', xtext) xtext = re.sub(r'\bhi', 'i', xtext) xtext = re.sub(r'\bho', 'o', xtext) xtext = re.sub(r'\bhu', 'u', xtext) xtext = re.sub(r'\bexp', 'esp', xtext) xtext = re.sub(r'\bexc', 'ese', xtext) xtext = re.sub(r'\bexs', 'ese', xtext) xtext = re.sub(r'\bext', 'est', xtext) # empiezan por ex+[vocal] xtext = re.sub(r'\bexa', 'esa', xtext) xtext = re.sub(r'\bexe', 'ese', xtext) xtext = re.sub(r'\bexi', 'esi', xtext) xtext = re.sub(r'\bexo', 'eso', xtext) xtext = re.sub(r'\bexu', 'esu', xtext) # termian en exion ixion xtext = re.sub(r'exion\b', 'esion', xtext) xtext = re.sub(r'ixion\b', 'ision', xtext) xtext = re.sub(r'axion\b', 'asion', xtext) xtext = re.sub(r'\be\b', 'y', xtext) xtext = re.sub(r'\bi\b', 'y', xtext) xtext = re.sub(r'\bu\b', 'o', xtext) xtext = re.sub(r'\bx\b', 'por', xtext) xtext = re.sub(r'([a-z])\1+', r'\1', xtext) return unicode(xtext) if py=='py2' else str(xtext) txt = 'verguenza, berguenza, berguensa, berrrrrguensaaa' clean_fonetic(txt)
# berguensa, berguensa, berguensa, berguensa
No hay comentarios:
Publicar un comentario