文本挖掘与主题建模工具包

tmtoolkit的Python项目详细描述


tmtoolkit–用于python的文本挖掘和主题建模工具包

马克斯·康拉德马克斯·康拉德@wzb.eu

tmtoolkit是一组使用python进行文本挖掘和主题建模的工具。它包含文本预处理功能,如柠檬化、词干处理或词性标记,尤其是英语和德语文本。预处理通过使用计算机上所有可用的处理器并行完成。主题建模特性包括主题模型评估度量,允许并行计算具有不同参数的模型并对其进行比较(例如,为了找到最佳主题数和其他参数)。可以使用lda实现为不同的copora和/或参数集并行生成主题模型,这些实现可以来自lda,scikit学习gensim

功能

文本预处理

文本预处理构建在nltk剪辑模式之上。常见功能包括:

  • 标记化
  • 词性标注(针对德语和英语进行优化)
  • 元素化(针对德语和英语进行优化)
  • 堵塞
  • 清洁代币
  • 筛选标记
  • 生成n个程序
  • 生成文档项矩阵

预处理通过使用计算机上所有可用的处理器并行完成,与单处理器上的顺序处理相比,大大提高了处理速度。

主题建模

可以使用lda实现为不同的copora和/或参数集并行生成主题模型,这些实现可以来自lda,scikit-learngensim。可以使用几种实现的度量标准对它们进行评估和比较(例如,为了找到最佳的主题数量):

其他功能包括:

安装

该包可在pypi上获得,并可通过python包管理器pip安装:

# recommended installation
pip install -U tmtoolkit[excel_export,plotting,wordclouds]

# minimal installation:
pip install -U tmtoolkit

这个包大约13MB大,因为它包含一些附加的德语模型数据,用于POS标记。

升级注意事项:如果从旧版本升级到0.6.0或更高版本,则在重新安装(使用上述命令之一)之前,需要先卸载tmtoolkit(运行pip uninstall tmtoolkit)。

可选套餐

可以通过pip安装的pypi包被写入斜体

  • 为了改进德语文本的元素化:模式
  • 用于绘图/可视化:matplotlib
  • 对于word cloud函数:wordcloud枕头
  • 对于Excel导出:openpyxl
  • 对于主题建模,lda实现之一:ldascikit learngensim
  • 对于其他主题模型一致性度量:gensim

对于lda评估指标griffiths_2004保留文档有必要为多精度算法安装gmpy2。这反过来要求为gmp、mpfr和mpc安装一些c头库。在debian/ubuntu系统上,这是通过:

sudo apt install libgmp-dev libmpfr-dev libmpc-dev

之后,可以通过pip安装gmpy2。

因此,对于全套功能,您应该运行以下命令(如果您已经安装了上述要求,则可以选择添加gmpy2):

pip install -U Pattern matplotlib wordcloud Pillow openpyxl lda scikit-learn gensim

要求

tmtoolkit适用于python 3.5或更高版本。

通过pip自动安装需求。对于某些用例,还可以通过pip安装其他包(请参见可选包)。

Windows用户的特别注意事项:tmtoolkit已经在Windows上进行了测试,并且运行良好(我建议在那里使用针对Python的anaconda发行版)。但是,您需要将使用多处理的所有代码(即对tmpredoc和并行主题建模函数的所有调用)包装在if\u name=='\u main'这样的块中:

defmain():# code with multi-processing comes here# ...if__name__=='__main__':main()

请参见示例目录。

必需的软件包

  • 努比
  • scipy
  • NLTK
  • 熊猫
  • 扑热息痛

请注意:如果您尚未安装NLTK中的几个语料库和语言模型,则需要安装这些模型。运行python-c"import nltk;nltk.download()",这将打开一个图形化的下载程序界面。您至少需要以下数据包:

  • 平均感知器标记器
  • 朋克
  • 停止字
  • wordnet

文档

许多方法的文档目前仍然缺少,将来还会添加。现在,您应该看看下面和examples目录中的示例。

示例

可以在ipython会话中直接运行的一些示例:

预处理

我们将处理小的,自定义的玩具语料库与德语文本。它将被标记化、清理并转换为文档术语矩阵。如果您使用的是Windows,则需要用一个if\u name\uuu='\uu main\uu'块将其包装起来。见"SP"以上"Windows用户特别注意事项"。

fromtmtoolkit.preprocessimportTMPreproc# a small toy corpus in German, here directly defined as a dict# to load "real" (text) files use the methods in tmtoolkit.corpuscorpus={'doc1':'Ein einfaches Beispiel in einfachem Deutsch.','doc2':'Es enthält nur drei sehr einfache Dokumente.','doc3':'Die Dokumente sind sehr kurz.',}# initializepreproc=TMPreproc(corpus,language='german')# run the preprocessing pipeline: tokenize, POS tag, lemmatize, transform to# lowercase and then clean the tokens (i.e. remove stopwords)preproc.tokenize().pos_tag().lemmatize().tokens_to_lowercase().clean_tokens()print(preproc.tokens)# this will output: #  {'doc1': ('einfach', 'beispiel', 'einfach', 'deutsch'),#   'doc2': ('enthalten', 'drei', 'einfach', 'dokument'),#   'doc3': ('dokument', 'kurz')}print(preproc.tokens_with_pos_tags)# this will output: # {'doc1': [('einfach', 'ADJA'),#   ('beispiel', 'NN'),#   ('einfach', 'ADJA'),#   ('deutsch', 'NN')],# 'doc2': [('enthalten', 'VVFIN'),#   ('drei', 'CARD'),#   ('einfach', 'ADJA'),#   ('dokument', 'NN')],#  'doc3': [('dokument', 'NN'), ('kurz', 'ADJD')]}# generate sparse DTM and print it as a data tabledoc_labels,vocab,dtm=preproc.get_dtm()importpandasaspdprint(pd.DataFrame(dtm.todense(),columns=vocab,index=doc_labels))

主题建模

我们将使用lda包进行主题建模。生成并比较了用于不同主题数和alpha值的几个模型。选择最好的并打印结果。

fromtmtoolkit.topicmodimporttm_ldaimportlda# for the Reuters datasetimportmatplotlib.pyplotaspltplt.style.use('ggplot')doc_labels=lda.datasets.load_reuters_titles()vocab=lda.datasets.load_reuters_vocab()dtm=lda.datasets.load_reuters()# evaluate topic models with different parametersconst_params=dict(n_iter=100,random_state=1)# low number of iter. just for showing how it works herevarying_params=[dict(n_topics=k,alpha=1.0/k)forkinrange(10,251,10)]# this will evaluate 25 models (with n_topics = 10, 20, .. 250) in parallelmodels=tm_lda.evaluate_topic_models(dtm,varying_params,const_params,return_models=True)# plot the results# note that since we used a low number of iterations, the plot looks quite "unstable"# for the given metrics.fromtmtoolkit.topicmod.visualizeimportplot_eval_resultsfromtmtoolkit.topicmod.evaluateimportresults_by_parameterresults_by_n_topics=results_by_parameter(models,'n_topics')plot_eval_results(results_by_n_topics)plt.show()# the peak seems to be around n_topics == 140fromtmtoolkit.topicmod.model_ioimportprint_ldamodel_topic_words,print_ldamodel_doc_topicsbest_model=dict(results_by_n_topics)[140]['model']print_ldamodel_topic_words(best_model.topic_word_,vocab)print_ldamodel_doc_topics(best_model.doc_topic_,doc_labels)

更多示例可在examples目录中找到。

示例数据

示例/数据中提供的示例来自:

许可证

在apache许可证2.0下获得许可的代码。请参见许可证文件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
反射Java getMethod()会导致NoSuchMethodException错误   编译器构造Java编译时错误:解析时到达文件末尾   java我无法使用Spring Boot从应用程序引擎中的服务连接到Google数据存储   java单一注销配置文件Idp注销问题   regex如何在java中编写和使用正则表达式   java Android:单击标签打开电子邮件应用程序   java如何确保函数执行函数的整个检查?   java如何将字母数字电话号码转换为数字   listview更改中项目内部的java ImageView   java将空对象转换为整数   对等端重置java Google Drive SDk连接   在java程序中测试未授权的隐藏测试(代码战)