Stop Word Removal mit NLTK

Ich habe mit NLTK und Datenbank Klassifizierung gearbeitet. Ich habe ein Problem mit Stop-Wort-Entfernung. Wenn ich die Liste der Stoppwörter ausdrucke, werden alle Wörter mit "u" vor ihnen aufgelistet. Zum Beispiel: [u'all ", u'just ', u'being', u'over ', u'both', u'through '] Ich bin mir nicht sicher, ob das normal ist oder ein Teil des Problems ist.

Wenn ich drucke (1_feats) bekomme ich eine Liste von Wörtern, wobei einige von ihnen die Stichworte sind, die im Korpus aufgeführt sind.

import os from nltk.classify import NaiveBayesClassifier from nltk.corpus import stopwords stopset = list(set(stopwords.words('english'))) morewords = 'delivery', 'shipment', 'only', 'copy', 'attach', 'material' stopset.append(morewords) def word_feats(words): return dict([(word, True) for word in words.split() if word not in stopset]) ids_1 = {} ids_2 = {} ids_3 = {} ids_4 = {} ids_5 = {} ids_6 = {} ids_7 = {} ids_8 = {} ids_9 = {} path1 = "/Users/myname/Documents/Data Classifier Files/1/" for name in os.listdir(path1): if name[-4:] == '.txt': f = open(path1 + "/" + name, "r") ids_1[name] = f.read() f.close() path2 = "/Users/myname/Documents/Data Classifier Files/2/" for name in os.listdir(path2): if name[-4:] == '.txt': f = open(path2 + "/" + name, "r") ids_2[name] = f.read() f.close() path3 = "/Users/myname/Documents/Data Classifier Files/3/" for name in os.listdir(path3): if name[-4:] == '.txt': f = open(path3 + "/" + name, "r") ids_3[name] = f.read() f.close() path4 = "/Users/myname/Documents/Data Classifier Files/4/" for name in os.listdir(path4): if name[-4:] == '.txt': f = open(path4 + "/" + name, "r") ids_4[name] = f.read() f.close() path5 = "/Users/myname/Documents/Data Classifier Files/5/" for name in os.listdir(path5): if name[-4:] == '.txt': f = open(path5 + "/" + name, "r") ids_5[name] = f.read() f.close() path6 = "/Users/myname/Documents/Data Classifier Files/6/" for name in os.listdir(path6): if name[-4:] == '.txt': f = open(path6 + "/" + name, "r") ids_6[name] = f.read() f.close() path7 = "/Users/myname/Documents/Data Classifier Files/7/" for name in os.listdir(path7): if name[-4:] == '.txt': f = open(path7 + "/" + name, "r") ids_7[name] = f.read() f.close() path8 = "/Users/myname/Documents/Data Classifier Files/8/" for name in os.listdir(path8): if name[-4:] == '.txt': f = open(path8 + "/" + name, "r") ids_8[name] = f.read() f.close() path9 = "/Users/myname/Documents/Data Classifier Files/9/" for name in os.listdir(path9): if name[-4:] == '.txt': f = open(path9 + "/" + name, "r") ids_9[name] = f.read() f.close() feats_1 = [(word_feats(ids_1[f]), '1') for f in ids_1 ] feats_2 = [(word_feats(ids_2[f]), "2") for f in ids_2 ] feats_3 = [(word_feats(ids_3[f]), '3') for f in ids_3 ] feats_4 = [(word_feats(ids_4[f]), '4') for f in ids_4 ] feats_5 = [(word_feats(ids_5[f]), '5') for f in ids_5 ] feats_6 = [(word_feats(ids_6[f]), '6') for f in ids_6 ] feats_7 = [(word_feats(ids_7[f]), '7') for f in ids_7 ] feats_8 = [(word_feats(ids_8[f]), '8') for f in ids_8 ] feats_9 = [(word_feats(ids_9[f]), '9') for f in ids_9 ] trainfeats = feats_1 + feats_2 + feats_3 + feats_4 + feats_5 + feats_6 + feats_7 + feats_8 + feats_9 classifier = NaiveBayesClassifier.train(trainfeats) 

    One Solution collect form web for “Stop Word Removal mit NLTK”

    Nach dem Ausführen dieser drei Zeilen,

     stopset = list(set(stopwords.words('english'))) morewords = 'delivery', 'shipment', 'only', 'copy', 'attach', 'material' stopset.append(morewords) 

    Blick auf stopset (Ausgabe verkürzt):

     >>> stopset [u'all', u'just', u'being', ... u'having', u'once', ('delivery', 'shipment', 'only', 'copy', 'attach', 'material')] 

    Die zusätzlichen Einträge von morewords sind nicht auf der gleichen Ebene wie die vorherigen Wörter: stattdessen wird das ganze Tupel von Wörtern als ein einziges morewords gesehen, was keinen Sinn macht.

    Der Grund dafür ist einfach: list.append() fügt ein Element hinzu, list.extend() fügt viele hinzu.

    Also, verändere stopset.append(morewords) zu stopset.extend(morewords) .
    Oder noch besser, halten Sie die Stopp Worte als Set, für schnellere Suche. Die richtige Methode, um mehrere Elemente hinzuzufügen, ist set.update() :

     stopset = set(stopwords.words('english')) morewords = ['delivery', 'shipment', 'only', 'copy', 'attach', 'material'] stopset.update(morewords) 
    Python ist die beste Programmiersprache der Welt.