Article classification using gensim

gamzatti
Vote 0 Votes

機械学習


http://qiita.com/yasunori/items/31a23eb259482e4824e2
https://github.com/yasunori/Random-Forest-Example


http://qiita.com/katsuyuki/items/65f79d44f5e9a0397d31


- 必要なソフトのインストール- ------

Mecab本体
wget -O mecab-0.996.tar.gz
"https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7cENtOXlicTFaRUE"
cd mecab-0.996/
./configure --with-charset=utf8 --enable-utf8-only
make
make install

辞書
wget -O mecab-ipadic-2.7.0-20070801.tar.gz 
"https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM"
cd mecab-ipadic-2.7.0-20070801
./configure --with-charset=utf8
make
make install

Mecab python API
pip install mecab-python3

gensim
pip install --upgrade gensim

共有ライブラリにパスが通っていないので、通す。
echo /usr/local/lib > /etc/ld.so.conf.d/custom.conf

これで読み込む
ldconfig

http://www.rondhuit.com/download.html#ldcc

から記事ファイルを取ってきて解凍する


- 辞書の読み込みと学習- ------

# -*- coding: utf-8 -*-
from sklearn.ensemble import RandomForestClassifier
from sklearn.cross_validation import train_test_split
from sklearn.grid_search import GridSearchCV
from sklearn.metrics import classification_report
import corpus
from gensim import corpora

def main():
    # 辞書の読み込み
    dictionary = corpora.Dictionary.load_from_text('livedoordic.txt')
    #dictionary = corpus.get_dictionary(create_flg=False)
    # 記事の読み込み
    contents = corpus.get_contents()

辞書ファイルが重要。今回は
livedoordic.txt
というファイル。
これを読み込みできている前提にする。

   # 特徴抽出
    data_train = []
    label_train = []
    for file_name, content in contents.items():
        data_train.append(corpus.get_vector(dictionary, content))
        label_train.append(corpus.get_class_id(file_name))

   # 分類器
    estimator = RandomForestClassifier()

   # 学習
    estimator.fit(data_train, label_train)

   # 学習したデータを予測にかけてみる(ズルなので正答率高くないとおかしい)
    #print("==== 学習データと予測データが一緒の場合")
    #print(estimator.score(data_train, label_train))

   # 学習データと試験データに分けてみる
    data_train_s, data_test_s, label_train_s, label_test_s = train_test_split(data_train, label_train, test_size=0.4)

   # 分類器をもう一度定義
    estimator = RandomForestClassifier()

   # 学習
    estimator.fit(data_train_s, label_train_s)
    print("==== 学習データと予測データが違う場合")
    print(estimator2.score(data_test_s, label_test_s))



- 分類させてみる- ------



# -*- coding: utf-8 -*-
import MeCab
mecab = MeCab.Tagger('mecabrc')


def tokenize(text):
    '''
    とりあえず形態素解析して名詞だけ取り出す感じにしてる
    '''
    node = mecab.parseToNode(text)
    while node:
        if node.feature.split(',')[0] == '名詞':
            yield node.surface.lower()
        node = node.next


def get_words(contents):
    '''
    記事群のdictについて、形態素解析してリストにして返す
    '''
    ret = []
    for k, content in contents.items():
        ret.append(get_words_main(content))
    return ret


def get_words_main(content):
    '''
    一つの記事を形態素解析して返す
    '''
    return [token for token in tokenize(content)]


# 2記事の一部だけ取り出しました
# 1つめがITライフハック、2つめが独女通信の記事です。
if __name__ == '__main__':
        words = get_words({'movie-enter-6149578.txt': '緻密なアニメーションによって悪目立ちする、主人公の浅さと短絡的な展開。『秒速5センチメートル』や『言の葉の庭』など、美しいアニメ作品で知られる新海誠監督の最新作『君の名は。』が、国内の興行収入で100億円を突破するという快挙を成し遂げた。メディアや大衆から絶賛を受け続けている本作は、確かに魅力的な作品である。しかし、筆者にはどうも腑に落ちない点が散見された。今回はネタバレにならない範囲で、本作が孕む問題に迫ってみる。...........途中省略...............これまでと同様、新海監督は、実に美しいアニメーションを紡いだ。キャラクターから細やかな背景に至るまで、その美しさは日本アニメ史上屈指のレベルと言えるだろう。これは否定しようがない。興行収入100億円超えも、実に立派である。しかし、主人公のキャラ付けの浅さと、結末に至るまでの描写不足という作品の瑕疵は、看過されるべきではない。新海監督は、もっと上のレベルに行けるはずである。本作が、彼のキャリアにおける最高傑作にならないことを期待したい。'})
    print(words)


これでwordsオブジェクトを作成できた。

from gensim import corpora, matutils
# dictionary は既に作成済みとして......
tmp = dictionary.doc2bow(words[0])
dense = list(matutils.corpus2dense([tmp], num_terms=len(dictionary)).T[0])
print(dense)

で、頻度のリストが作成される。


label_predict = estimator.predict(dense)
print(label_predict)
Qiita
scikit-learnとgensimでニュース記事を分類する - Qiita
こんにちは、初心者です。 適当なニュース記事があったとして、ニュースのカテゴリを推測するみたいな、よくあるやつをやってみました。Python3.3を使いました。 ## 何をやるの? データセットはlivedoorニュースコーパス...
 


https://github.com/yasunori/Random-Forest-Example

2 Comments

| Leave a comment

How to install tensorflow

https://www.tensorflow.org/versions/r0.10/get_started/os_setup

- Install pip
easy_install pip

- Install Anaconda
https://www.continuum.io/downloads
Run script.
Anaconda2-4.3.0-Linux-x86_64.sh

install dir is:
/root/anaconda2

- Install tensorflow

pip install tensorflow

- Test
"Run TensorFlow from the Command Line"

During tagger.parse(), I got the following error:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbb in position 2: invalid start byte

It works by following methods:

- reconfigure Mecab with option
mecab-0.996/
./configure --with-charset=utf8 --enable-utf8-only

- reconfigure dictionery with "--with-charset=utf8"
mecab-ipadic-2.7.0-20070801
./configure --with-charset=utf8

c.f.)
http://m0t0k1ch1st0ry.com/blog/2016/07/30/nlp/

Leave a comment

About this Entry

This page contains a single entry by gamzatti published on February 24, 2017 12:06 AM.

How to include php into shtml using SSI was the previous entry in this blog.

Immediately-invoked function expression is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.