2011-10-09 8 views
8

Yalnızca büyük harfle yazılmış cümleler içeren bir veri tabanım var. Veri tabanı tıbbi terimler içeren tekniktir ve onu normalleştirmek istiyorum ki, kapitalizasyon kullanıcının beklediği kadar yakındır. Bunu başarmanın en iyi yolu nedir? Sürecine yardımcı olmak için kullanabileceğim özgür bir veri kümesi var mı? truecasing üzerine çalışmaları içinSözcük için doğru büyük harf kullanımını nasıl en iyi şekilde belirlerim?

+0

tıbbi terimler zor olacaktır. –

+1

Bu, dile özgü, btw. Verileriniz İngilizce mi? –

+0

@Alex Yep, tüm ingilizce. – Mike

cevap

4

Arama: http://en.wikipedia.org/wiki/Truecasing

Bu normal harf ile benzer tıbbi verilere erişim varsa kendi veri kümesi oluşturmak gerçekten çok kolay olurdu. Her şeyi genişletin ve algoritmanızı eğitmek/test etmek için haritayı orijinal metne kullanın.

7

bir yolu Python Doğal Dil Toolkit (NLTK) kullanılarak örneğin POS etiketleme gelen harf anlaması için olabilir: Bilmiyorum, özellikle çünkü

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 

Bu mükemmel olmayacak ne senin veri exactely gibi görünüyor ama belki fikir edinebilirsiniz: bunu yapmak için

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

mükemmel çözüm. Bu api'yi de ilginç bulabilirsiniz. [Textacy] (https://pypi.python.org/pypi/textacy) – Pramit

2

En kolay yolu ngrams dayalı bir yazım düzeltme algoritması kullanmaktır.

Örneğin, LingPipe SpellChecker kullanabilirsiniz. Durumun tahmin edilmesi için yapılabileceklere benzer şekilde, sözcükleri boşluklarda tahmin etmek için kaynak kodu bulabilirsiniz.