[英]Using Sci-Kit learn to classify text with a large corpus
我的数据库中有大约1600篇文章,每篇文章都已经预先标记了以下类别之一:
Technology
Science
Business
World
Health
Entertainment
Sports
我正在尝试使用sci-kit学习构建一个分类新文章的分类器。 (我想我会将训练数据分成两半,用于训练和测试?)
我希望使用tf-idf,因为我没有停止词的列表(我可以使用NLTK仅提取形容词和名词,但我宁愿给scikit - 学习完整的文章)。
我已经阅读了关于scikit-learn的所有文档,但他们的例子涉及word-occurence和N-gram(很好),但他们从未指定如何将一段数据绑定到标签。
我已经尝试过查看他们的示例代码了,但是它太难以理解了。
有人可以帮我解决这个问题,还是指出我正确的方向?
谢谢。
我认为你在我开始将自己的数据提供给分类器时遇到了同样的问题。
您可以使用函数sklearn.datasets.load_files
,但为此,您需要创建此结构:
train
├── science
│ ├── 0001.txt
│ └── 0002.txt
└── technology
├── 0001.txt
└── 0002.txt
其中train
的子目录被命名为标签,而labels目录中的每个文件都是具有该对应标签的文章。 然后使用load_files
加载数据:
In [1]: from sklearn.datasets import load_files
In [2]: load_files('train')
Out[2]:
{'DESCR': None,
'data': ['iphone apple smartphone\n',
'linux windows ubuntu\n',
'biology astrophysics\n',
'math\n'],
'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
标记类别的索引名单。 data
和target
的长度必须相同。
你可以看一下我之前写的这个脚本来运行一个分类器: 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.