文章を分類①:日本語の形態素解析、分かち書き

カテゴリー別になっているサンプル文章を用意する。文章から、不要な部分(分類名やホームページアドレス)を削除する。日本語の形態素解析、分かち書き(単語分割)をしてみます。

さてneural_network_console_xxx.zip(xxxはバージョン名)を解凍し、適当なフォルダに配置すると

となります。フォルダMiniconda3があるので、PythonパッケージのAnaconda標準ライブラリが揃っている事がわかります。
このPythonを使って日本語の形態素解析、分かち書き(単語分割)ができるようにPython実行環境をつくります。
チュートリアル:Neural Network Consoleによる学習済みニューラルネットワークのNeural Network Librariesを用いた利用方法2種を参考にPATHを通します。

ユーザー環境変数にパスを追加します。
{Neural Network Console Installation Path} はNeural Network Consoleをインストールしたパス。
PYTHONPATH={Neural Network Console Installation Path}\libs\nnabla\python\src
PATH={Neural Network Console Installation Path}\libs\nnabla\python\src\nnabla;{Neural Network Console Installation Path}\libs\Miniconda3; {Neural Network Console Installation Path}\libs\Miniconda3\Scripts

コマンドプロンプトでpathと打って、パスを確認します。

$ path

パスが通ったら、コマンドプロンプトで

$ python

と打ってPythonが立ち上がる事を確認します。
Pythonの形態素解析エンジンJanomeを使えるようにします。日本語のテキストを形態素ごとに分割して品詞を判定したり分かち書き(単語に分割)したりすることができ、MeCabなどの外部エンジンは必要なくpipでインストール可能です。
コマンドプロンプトで

$ pip instrall janome

と打ちます。これでPythonの形態素解析エンジンJanomeがインストールできました。Python実行環境が出来ました。Pythonのソースコードはメモ帳で書き、文字コードUTF-8ファイル名拡張子.pyで保存です。試しにtest01.pyを保存します。
test01.py

from janome.tokenizer import Tokenizer
t = Tokenizer()
s = 'すもももももももものうち'
print(t.tokenize(s, wakati=True))

test01.pyのプロパティを開き、ファイルの種類、アプリの選択を{Neural Network Console Installation Path}\libs\Miniconda3\python.exeにします。
コマンドプロンプトで、保存したディレクトリに移動してtest01.pyを実行します。

日本語の分かち書きが出来ました。

ここでPythonについて書きます。
Pythonは、組み込み開発、WEBアプリケーション、デスクトップアプリケーションなどで利用される言語です。最近、人工知能や機械学習の分野で使われるケースが多くなりました。
言語としての特徴は文法が単純で、綺麗なソースコードが書けることです。BASIC言語に似ていて、しかも読みやすいソースになります。読みやすいのは、インデント(行頭の空白文字の数)が重要な意味を持っているからです。メモ帳でソースコードを書く時には、インデントに充分注意しなければなりません。
Anaconda はpythonのディストリビューションの一つで、主要ライブラリをオールインワンでインストールできます。その最小限の主要ライブラリだけのものがMinicondaです。パイソンとアナコンダどちらも強そうです。ゲームもつくれます。
Pythonでゲーム作りますが何か?このサイトを見ればPythonの敷居が低くなるでしょう。

さて本題に戻って簡単な分かち書きのテストです。
どこか適当なところに、メモ帳で下記を入力してtest02.pyとして文字コードUTF-8で保存して下さい。
test02.py

import os
import glob
from janome.tokenizer import Tokenizer

t = Tokenizer()
path = "./test"
file_list = glob.glob(path + '/' + '*.txt')

for filename in file_list:
  with open(filename,encoding="Shift-JIS",errors="ignore") as input:
    textorg = input.read()
    textwakati = t.tokenize(textorg, wakati=True)
    print(textwakati)

続けて、そこにフォルダ’test’をつくってフォルダ’test’の中に下記のテキストを保存します。
1.txt

すもももももももものうち

2.txt

自然言語処理による日本国憲法の形態素解析

3.txt

PythonとPYTHONとパイソンとパイソン

コマンドプロンプトでtest02.pyのフォルダに移動してtest02.pyを実行。


分かち書きが出来ています。これを一つづつCSVファイルに保存出来るようにします。
test03.py

import os
import glob
from janome.tokenizer import Tokenizer

t = Tokenizer(wakati=True)
path = "./test"
file_list = glob.glob(path + '/' + '*.txt')

for filename in file_list:
  with open(filename,encoding="Shift-JIS",mode='r',errors="ignore") as input:
    textorg = input.read()
  with open(filename + '.csv',encoding="UTF-8", mode='w') as fp:
     for token in t.tokenize(textorg):
        fp.write(str(token))
        fp.write("\n")

test03.pyを実行した結果です。

次に、カテゴリー別になっているサンプル文章を用意します。
株式会社ロンウイットDOWNLOADよりldcc-20140209.tar.gzをダウンロードして、この中のフォルダmovie-enter、フォルダsports-watchのデータを学習と推論に使わせて頂きます。
今度は、フォルダ’test’の中にフォルダ’movie-enter’のファイルをコピーしてtest04.pyを実行。あとフォルダ内の.txtファイルを削除してフォルダ名を’movie-enter’に変更。次にフォルダ’test’を新たにつくり、フォルダ’sports-watch’のファイルをコピーしてtest04.pyを実行。あとフォルダ内の.txtファイルを削除してフォルダ名を’sports-watch’に変更します。
test04.py

import os
import re
import glob
from janome.tokenizer import Tokenizer

t = Tokenizer(wakati=True)
path = "./test"
file_list = glob.glob(path + '/' + '*.txt')

for filename in file_list:
  with open(filename,encoding="UTF-8",mode='r',errors="ignore") as input:
    textorg = input.read()
    data2 = re.sub(r'[\s ]',"",textorg)
    data3 = re.sub(r'http.+0900',"",data2)
    data4 = re.sub('【[^】]*】',"",data3)

  with open(filename + '.csv',encoding="UTF-8", mode='w',errors="ignore") as fp:
     for token in t.tokenize(data4):
        fp.write(str(token) + ',')

test04.pyを実行した結果です。


しかし残念ながら、分かち書きデータはそのままではNeural Network Consoleに使う事は出来ません。生まれたての赤ちゃんが物の形がわかるのに、言葉を理解できないのと一緒でNeural Network Consoleがわかるようにしなければなりません。
たぶん、単語の意味や文法を捉えるために単語をベクトル表現化する必要があるのでしょう。
Word2Vec:発明した本人も驚く単語ベクトルの驚異的な力
そこでTensorFlowで単語ベクトルを作成するword2vecを試してみる事にします。
TensorFlowは、Googleが開発しオープンソースで公開している機械学習に用いるためのソフトウェアライブラリだそうです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です