Gensim Summarizer выдает MemoryError, есть решение? - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь создать сводку большого текстового файла с помощью Gensim Summarizer.Я получаю ошибку памяти.Столкнулся с этой проблемой с тех пор, любая помощь будет очень признательна.Не стесняйтесь спрашивать более подробную информацию.

from gensim.summarization.summarizer import summarize

file_read =open("xxxxx.txt",'r')
Content= file_read.read()


def Summary_gen(content):
    print(len(Content))
    summary_r=summarize(Content,ratio=0.02)
    print(summary_r)


Summary_gen(Content)

Длина документа:

365042

Сообщение об ошибке:

    ---------------------------------------------------------------------------
MemoryError                               Traceback (most recent call last)
<ipython-input-6-a91bd71076d1> in <module>()
     10 
     11 
---> 12 Summary_gen(Content)

<ipython-input-6-a91bd71076d1> in Summary_gen(content)
      6 def Summary_gen(content):
      7     print(len(Content))
----> 8     summary_r=summarize(Content,ratio=0.02)
      9     print(summary_r)
     10 

c:\python3.6\lib\site-packages\gensim\summarization\summarizer.py in summarize(text, ratio, word_count, split)
    428     corpus = _build_corpus(sentences)
    429 
--> 430     most_important_docs = summarize_corpus(corpus, ratio=ratio if word_count is None else 1)
    431 
    432     # If couldn't get important docs, the algorithm ends.

c:\python3.6\lib\site-packages\gensim\summarization\summarizer.py in summarize_corpus(corpus, ratio)
    367         return []
    368 
--> 369     pagerank_scores = _pagerank(graph)
    370 
    371     hashable_corpus.sort(key=lambda doc: pagerank_scores.get(doc, 0), reverse=True)

c:\python3.6\lib\site-packages\gensim\summarization\pagerank_weighted.py in pagerank_weighted(graph, damping)
     57 
     58     """
---> 59     adjacency_matrix = build_adjacency_matrix(graph)
     60     probability_matrix = build_probability_matrix(graph)
     61 

c:\python3.6\lib\site-packages\gensim\summarization\pagerank_weighted.py in build_adjacency_matrix(graph)
     92         neighbors_sum = sum(graph.edge_weight((current_node, neighbor)) for neighbor in graph.neighbors(current_node))
     93         for j in xrange(length):
---> 94             edge_weight = float(graph.edge_weight((current_node, nodes[j])))
     95             if i != j and edge_weight != 0.0:
     96                 row.append(i)

c:\python3.6\lib\site-packages\gensim\summarization\graph.py in edge_weight(self, edge)
    255 
    256         """
--> 257         return self.get_edge_properties(edge).setdefault(self.WEIGHT_ATTRIBUTE_NAME, self.DEFAULT_WEIGHT)
    258 
    259     def neighbors(self, node):

c:\python3.6\lib\site-packages\gensim\summarization\graph.py in get_edge_properties(self, edge)
    404 
    405         """
--> 406         return self.edge_properties.setdefault(edge, {})
    407 
    408     def add_edge_attributes(self, edge, attrs):

MemoryError: 

Я попытался найтииз-за этой ошибки в интернете, но не смог найти работоспособного решения этой проблемы.

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Вы пытались использовать аргумент word_count вместо ratio?

Если вышеприведенное все еще не решает проблему, то это из-за ограничений реализации gensim.Единственный способ использовать gensim, если у вас все еще есть ошибки OOM - это разделить документы.Это также ускорит ваше решение (и если документ действительно большой, в любом случае это не должно быть проблемой).

В чем проблема с summarize:

gensim 's summarizer по умолчанию использует TextRank, алгоритм, который использует PageRank.В gensim это, к сожалению, реализовано с использованием списка Python узлов графа PageRank , поэтому он может потерпеть неудачу, если ваш график слишком большой.

BTW - это длина документа, измеренная словами, илисимволы?

0 голосов
/ 29 мая 2018

Из журналов похоже, что код строит матрицу смежности

---> 59 adjacency_matrix = build_adjacency_matrix(graph)

Это, вероятно, пытается создать огромную матрицу смежности с вашими 365042 документами, которые не могут поместитьсявашей памяти (т. е. ОЗУ).

Вы можете попробовать:

  1. Уменьшить размер документа до меньшего количества файлов (возможно, начиная с 10000) и проверить, работает ли он
  2. Попробуйте запустить его в системе с большим объемом оперативной памяти
...