Максимальная глубина рекурсии превышена при построении индекса Whoosh - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь проиндексировать некоторые документы, используя 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 (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>.

Я не понимаю, в чем причина этой ошибки, кто-то может мне помочь? Ваша помощь очень ценится!

1 Ответ

0 голосов
/ 25 февраля 2019

Я обнаружил, в чем проблема, я ошибочно предположил, что BeautifulSoup вернет строку при вызове doc.find('headline').string, замена ее на str(doc.find('headline').string), похоже, исправила проблему для меня, и Whoosh теперь правильно индексирует.

...