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 @ liegNNP
s 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 muNNP
Wenn nicht, dann wurde das ursprüngliche Wort falsch groß geschriebenHier 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