nltk StanfordNERTagger: Como obter nomes próprios sem letras maiúsculas

Estou tentando usar o StanfordNERTagger e o nltk para extrair palavras-chave de um pedaço de texto.

docText="John Donk works for POI. Brian Jones wants to meet with Xyz Corp. for measuring POI's Short Term performance Metrics."

words = re.split("\W+",docText) 

stops = set(stopwords.words("english"))

    #remove stop words from the list
words = [w for w in words if w not in stops and len(w) > 2]

str = " ".join(words)
print str
stn = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz') 
stp = StanfordPOSTagger('english-bidirectional-distsim.tagger') 
stanfordPosTagList=[word for word,pos in stp.tag(str.split()) if pos == 'NNP']

print "Stanford POS Tagged"
print stanfordPosTagList
tagged = stn.tag(stanfordPosTagList)
print tagged

isso me dá

John Donk works POI Brian Jones wants meet Xyz Corp measuring POI Short Term performance Metrics
Stanford POS Tagged
[u'John', u'Donk', u'POI', u'Brian', u'Jones', u'Xyz', u'Corp', u'POI', u'Short', u'Term']
[(u'John', u'PERSON'), (u'Donk', u'PERSON'), (u'POI', u'ORGANIZATION'), (u'Brian', u'ORGANIZATION'), (u'Jones', u'ORGANIZATION'), (u'Xyz', u'ORGANIZATION'), (u'Corp', u'ORGANIZATION'), (u'POI', u'O'), (u'Short', u'O'), (u'Term', u'O')]

tão claramente, coisas comoShort eTerm foram marcados comoNNP. Os dados que eu tenho contêm muitas instâncias em quenãoNNP as palavras são maiúsculas. Isso pode ser devido a erros de digitação ou talvez sejam cabeçalhos. Eu não tenho muito controle sobre isso.

Como posso analisar ou limpar os dados para detectar um nãoNNP prazo, embora possa ser capitalizado?Eu não quero termos comoShort eTerm para ser categorizado comoNNP

Além disso, não sei por queJohn Donk foi capturado como pessoa, masBrian Jones não foi. Poderia ser devido a outras não capitalizadasNNPestá nos meus dados? Isso poderia ter um efeito sobre como oStanfordNERTagger trata todo o resto?

Atualização, uma solução possível

Aqui está o que eu pretendo fazer

Pegue cada palavra e converta para minúsculasMarque a palavra em minúsculaSe a tag forNNP então sabemos que a palavra original também deve ser umaNNPCaso contrário, a palavra original foi colocada em maiúscula

Aqui está o que eu tentei fazer

str = " ".join(words)
print str
stp = StanfordPOSTagger('english-bidirectional-distsim.tagger') 
for word in str.split():
    wl = word.lower()
    print wl
    w,pos = stp.tag(wl)
    print pos
    if pos=="NNP":
        print "Got NNP"
        print w

mas isso me dá erro

John Donk works POI Jones wants meet Xyz Corp measuring POI short term performance metrics
john
Traceback (most recent call last):
  File "X:\crp.py", line 37, in <module>
    w,pos = stp.tag(wl)
ValueError: too many values to unpack

Eu tentei várias abordagens, mas sempre aparece algum erro.Como posso marcar uma única palavra?

Eu não quero converter toda a seqüência de caracteres para minúsculas e depois Tag. Se eu fizer isso, oStanfordPOSTagger retorna uma string vazia

questionAnswers(2)

yourAnswerToTheQuestion