nltk StanfordNERTagger: Wie man Substantive ohne Großschreibung bekommt

Ich versuche, mit StanfordNERTagger und nltk Stichwörter aus einem Textstück zu extrahieren.

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

das gibt mir

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

so klar, Dinge wieShort undTerm wurden als @ getagNNP. Die Daten, die ich habe, enthält viele solcher Fälle, in denennonNNP Wörter werden groß geschrieben. Dies kann an Tippfehlern liegen oder an Überschriften. Ich habe nicht viel Kontrolle darüber.

Wie kann ich die Daten analysieren oder bereinigen, damit ich ein Nicht-@ erkennen kanNNP Begriff, obwohl es groß geschrieben werden kann?Ich möchte keine Begriffe wieShort undTerm als @ kategorisiert werdNNP

Auch nicht sicher warumJohn Donk wurde als Person erfasst, aberBrian Jones war nicht. Könnte es an dem anderen kapitalisierten non @ liegNNPs in meinen Daten? Könnte das Auswirkungen darauf haben, wie dasStanfordNERTagger behandelt alles andere?

Update, eine mögliche Lösung

Hier ist was ich vorhabe

Nimm jedes Wort und wandle es in Kleinbuchstaben umKennzeichnen Sie das Wort in KleinbuchstabenWenn das Tag @ iNNP dann wissen wir, dass das ursprüngliche Wort auch ein @ sein muNNPWenn nicht, dann wurde das ursprüngliche Wort falsch groß geschrieben

Hier ist, was ich versucht habe zu tun

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

Aber das gibt mir Fehler

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

Ich habe mehrere Ansätze ausprobiert, aber einige Fehler werden immer angezeigt.Wie kann ich ein einzelnes Wort markieren?

Ich möchte nicht die gesamte Zeichenfolge in Kleinbuchstaben und dann Tag konvertieren. Wenn ich das tue, wird dasStanfordPOSTagger gibt eine leere Zeichenkette zurück

Antworten auf die Frage(4)

Ihre Antwort auf die Frage