Python - Извлечение текста и суммирование нескольких типов файлов в каталоге с Tika и Gensim - PullRequest
0 голосов
/ 24 мая 2018

Моя команда получила задание просмотреть ~ 3800 документов, чтобы узнать, какие из них полезно переименовать в соответствии с нашими обновленными рекомендациями по брендингу компании.Это займет у нас целую вечность, поэтому я решил, что по крайней мере попытаюсь обобщить документы с помощью Gensim, извлечь некоторые ключевые слова и записать имя файла, сводку и ключевые слова в CSV.Я делаю это в последней версии Jupyter Notebook с ядром Python 3.

Я новичок в Python, но я делал это в прошлом, просматривая каталог, и у меня не было проблем.

На этот раз примерно через 2 часа или около того использование памяти начинает уменьшаться примерно до 12 ГБ и остается там около часа, а затем возвращается к нормальным колебаниям в диапазоне 100-300 МБ.Затем, через час или два, память снова поднимается и остается там, и, похоже, больше не обрабатывает файлы ... Я оставил ее включенной на 24 часа.Будучи новичком в Python, я не знаком с тем, как отлаживать это, и я не уверен, что это из-за моего цикла, какого-то типа проблем с кодировкой файлов, или просто поврежденного файла или двух вообще.

Любая помощь будет чрезвычайно полезна.Код ниже.

#Start java tika server before running

import os, sys, csv
import tika
from tika import parser
import warnings
warnings.filterwarnings(action='ignore', category=UserWarning, module='gensim')
from gensim.summarization import summarize, keywords

# Set path to directory where files are
path = 'C:/Users/john/Desktop/WWS-Local' #directory has 3,800 files of multiple types
os.chdir(path)

exFileTypes = ('.zip', '.jpg', '.mp4', '.msg', '.oft', '.txt', '.png') #Don't care about these file types
with open('C:/Users/john/Desktop/winProcessedFiles.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerow(['File Name', 'Summary', 'Keywords'])
    for file in os.listdir('.'):
        if not file.endswith(exFileTypes):
            try:
                parsed = parser.from_file(file)
                text = parsed["content"]
                text = text.strip('\n')
                text = text.encode('ascii','ignore').decode('ascii')
                summary = summarize(text, word_count=200)
                kw = keywords(text, words=15)
                writer.writerow([file, summary, kw])
            except Exception as e:
                print(file, e)
                writer.writerow([file, e, 'ERROR'])
            finally:
                pass

Я начал делать базовые записи в журналы и время от времени просматривал мой файл журнала.Использование памяти увеличилось, и кажется, что обработка документа занимает очень много времени.

Я заметил это в журнале:

INFO: root: 102381-manufacturing-automotive-Competitive-assessment-english-letter.pptx проанализирован в 10.553594589233398s ИНФОРМАЦИЯ: gensim.corpora.dictionary: добавить документ № 0 в словарь (0 уникальных токенов: []) ИНФО: gensim.corpora.dictionary: добавить документ № 10000 в словарь (2545уникальные токены: ['pictur', 'slide', 'titl', 'automot', 'Manufactur'] ...) ИНФОРМАЦИЯ: gensim.corpora.dictionary: добавление документа № 20000 в словарь (3386 уникальных токенов: ['pictur',' slide ',' titl ',' automot ',' Manufactureur '] ...) ИНФОРМАЦИЯ: gensim.corpora.dictionary: добавление документа # 30000 в словарь (3963 уникальных токена: [' pictur ',' slide ','titl', 'automot', 'Manufactureur'] ...) ИНФОРМАЦИЯ: gensim.corpora.dictionary: добавление документа # 40000 в словарь (4335 уникальных токенов: ['pictur', 'slide', 'titl', 'automot',' Manufactur '] ...) ИНФОРМАЦИЯ: gensim.corpora.dictionary: добавление документа DICT № 50000ionary (4565 уникальных токенов: ['pictur', 'slide', 'titl', 'automot', 'Manufactur'] ...) ИНФОРМАЦИЯ: gensim.corpora.dictionary: добавление документа № 60000 в словарь (4736 уникальных токенов:['pictur', 'slide', 'titl', 'automot', 'Manufactureur'] ...) ИНФОРМАЦИЯ: gensim.corpora.dictionary: встроенный словарь (4923 уникальных токена: ['pictur', 'slide', 'titl ',' automot ',' Manufactureur '] ...) из 66286 документов (всего 1009200 корпусных позиций)

Может ли это быть причиной увеличения использования памяти?И почему он создает несколько словарей для этого файла, когда он выглядит так, как будто он создает только один словарь для других файлов?

...