Проблемы с Gensim WikiCorpus - псевдоним chunkize для chunkize_serial; (__mp_main__ вместо __main__?) - PullRequest
0 голосов
/ 16 февраля 2020

Я довольно новичок в Python и вообще пишу код, поэтому, похоже, я столкнулся с проблемой.

Я пытаюсь запустить этот код (благодарность Мэтью Мейо, все может можно найти здесь ):

# import warnings
# warnings.filterwarnings(action = 'ignore', category = UserWarning, module = 'gensim')
import sys
from gensim.corpora import WikiCorpus

def make_corpus (in_f, out_f):
    print(0)
    output = open(out_f, 'w', encoding = 'utf-8')
    print(1)
    wiki = WikiCorpus(in_f)
    print(2)
    i = 0
    for text in wiki.get_texts():
        output.write(bytes(' '.join(text), 'utf-8').decode('utf-8') + '/n')
        i += 1
        if i % 10000 == 0:
            print('Processed {} articles!'.format(i))
    print(3)
    output.close()
    print('Process complete!')



print('start')
if __name__ == '__main__':
    if len(sys.argv) != 3:
        print('Usage: python make_wiki_corpus.py <wikipedia_dump_file> <processed_text_file>')
        sys.exit(1)
    in_f = sys.argv[1]
    out_f = sys.argv[2]
    make_corpus(in_f, out_f)
else:
    print(__name__)

Однако ветвь функции, кажется, работает частично, останавливаясь на wiki = WikiCorpus(in_f) - она ​​никогда не достигает print(2) - и затем выходит и повторение начала кода, безрезультатно. На самом деле никаких ошибок не возникает, только предупреждение (UserWarning: detected Windows; aliasing chunkize to chunkize_serial warnings.warn("detected Windows; aliasing chunkize to chunkize_serial")).

Вывод такой:

start
0
1
C:\Users\name\Anaconda3\lib\site-packages\gensim\utils.py:1254: UserWarning: detected Windows; aliasing chunkize to chunkize_serial warnings.warn("detected Windows; aliasing chunkize to chunkize_serial")
start
__mp_main__
start
__mp_main__
start
__mp_main__

Я попытался удалить все необходимые пакеты (numpy, smart_open) , а также сам Gensim (в активной среде Conda), но ничего не изменилось. Кроме того, в чем разница между main и многопроцессорным?

- Технические характеристики: win64, py 3.7.3

Редактировать: после запуска регистрации на DEBUG уровень, файл журнала

2020-02-16 22:49:00,061:start: :13396 
2020-02-16 22:49:00,061:0 :13396 
2020-02-16 22:49:00,061:1 :13396 
2020-02-16 22:49:01,493:start: :22356 
2020-02-16 22:49:01,493:3 :22356 
2020-02-16 22:49:01,496:start: :25332 
2020-02-16 22:49:01,497:3 :25332 
2020-02-16 22:49:01,530:start: :7120 
2020-02-16 22:49:01,530:3 :7120 
2020-02-16 22:49:01,541:adding document #0 to Dictionary(0 unique tokens: []):13396

(также «3» был добавлен в ветку else:)

else:
    logging.debug('3 ')

1 Ответ

0 голосов
/ 19 февраля 2020

Windows ОС может быть способствующим фактором; многие вещи, связанные с многопроцессорной обработкой, работают по-другому, в то время как gensim получает гораздо большее применение и тестирование в других местах. Поэтому, если есть возможность протестировать ваш код под другой ОС или потенциально использовать другую ОС полностью, эта проблема и другие потенциальные будущие проблемы могут стать неактуальными.

Другие вещи, которые нужно проверить и попробовать:

  • Создается ли файл wiki_en.txt или вообще получается какой-либо вывод?

  • Поможет ли вам указать processes=1 в качестве аргумента WikiCorpus, чтобы использовался только один рабочий процесс?

  • если вы тестировали какой-то код, который вообще не пытается использовать WikiCorpus, попытайтесь прочитать исходный дамп вики, используя BZ2File для его распаковки, в том же стиле, что и исходный код gensim wikicorpus.py , это работает, или также показывает подобную проблему? (Если есть подобная проблема, то это полезный случай запуска, который фокусирует внимание на операции BZ2File на Windows.)

  • вы случайно используете Многопотоковый файл BZ2 из Википедии , и если да, можете ли вы попробовать альтернативу, не относящуюся к многопоточности, и посмотреть, сохраняется ли та же проблема (в случае, если это проблема с BZ2File и многопоточностью на Windows)?

...