使用 nltk 对文本文档进行分类

Classifying text documents using nltk

我目前正在做一个项目,我正在接收电子邮件,使用电子邮件包剥离邮件正文,然后我想使用体育、政治、技术等标签对它们进行分类...

我已经成功地从我的电子邮件中删除了邮件正文,现在我正准备开始分类。我已经使用 move_reviews 语料库将文档分为正面和负面评论,完成了情感分析分类的经典示例。

我只是想知道如何将这种方法应用到我的项目中?我可以创建多个 类,例如体育、科技、政治、娱乐等吗?我在这里遇到了障碍,正在寻找正确方向的推动力。

如果这不是适合 SO 的问题,我会很乐意将其删除。

编辑:大家好,我看到这个post有点人气了,我最终成功完成了这个项目,这里是link 到项目 GitHub Repo 中的代码: https://github.com/codyreandeau/Email-Categorizer/blob/master/Email_Categorizer.py

要创建分类器,您需要一个包含您要查找的 类 的训练数据集。在您的情况下,您可能需要:

  1. 创建您自己的数据集
  2. 使用预先存在的数据集

brown corpus 是一篇开创性的文章,其中包含您正在谈论的许多类别。这可能是一个起点,可以帮助您使用 gensim 等包对您的电子邮件进行分类,以查找语义相似的文本。

对电子邮件进行分类后,您就可以训练一个系统来预测每封看不见的电子邮件的标签。

文本分类任务是一个监督机器学习问题。这意味着您需要有标记数据。当您处理 movie_review 问题时,您使用 +1/-1 标​​签来训练您的情绪分析系统。

回到你的问题:

  1. 如果您的数据有标签,请以同样的方式解决问题。我建议您使用 scikit-learn 库。你可以从这里得到一些启发:Scikit-Learn for Text Classification

  2. 如果没有标签,可以尝试无监督学习方法。如果您对自己有多少个类别(称为数字 K)有任何线索,可以尝试 KMeans 方法。这意味着,根据电子邮件的相似程度将电子邮件分组为 K 个类别。相似的电子邮件最终会出现在相似的桶中。然后用手检查这些簇并贴上标签。将新邮件分配给最相似的集群。如果您需要 KMeans 方面的帮助,请查看此快速食谱:Text Clustering Recipe

建议:获取电子邮件标签可能比您想象的要容易。例如,Gmail 可让您导出包含文件夹信息的电子邮件。如果您对电子邮件进行了分类,则可以利用这一点。