【问题标题】:Recursion Error: Maximum Recursion depth exceeded递归错误:超出最大递归深度
【发布时间】:2016-12-10 14:51:13
【问题描述】:
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())

当我为目录中包含的所有文本文件运行上述代码时,它会引发以下错误: RecursionError: 超出最大递归深度。

我试图用 sys.setrecursionlimit 解决问题,但一切都是徒劳的。当我提供像 20000 这样的大值时,会发生内核崩溃错误。

【问题讨论】:

  • 尝试用super(StemmedCountVectorizer, self).build_analyzer()替换super(StemmedCountVectorizer, self.build_analyzer())
  • 谢谢.. 它对我有用
  • 这样打开文件有什么意义?如果有多个,您最终会打开所有这些,并且只使用最后一个打开的。使该函数成为打开文件的返回值或添加一些中断,或者如果您想处理多个文件,请将它们添加到列表中,或者如果您知道文件在哪里则直接打开文件

标签: python recursion scikit-learn nltk stemming


【解决方案1】:

您的错误在analyzer = super(StemmedCountVectorizer, self.build_analyzer()) 中,您在超级调用之前调用了函数build_analyzer,这会导致无限递归循环。改成analyzer = super(StemmedCountVectorizer, self).build_analyzer()

【讨论】:

    猜你喜欢
    • 2018-12-03
    • 2019-07-03
    • 1970-01-01
    • 2020-09-30
    • 2017-07-18
    • 2021-12-11
    • 2018-03-04
    • 1970-01-01
    • 2013-12-01
    相关资源
    最近更新 更多