构建快速索引时超出最大递归深度
Maximum recursion depth exceeded when building a whoosh index
我正在尝试使用 Whoosh 为一些文档编制索引。但是,当我尝试将文档添加到 Whoosh 索引时,Python 最终返回以下错误:
RecursionError: maximum recursion depth exceeded while calling a Python object
我试过使用索引编写器的 limitmb
设置,以及更改索引提交到硬盘的频率。这似乎改变了成功建立索引的文档数量,但是不久之后索引停止并出现 RecursionError。
我的代码如下:
from whoosh.index import create_in
from whoosh.fields import *
from whoosh.qparser import QueryParser
from bs4 import BeautifulSoup
import os
schema = Schema(title=TEXT(stored=True), docID=ID(stored=True), content=TEXT(stored=True))
ix = create_in("index", schema)
writer = ix.writer(limitmb=1024, procs=4, multisegment=True);
for root, dirs, files in os.walk('aquaint'):
for file in files:
with open(os.path.join(root, file), "r") as f:
soup = BeautifulSoup(f.read(), 'html.parser')
for doc in soup.find_all('doc'):
try:
t = doc.find('headline').string
except:
t = "No title available"
try:
d = doc.find('docno').string
except:
d = "No docID available"
try:
c = doc.find('text').string
except:
c = "No content available"
writer.add_document(title=t, docID=d, content=c)
writer.commit()
我正在加载的文件来自 TRAC robust track (https://trec.nist.gov/data/t14_robust.html) 并且具有以下格式(由于许可我无法共享整个文件):
<DOC>
<DOCNO> APW1XXXXXXXXX </DOCNO>
<DOCTYPE> NEWS STORY </DOCTYPE>
<DATE_TIME> 1998-01-06 00:17:00 </DATE_TIME>
<HEADER>
XXXX
</HEADER>
<BODY>
<SLUG> BC-Sports-Motorcycling-Grand Prix-Doohan </SLUG>
<HEADLINE>
Doohan calls for upgrade to 1000cc bikes
</HEADLINE>
<TEXT>
News article text here
</TEXT>
(PROFILE
(WS SL:BC-Sports-Motorcycling-Grand Prix-Doohan; CT:s;
(REG:EURO;)
(REG:BRIT;)
(REG:SCAN;)
(REG:MEST;)
(REG:AFRI;)
(REG:INDI;)
(REG:ENGL;)
(REG:ASIA;)
(LANG:ENGLISH;))
)
</BODY>
<TRAILER>
AP-NY-06-01-98 0017EDT
</TRAILER>
</DOC>
加载的每个文件都包含其中的几个文档,以 <DOC>
标签开头和结尾。
我不明白是什么导致了这个错误,有人可以帮助我吗?
非常感谢您的帮助!
我发现了问题所在,我错误地认为 BeautifulSoup 在调用 doc.find('headline').string
时会 return 一个字符串,将其替换为 str(doc.find('headline').string)
似乎已经解决了问题给我,Whoosh 现在索引正确。
我正在尝试使用 Whoosh 为一些文档编制索引。但是,当我尝试将文档添加到 Whoosh 索引时,Python 最终返回以下错误:
RecursionError: maximum recursion depth exceeded while calling a Python object
我试过使用索引编写器的 limitmb
设置,以及更改索引提交到硬盘的频率。这似乎改变了成功建立索引的文档数量,但是不久之后索引停止并出现 RecursionError。
我的代码如下:
from whoosh.index import create_in
from whoosh.fields import *
from whoosh.qparser import QueryParser
from bs4 import BeautifulSoup
import os
schema = Schema(title=TEXT(stored=True), docID=ID(stored=True), content=TEXT(stored=True))
ix = create_in("index", schema)
writer = ix.writer(limitmb=1024, procs=4, multisegment=True);
for root, dirs, files in os.walk('aquaint'):
for file in files:
with open(os.path.join(root, file), "r") as f:
soup = BeautifulSoup(f.read(), 'html.parser')
for doc in soup.find_all('doc'):
try:
t = doc.find('headline').string
except:
t = "No title available"
try:
d = doc.find('docno').string
except:
d = "No docID available"
try:
c = doc.find('text').string
except:
c = "No content available"
writer.add_document(title=t, docID=d, content=c)
writer.commit()
我正在加载的文件来自 TRAC robust track (https://trec.nist.gov/data/t14_robust.html) 并且具有以下格式(由于许可我无法共享整个文件):
<DOC>
<DOCNO> APW1XXXXXXXXX </DOCNO>
<DOCTYPE> NEWS STORY </DOCTYPE>
<DATE_TIME> 1998-01-06 00:17:00 </DATE_TIME>
<HEADER>
XXXX
</HEADER>
<BODY>
<SLUG> BC-Sports-Motorcycling-Grand Prix-Doohan </SLUG>
<HEADLINE>
Doohan calls for upgrade to 1000cc bikes
</HEADLINE>
<TEXT>
News article text here
</TEXT>
(PROFILE
(WS SL:BC-Sports-Motorcycling-Grand Prix-Doohan; CT:s;
(REG:EURO;)
(REG:BRIT;)
(REG:SCAN;)
(REG:MEST;)
(REG:AFRI;)
(REG:INDI;)
(REG:ENGL;)
(REG:ASIA;)
(LANG:ENGLISH;))
)
</BODY>
<TRAILER>
AP-NY-06-01-98 0017EDT
</TRAILER>
</DOC>
加载的每个文件都包含其中的几个文档,以 <DOC>
标签开头和结尾。
我不明白是什么导致了这个错误,有人可以帮助我吗? 非常感谢您的帮助!
我发现了问题所在,我错误地认为 BeautifulSoup 在调用 doc.find('headline').string
时会 return 一个字符串,将其替换为 str(doc.find('headline').string)
似乎已经解决了问题给我,Whoosh 现在索引正确。