[英]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.