Сумма Python разреженной матрицы работает медленно

У меня есть следующий код, который очень хорошо работает для получения количества нграмм различной длины из фрагмента текста.

# -*- coding: utf-8 -*-
from nltk.tokenize import sent_tokenize
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from collections import deque

sentences = deque()
with open("E:\\Downloads\\WikipediaAF\\af_out.txt", encoding="utf8") as f_in:
    for line in f_in:
        sentences.extend(sent_tokenize(line))
df = pd.DataFrame({'description' : sentences})
word_vectorizer = CountVectorizer(ngram_range=(1,2), analyzer='word')
sparse_matrix = word_vectorizer.fit_transform(df['description'])
frequencies = sum(sparse_matrix).toarray()[0]
ngram_freq = pd.DataFrame(frequencies, index=word_vectorizer.get_feature_names(), columns=['frequency'])
ngram_freq.frequency.sort_values(ascending=False).to_csv("E:\\Downloads\\WikipediaAF\\af_ngram2.txt", sep=',', mode='w', encoding = "utf-8")

Однако линия

frequencies = sum(sparse_matrix).toarray()[0]

очень медленно (несколько дней для расчета биграмм). Я ищу способ ускорить эту линию. Я открыт для использования нескольких ядер, если это возможно. Или кто-нибудь знает более быстрый путь? Или есть лучший способ сделать все это?

0 ответов

Другие вопросы по тегам