2016-08-04 42 views
0
überschritten
from __future__ import print_function 
import os, codecs, nltk.stem 

english_stemmer = nltk.stem.SnowballStemmer('english') 
for root, dirs, files in os.walk("/Users/Documents/corpus/source-document/test1"): 
     for file in files: 
      if file.endswith(".txt"): 
       posts = codecs.open(os.path.join(root,file),"r", "utf-8-sig") 
from sklearn.feature_extraction.text import CountVectorizer 
class StemmedCountVectorizer(CountVectorizer): 
    def build_analyzer(self): 
     analyzer = super(StemmedCountVectorizer, self.build_analyzer()) 
     return lambda doc: (english_stemmer.stem(w) for w in analyzer(doc)) 

vectorizer = StemmedCountVectorizer(min_df = 1, stop_words = 'english') 
X_train = vectorizer.fit_transform(posts) 
num_samples, num_features = X_train.shape 
print("#samples: %d, #features: %d" % (num_samples, num_features))  #samples: 5, #features: 25 
print(vectorizer.get_feature_names()) 

Wenn ich den obigen Code für die ganze Textdatei im Verzeichnis enthaltenen ausgeführt wird, wird folgende Fehler werfen: RecursionError: maximale Rekursionstiefe überschritten.Rekursion Fehler: Maximale Rekursionstiefe

Ich habe versucht, das Problem mit sys.setrecursionlimit zu lösen, aber alles vergebens. Wenn ich einen großen Wert wie 20000 zur Verfügung stelle, tritt der Kernel-Absturzfehler auf.

+1

ersetzt 'Super (StemmedCountVectorizer, self.build_analyzer())' mit 'Super (StemmedCountVectorizer, Selbst-) .build_analyzer()' –

+0

Dank .. Es funktioniert für mich –

+0

was der Punkt ist, die der Öffnung Datei so? Wenn es mehr als einen gibt, öffnest du alle und öffnest nur den letzten. Machen Sie das zu einer Funktion, die die Datei öffnet oder eine Pause hinzufügt, oder wenn Sie mit mehreren Dateien arbeiten möchten, fügen Sie sie zu einer Liste hinzu oder öffnen Sie die Datei direkt, wenn Sie wissen, wo sie sich befindet – Copperfield

Antwort

2

Ihr Fehler ist in analyzer = super(StemmedCountVectorizer, self.build_analyzer()) hier rufen Sie die Funktion build_analyzer vor dem Superaufruf, die eine unendliche rekursive Schleife verursachen. Versuchen Sie ändern es für analyzer = super(StemmedCountVectorizer, self).build_analyzer()