Python код нон-стоп при обработке текстовых документов - PullRequest
1 голос
/ 13 января 2020

Я выполняю следующий код для обработки списка документов, в основном это всего два цикла for.

from nltk.tokenize import TreebankWordTokenizer
from gensim.models import KeyedVectors
from nlpia.loaders import get_data
word_vectors = get_data('w2v', limit=200000)

def tokenize_and_vectorize(dataset):
    tokenizer = TreebankWordTokenizer()
    vectorized_data = []
    expected = []
    for sample in dataset:
        tokens = tokenizer.tokenize(sample[1])
        sample_vecs = []
        for token in tokens:
            try:
               sample_vecs.append(word_vectors[token])

            except KeyError:
               pass  

        vectorized_data.append(sample_vecs)
        #print(1)
    return vectorized_data

, затем я вызываю функцию для обработки 25k верхних элементов

vectorized_data=tokenize_and_vectorize(dataset[0:25000])

Однако этот код работает вечно, так как знак * никогда не исчезает. (Примечание: я попытался запустить только 50 выборок, и результаты вернулись довольно быстро)

Чтобы увидеть, где он застрял, я наивно добавил print(1) перед return vectorized_data, поэтому для каждого цикла l oop возвращает мне 1. Через 1мин36с c я получил все результаты.

Боковое наблюдение за использованием памяти компьютера. В случае, не добавляя print (1), я заметил, что использование памяти было высоким в начале и вернулось к нормальному уровню через пару минут, но не уверен, что это означает, что процесс завершен, хотя знак * все еще показывает.

Чем вызвана эта проблема и как ее исправить?

1 Ответ

2 голосов
/ 13 января 2020

Я предполагаю, что ваш набор данных содержит строки, т.е. строки текста, книгу и т. Д. c. Следовательно, каждая из ваших строк затем разбивается на слова, которые затем превращаются в словарные векторы.

Возможно, ваши данные занимают много времени, если ваши строки очень длинные или вы пытаетесь обработать много строк за раз эта ячейка все еще ждет своего запуска. Пожалуйста, проверьте предыдущие ячейки, чтобы увидеть ту, которая работает в данный момент. Возможно, у вас может быть ошибка в одной из предыдущих ячеек. Также, если вы видите темный круг в правом верхнем углу браузера, это означает, что ячейка все еще выполняется. Чистый круг означает, что он простаивает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...