我在处理文本之前运行此代码是为了处理文本
并得到RecursionError:比较超出了最大递归深度
train_text是一个带文字的python系列 stem是来自nltk库的PorterStemmer对象
train_corpus = []
for i in range(0, len(train_text)):
data = re.sub("[^a-zA-Z]", ' ', train_text[i]).lower().split()
data = [ps.stem(word) for word in data if not word in set(stopwords.words("english"))]
data = ' '.join(data)
train_corpus.append(data)
RecursionError Traceback (most recent call last)
<ipython-input-25-4a8646f33f6f> in <module>()
57 for i in range(0, len(train_text)):
58 data = re.sub("[^a-zA-Z]", ' ', train_text[i]).lower().split()
---> 59 data = [ps.stem(word) for word in data if not word in set(stopwords.words("english"))]
60 data = ' '.join(data)
61 train_corpus.append(data)
<ipython-input-25-4a8646f33f6f> in <listcomp>(.0)
57 for i in range(0, len(train_text)):
58 data = re.sub("[^a-zA-Z]", ' ', train_text[i]).lower().split()
---> 59 data = [ps.stem(word) for word in data if not word in set(stopwords.words("english"))]
60 data = ' '.join(data)
61 train_corpus.append(data)
~\Anaconda3\lib\site-packages\nltk\stem\porter.py in stem(self, word)
665 stem = self._step1a(stem)
666 stem = self._step1b(stem)
--> 667 stem = self._step1c(stem)
668 stem = self._step2(stem)
669 stem = self._step3(stem)
....
我该怎么做才能解决这个问题?
感谢。
答案 0 :(得分:0)
看起来它可以通过Docs获胜:
setrecursionlimit()
。
但是请记住,递归不是免费的 - 它会消耗memory_of_function_consumes * amount_of_circles_of_recursion
- 所以当你有大量的递归运行时你可能会耗尽内存。这就是为什么这个限制在Python中是硬编码的,我认为覆盖它是个坏主意。
答案 1 :(得分:-1)
您可以手动设置递归深度但请小心
sys.setrecursionlimit(n)
#replace n具有您想要达到的深度
原因:当堆栈超出其限制(Stack Overflow)时发生
解决方法:或者使用迭代而不是递归技术
修改强> 来自Python Doc
https://docs.python.org/2/library/sys.html#sys.setrecursionlimit
将Python解释器堆栈的最大深度设置为limit。这个 limit可防止无限递归导致C溢出 堆栈并崩溃Python。
可能的最高限制取决于平台。当用户需要深度的程序时,用户可能需要将限制设置得更高 递归和支持更高限制的平台。这应该是 小心,因为太高的限制可能会导致崩溃。