使用Sci-Kit学习对具有大型语料库的文本进行分类



我的数据库中有大约 1600 篇文章,每篇文章都已预先标记为以下类别之一:

Technology
Science
Business
World
Health
Entertainment
Sports

我正在尝试使用 sci-kit learn 来构建一个分类器来对新文章进行分类。(我想我会将我的训练数据分成两半,用于训练和测试?

我希望使用 tf-idf,因为我没有停用词列表(不过,我可以使用 NLTK 只提取形容词和名词,但我宁愿给 scikit-learn 整篇文章)。

我已经阅读了所有关于scikit-learn的文档,但是它们的示例涉及单词出现和N-gram(这很好),但它们从未指定如何将一段数据绑定到标签。

我试过查看他们的示例代码,但它太混乱了,无法遵循。

有人可以帮助我解决这个问题,或者为我指出正确的方向吗?

谢谢。

我想你遇到了与我开始将自己的数据提供给分类器时相同的问题。

您可以使用函数 sklearn.datasets.load_files ,但要做到这一点,您需要创建以下结构:

train
├── science
│   ├── 0001.txt
│   └── 0002.txt
└── technology
    ├── 0001.txt
    └── 0002.txt

其中train的子目录被命名为标签,标签目录中的每个文件都是具有相应标签的文章。然后使用 load_files 加载数据:

In [1]: from sklearn.datasets import load_files
In [2]: load_files('train')
Out[2]: 
{'DESCR': None,
 'data': ['iphone apple smartphonen',
  'linux windows ubuntun',
  'biology astrophysicsn',
  'mathn'],
 'filenames': array(['train/technology/0001.txt', 'train/technology/0002.txt',
       'train/science/0002.txt', 'train/science/0001.txt'], 
      dtype='|S25'),
 'target': array([1, 1, 0, 0]),
 'target_names': ['science', 'technology']}

返回的对象是一个简单的数据包装器sklearn.datasets.base.Bunch。这是开始使用分类器的简单方法,但是当您的数据较大且频繁更改时,您可能希望停止使用文件并使用数据库来存储标记的文档,并且可能具有比纯文本更多的结构。基本上,您需要生成类别(或target_names)列表,例如['science', 'technology', ...],并为data列表中的每个文档分配target值作为target_names列表中标记类别的索引。datatarget的长度必须相同。

你可以看看我之前写的这个脚本来运行分类器:https://github.com/darkrho/yatiri/blob/master/scripts/run_classifier.py#L267

也许从这里的例子开始:http://scikit-learn.org/dev/auto_examples/document_classification_20newsgroups.html#example-document-classification-20newsgroups-py

一个更高级的例子是:http://scikit-learn.org/dev/auto_examples/grid_search_text_feature_extraction.html#example-grid-search-text-feature-extraction-py

示例

库中还有更多文本示例:http://scikit-learn.org/dev/auto_examples/index.html

相关内容

  • 没有找到相关文章

最新更新