Stoppwort-Entfernung mit NLTK
Ich versuche zu verarbeiten, die ein Benutzer eingegebenen text durch entfernen von Stoppwörtern mit nltk-toolkit, aber mit stoppwort-Entfernung der Wörter wie 'und', 'oder', 'nicht' wieder entfernt werden. Ich möchte diese Worte werden nach stopword Entfernung Prozess, wie Sie sind Operatoren, die erforderlich sind für die spätere Verarbeitung von text als Abfrage. Ich weiß nicht, welches sind die Worte, die sein können Operatoren in text-Abfrage, und ich will auch entfernen Sie unnötige Wörter aus meinem text.
InformationsquelleAutor der Frage Grahesh Parkar | 2013-10-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich schlage vor, Sie erstellen Ihre eigene Liste von operator Worten, dass Sie aus der stoppwort-Liste. Sets können bequem abgezogen, also:
Dann können Sie einfach testen, ob ein Wort
in
odernot in
den Satz, ohne sich auf Sie, ob Ihre Mitarbeiter sind Teil der stoppwort-Liste. Sie können dann später zu einem anderen wechseln stoppwort-Liste oder fügen Sie einen operator aus.InformationsquelleAutor der Antwort otus
Es ist ein in-built stoppwort-Liste in
NLTK
aus 2.400 Stoppwörter für 11 Sprachen (Porter et al), siehe http://nltk.org/book/ch02.htmlEmpfehle ich auf der Suche bei Verwendung von tf-idf, um Stoppwörter zu entfernen, siehe Auswirkungen der Wortstamm auf den Begriff Frequenz?
InformationsquelleAutor der Antwort alvas
@alvas Antwort macht den job, aber es kann getan werden, viel schneller. Angenommen, Sie haben
documents
: eine Liste von strings.Beachten Sie, dass aufgrund der Tatsache, dass Sie hier sind, suchen in einer Menge (nicht eine Liste) die Geschwindigkeit wäre theoretisch
len(stop_words)/2
mal schneller, das ist wichtig, wenn Sie funktionieren müssen, sind durch viele Dokumente.Für 5000 Dokumente, die von etwa 300 Wörter pro der Unterschied ist zwischen 1,8 Sekunden für mein Beispiel und 20 Sekunden für @alvas.
P. S. in den meisten Fällen müssen Sie teilen den text in Wörter, um eine andere Klassifizierung Aufgaben, für die tf-idf verwendet. So sind die meisten wahrscheinlich, es wäre besser, verwenden stemmer:
und zu verwenden
[porter.stem(i.lower()) for i in wordpunct_tokenize(doc) if i.lower() not in stop_words]
innerhalb einer Schleife.InformationsquelleAutor der Antwort Salvador Dali
@alvas hat eine gute Antwort. Aber wieder, es hängt von der Art der Aufgabe, z.B. in der Anwendung, die Sie wollen zu berücksichtigen, alle
conjunction
z.B. und, oder, aber, wenn, während und alledeterminer
z.B. die, eine, einige, die meisten, alle, keine als Stopp-Wörter unter Berücksichtigung aller anderen Teile der Rede, wie legitim, dann möchten Sie vielleicht einen Blick in diese Lösung, welche use-Part-of-Speech-Tagset zu verwerfen Worte, Überprüfen Sie Tabelle 5.1:InformationsquelleAutor der Antwort Aamir Adnan
Können Sie string.Satzzeichen mit built-in NLTK Stoppwörter-Liste:
NLTK Stoppwörter komplette Liste
InformationsquelleAutor der Antwort UsmanZ