2011-10-09 6 views
8

Tengo una base de datos que contiene oraciones que solo contienen letras mayúsculas. La base de datos es técnica, contiene términos médicos y quiero normalizarla para que la capitalización sea (cercana a) lo que espera el usuario. ¿Cuál es la mejor manera de lograr esto? ¿Hay un conjunto de datos disponible libremente que pueda usar para ayudar con el proceso?¿Cómo puedo determinar mejor el uso de mayúsculas correcto para una palabra?

+0

términos médicos serán difíciles. –

+1

Esto es específico del idioma, por cierto. ¿Tus datos están en inglés? –

+0

@Alex Yep, todo inglés. – Mike

Respuesta

4

Búsqueda de trabajo sobre truecasing: http://en.wikipedia.org/wiki/Truecasing

Sería muy fácil generar establecer sus propios datos si tiene acceso a los datos médicos similares con mayúsculas normal. Capitalice todo y use la asignación al texto original para entrenar/probar su algoritmo.

7

Una forma podría ser para inferir la capitalización del POS-etiquetado, por ejemplo, usando el lenguaje natural del pitón Toolkit (NLTK):

import nltk, re 

def truecase(text): 
    truecased_sents = [] # list of truecased sentences 
    # apply POS-tagging 
    tagged_sent = nltk.pos_tag([word.lower() for word in nltk.word_tokenize(text)]) 
    # infer capitalization from POS-tags 
    normalized_sent = [w.capitalize() if t in ["NN","NNS"] else w for (w,t) in tagged_sent] 
    # capitalize first word in sentence 
    normalized_sent[0] = normalized_sent[0].capitalize() 
    # use regular expression to get punctuation right 
    pretty_string = re.sub(" (?=[\.,'!?:;])", "", ' '.join(normalized_sent)) 
    return pretty_string 

Esto no va a ser perfecto, sobre todo porque no sé lo que su los datos se ve como exactely, pero tal vez usted puede conseguir la idea:

>>> text = "Clonazepam Has Been Approved As An Anticonvulsant To Be Manufactured In 0.5mg, 1mg And 2mg Tablets. It Is The Generic Equivalent Of Roche Laboratories' Klonopin." 
>>> truecase(text) 
"Clonazepam has been approved as an anticonvulsant to be manufactured in 0.5mg, 1mg and 2mg Tablets. It is the generic Equivalent of Roche Laboratories' Klonopin." 
+0

gran solución. También puede encontrar esta API interesante. [textacy] (https://pypi.python.org/pypi/textacy) – Pramit

2

la manera más fácil de hacer esto es utilizar un algoritmo de corrección ortográfica basado en N-gramas.

Puede usar, por ejemplo, LingPipe SpellChecker. Puede encontrar el código fuente para predecir espacios en word, similar a lo que se puede hacer para predecir el caso.

Cuestiones relacionadas