2011-10-09 6 views
8

Mam bazę danych zawierającą zdania, które zawierają tylko litery pisane wielką literą. Baza danych jest techniczna, zawierająca terminy medyczne i chcę ją znormalizować, aby wielkość liter była zbliżona do oczekiwanej przez użytkownika. Jaki jest najlepszy sposób, aby to osiągnąć? Czy istnieje swobodnie dostępny zestaw danych, którego mogę użyć, aby pomóc w procesie?Jak najlepiej określić prawidłową wielkość liter dla słowa?

+0

warunki medyczne będą trudne. –

+1

To jest specyficzne dla języka, btw. Czy Twoje dane są w języku angielskim? –

+0

@Alex Yep, cały angielski. – Mike

Odpowiedz

4

Szukaj pracy na truecasing: http://en.wikipedia.org/wiki/Truecasing

Byłoby naprawdę łatwe do wygenerowania ustawić własne dane, jeśli mają dostęp do podobnych danych medycznych z normalnym kapitalizacji. Zamapuj wszystko i użyj mapowania do oryginalnego tekstu, aby szkolić/testować swój algorytm.

7

Jednym ze sposobów może być wywnioskować kapitalizacji z POS-tagging, na przykład za pomocą Python Natural Language 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 

To nie będzie idealny, zwłaszcza dlatego, że nie wiem, co się dane exactely wygląda, ale może masz pomysł:

>>> 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

świetne rozwiązanie. Również ten api może ci się spodobać. [tekst] (https://pypi.python.org/pypi/textacy) – Pramit

2

najprostszym sposobem na to jest użycie algorytmu korekcji pisowni oparciu o ngrams.

Można użyć na przykład LingPipe SpellChecker. Możesz znaleźć kod źródłowy do przewidywania spacji w słowie, podobny do tego, co można zrobić dla przewidywania przypadku.

Powiązane problemy