簡體   English   中英

使用Sci-Kit學習使用大型語料庫對文本進行分類

[英]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標記類別的索引名單。 datatarget的長度必須相同。

你可以看一下我之前寫的這個腳本來運行一個分類器: https//github.com/darkrho/yatiri/blob/master/scripts/run_classifier.py#L267

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM