nltk StanfordNERTagger: Cómo obtener nombres propios sin mayúsculas

Estoy tratando de usar StanfordNERTagger y nltk para extraer palabras clave de un fragmento 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

esto me da

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')]

tan claramente, cosas comoShort yTerm fueron etiquetados comoNNP. Los datos que tengo contienen muchos de esos casos dondenoNNP las palabras están en mayúscula. Esto podría deberse a errores tipográficos o tal vez son encabezados. No tengo mucho control sobre eso.

¿Cómo puedo analizar o limpiar los datos para poder detectar un noNNP plazo a pesar de que puede ser capitalizado?No quiero términos comoShort yTerm para ser categorizado comoNNP

Además, no estoy seguro de por quéJohn Donk fue capturado como persona peroBrian Jones no estaba. ¿Podría ser debido a la otra no capitalizadaNNPs en mis datos? ¿Podría eso tener un efecto sobre cómoStanfordNERTagger trata todo lo demás?

Actualización, una posible solución

Esto es lo que planeo hacer

Toma cada palabra y conviértela a minúsculasEtiquetar la palabra en minúsculaSi la etiqueta esNNP entonces sabemos que la palabra original también debe ser unNNPSi no, entonces la palabra original estaba en mayúscula

Esto es lo que intenté hacer.

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

pero esto me da error

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

He intentado múltiples enfoques, pero siempre aparece algún error.¿Cómo puedo etiquetar una sola palabra?

No quiero convertir toda la cadena a minúsculas y luego a Etiqueta. Si hago eso, elStanfordPOSTagger devuelve una cadena vacía

Respuestas a la pregunta(2)

Su respuesta a la pregunta