首页 > 解决方案 > Python - 使用 Tika 和 Gensim 提取文本并汇总目录中的多种文件类型

问题描述

我的团队的任务是查看大约 3,800 份文件,看看哪些文件对我们更新的公司品牌指南重新命名有用。这将花费我们很长时间,所以我想我至少会尝试用 Gensim 总结文档,提取一些关键字,并将文件名、摘要和关键字写入 CSV。我正在使用 Python 3 内核的最新 Jupyter Notebook 中执行此操作。

我是 python 新手,但我过去通过遍历目录来完成此操作并且没有遇到问题。

这次大约 2 个小时后,内存利用率开始攀升至 12GB 左右,并在此停留大约一个小时,然后恢复到 100-300MB 之间的正常波动。然后一两个小时后,内存跳回并停留在那里,似乎不再处理任何文件......我让它运行了 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 INFO:gensim.corpora.dictionary:adding document #0 to Dictionary(0 unique tokens: []) INFO:gensim.corpora .dictionary: 将文档#10000 添加到字典(2545 个唯一标记:['pictur', 'slide', 'titl', 'automot', 'manufactur']...) INFO:gensim.corpora.dictionary:adding document # 20000 到字典(3386 个唯一标记:['pictur','slide','titl','automot','manufactur']...)信息:gensim.corpora.dictionary:将文档#30000 添加到字典(3963 唯一令牌:['pictur','slide','titl','automot','manufactur']...) INFO:gensim.corpora.dictionary:将文档#40000 添加到字典(4335 个唯一令牌:['pictur', 'slide', 'titl', 'automot', 'manufactur']...) INFO:gensim.corpora.dictionary:adding document #50000 to Dictionary(4565 unique tokens: ['pictur', 'slide', '标题','汽车','制造商'] ...)信息:gensim.corpora.dictionary:将文档#60000添加到字典(4736个唯一标记:['图片','幻灯片','标题','汽车' , 'manufactur']...) INFO:gensim.corpora.dictionary:built Dictionary(4923 unique tokens: ['pictur', 'slide', 'titl', 'automot', 'manufactur']...) 66286 个文档(共 1009200 个语料库位置)slide', 'titl', 'automot', 'manufactur']...) INFO:gensim.corpora.dictionary:adding document #60000 to Dictionary(4736 unique tokens: ['pictur', 'slide', 'titl' , 'automot', 'manufactur']...) INFO:gensim.corpora.dictionary:built Dictionary(4923 个唯一标记:['pictur', 'slide', 'titl', 'automot', 'manufactur']。 ..) 来自 66286 个文档(总共 1009200 个语料库位置)slide', 'titl', 'automot', 'manufactur']...) INFO:gensim.corpora.dictionary:adding document #60000 to Dictionary(4736 unique tokens: ['pictur', 'slide', 'titl' , 'automot', 'manufactur']...) INFO:gensim.corpora.dictionary:built Dictionary(4923 个唯一标记:['pictur', 'slide', 'titl', 'automot', 'manufactur']。 ..) 来自 66286 个文档(总共 1009200 个语料库位置)automot', 'manufactur']...) 来自 66286 个文档(总共 1009200 个语料库位置)automot', 'manufactur']...) 来自 66286 个文档(总共 1009200 个语料库位置)

这可能是内存使用量增加的原因吗?当它看起来只为其他文件创建一个字典时,为什么要为这个文件创建多个字典?

标签: python-3.xjupyter-notebookgensimapache-tika

解决方案


推荐阅读