【AWS】【機械学習】Deep Learning AMI(Ubuntu)で【形態素解析】を試した(Janome&mecab-ipadic-neologd で解析)【Part.4】

今回も引き続き機械学習です。

Ubuntu Janome Mecab-ipadic-Neologd を使って形態素解析を試しました。

今回はいわゆる「文学」で形態素解析を試します。

 

 

【AWS】【機械学習】Deep Learning AMI(Ubuntu)で【形態素解析】を試した【Part.1】

 

【AWS】【機械学習】Deep Learning AMI(Ubuntu)で【形態素解析】を試した【Part.2】

 

【AWS】【機械学習】Deep Learning AMI(Ubuntu)で【形態素解析】を試した(Janomeのインストール)【Part.3】

 

【AWS】【機械学習】Deep Learning AMI(Ubuntu)で【形態素解析】を試した(Janome&mecab-ipadic-neologd で解析)【Part.4】

 

 

 

 

補足情報 t.micro だとプログラムが起動できない(killedで終了する)件

AWS の EC2 インスタンスは様々なインスタンスタイプを選択することができます。

「t2.nano」「t2.micro」「t2.small」「t2.medium」など。

「t2.micro」は「無料利用枠の対象」ですが、vCPU が1個、メモリが「1GiB」です。

 

 

 

しかし機械学習で利用する「Janome」は「t2.micro」だとスペックが足りない(メモリが足りない)ため、プログラムを実行しても「killed」で異常終了してしまいます。

 

 

【プログラム実行例】

ubuntu@AWS_TEST: ~/dl] python3.6 ma-janome.py

killed ← プログラムが異常終了してしまいます。

 

そのため、「t2.medium」クラスが必要になります。つまり従量課金されます。

しかし必要最低限しか AWS に利用料金を払いたくない場合は、以下の方法で料金を抑えてみてください。

おそらく起動しっぱなしにするより、7割くらいは料金を削減できると思います。

 

【AWS】【Python】Lambda で RDS インスタンスを起動・停止するプログラム&スケジュール化手順【2017年最新版】

 

 

Python 3.6 から Janome で形態素解析プログラムを実行する

Python 3.6 から Janome で形態素解析をするプログラムです。

 

【プログラム】

ubuntu@AWS_TEST: ~/dl] cat ma-janome.py
# -*- coding: utf-8 -*-

from janome.tokenizer import Tokenizer
t = Tokenizer(mmap=True)
malist = t.tokenize("渋谷ヒカリエは、東京都渋谷区の渋谷駅東口に位置する東急文化会館跡地に建設された複合 商業施設 。 東急百貨店や飲食店、事務所のほか、ミュージカル劇場「東急シアターオーブ」などが入居している。")
for n in malist:
    print(n)

ubuntu@AWS_TEST: ~/dl]

 

 

【プログラム実行】

ubuntu@AWS_TEST: ~/dl] python3.6 ma-janome.py
渋谷ヒカリエ    名詞,固有名詞,一般,*,*,*,渋谷ヒカリエ,シブヤヒカリエ,シブヤヒカリエ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
、      記号,読点,*,*,*,*,、,、,、
東京都渋谷区    名詞,固有名詞,地域,一般,*,*,東京都渋谷区,トウキョウトシブヤク,トーキョートシブヤク
の      助詞,連体化,*,*,*,*,の,ノ,ノ
渋谷駅  名詞,固有名詞,地域,一般,*,*,渋谷駅,シブヤエキ,シブヤエキ
東口    名詞,一般,*,*,*,*,東口,ヒガシグチ,ヒガシグチ
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
位置    名詞,サ変接続,*,*,*,*,位置,イチ,イチ
する    動詞,自立,*,*,サ変・スル,基本形,する,スル,スル
東急文化会館    名詞,固有名詞,一般,*,*,*,東急文化会館,トウキュウブンカカイカン,トーキューブンカカイカン
跡地    名詞,一般,*,*,*,*,跡地,アトチ,アトチ
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
建設    名詞,サ変接続,*,*,*,*,建設,ケンセツ,ケンセツ
さ      動詞,自立,*,*,サ変・スル,未然レル接続,する,サ,サ
れ      動詞,接尾,*,*,一段,連用形,れる,レ,レ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
複合商業施設    名詞,固有名詞,一般,*,*,*,複合商業施設,フクゴウショウギョウシセツ,フクゴーショーギョーシ セツ
        記号,空白,*,*,*,*, ,*,*
。      記号,句点,*,*,*,*,。,。,。
        記号,空白,*,*,*,*, ,*,*
東急百貨店      名詞,固有名詞,組織,*,*,*,東急百貨店,トウキュウヒャッカテン,トーキューヒャッカテン
や      助詞,並立助詞,*,*,*,*,や,ヤ,ヤ
飲食店  名詞,固有名詞,一般,*,*,*,飲食店,インショクテン,インショクテン
、      記号,読点,*,*,*,*,、,、,、
事務所  名詞,一般,*,*,*,*,事務所,ジムショ,ジムショ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
ほか    名詞,副詞可能,*,*,*,*,ほか,ホカ,ホカ
、      記号,読点,*,*,*,*,、,、,、
ミュージカル    名詞,一般,*,*,*,*,ミュージカル,ミュージカル,ミュージカル
劇場    名詞,一般,*,*,*,*,劇場,ゲキジョウ,ゲキジョー
「      記号,括弧開,*,*,*,*,「,「,「
東急シアターオーブ      名詞,固有名詞,一般,*,*,*,東急シアターオーブ,トウキュウシアターオーブ,トーキュー シアターオーブ
」      記号,括弧閉,*,*,*,*,」,」,」
など    助詞,副助詞,*,*,*,*,など,ナド,ナド
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
入居    名詞,サ変接続,*,*,*,*,入居,ニュウキョ,ニューキョ
し      動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
て      助詞,接続助詞,*,*,*,*,て,テ,テ
いる    動詞,非自立,*,*,一段,基本形,いる,イル,イル
。      記号,句点,*,*,*,*,。,。,。
ubuntu@AWS_TEST: ~/dl]

 

以上が、基本的な Janome の使い方となります。

 

 

キーワード出現頻度の解析

青色文庫の作品を使って形態素解析をしてみます。

 

青色文庫(あおぞらぶんこ)とは?

青空文庫

http://www.aozora.gr.jp/

青空文庫とは、著作権が消滅した作品や、著者が許諾した作品をテキストを公開しているウェブ電子図書館です。

そのため、無料で様々な作品を閲覧することができます。

 

有名どころでは

  • 森鴎外
  • 夏目漱石
  • 芥川龍之介
  • 中島敦
  • 太宰治

などの作品が公開されています。

 

今回はこの青空文庫を使って形態素解析をしてみます。

 

形態素解析(けいたいそかいせき)とは?

簡単に言うと、テキストを分解することを言います。

例:

庭には二羽鶏がいる

「庭」「に」「は」「二」「羽」「鶏」「が」「いる」

且つ、テキストを分解してそれぞれの区分を解析します。

例:

ubuntu@AWS_TEST: ~/dl] python3.6 ma-janome.py
庭      名詞,一般,*,*,*,*,庭,ニワ,ニワ
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
二羽    名詞,固有名詞,人名,姓,*,*,二羽,ニワ,ニワ
鶏      名詞,一般,*,*,*,*,鶏,ニワトリ,ニワトリ
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
いる    動詞,自立,*,*,一段,基本形,いる,イル,イル
ubuntu@AWS_TEST: ~/dl]

 

上記のように各語がそれぞれ「名詞」「助詞」など解析されています。

 

出現頻度が高い「名詞(キーワード)」を抽出

具体的には出現頻度が高い「名詞(キーワード)」を抽出してみます。

 

【プログラム例】

ubuntu@AWS_TEST: ~/dl] cat ginga-count.py
# -*- coding: utf-8 -*-

from janome.tokenizer import Tokenizer
import zipfile
import os.path, urllib.request as req

# 銀河鉄道のZIPファイルをダウンロード
url = "http://www.aozora.gr.jp/cards/000081/files/456_ruby_145.zip"
local = "456_ruby_145.zip"
if not os.path.exists(local):
    print("ZIPファイルをダウンロード")
    req.urlretrieve(url, local)

# ZIPファイル内のテキストファイルを読む
zf = zipfile.ZipFile(local, 'r')
fp = zf.open('gingatetsudono_yoru.txt', 'r')
bindata = fp.read()
txt = bindata.decode('shift_jis')

# 形態素解析オブジェクトの生成
t = Tokenizer(mmap=True)

# テキストを一行ずつ処理
word_dic = {}
lines = txt.split("\r\n")
for line in lines:
    malist = t.tokenize(line)
    for w in malist:
        word = w.surface
        ps = w.part_of_speech
        if ps.find('名詞') < 0: continue
        if not word in word_dic:
            word_dic[word] = 0
        word_dic[word] += 1

# よく使われる単語を表示
keys = sorted(word_dic.items(), key=lambda x:x[1], reverse=True)
for word,cnt in keys[:50]:
    print("{0}({1})".format(word, cnt), end="")

ubuntu@AWS_TEST: ~/dl]

 

【プログラム実行例】

ubuntu@AWS_TEST: ~/dl] python3.6 ginga-count.py
よう(206)の(202)ジョバンニ(190)カムパネルラ(101)ん(99)中(63)それ(58)方(58)ぼく(55)みんな(54)人(49)何(47)鳥(45)こと(39)窓(39)汽車(39)前(38)眼(37)いま(37)とき(35)川(32)そう(32)一(31)ほんとうに(31)たくさん(30)水(30)どこ(29)二人(29)青年(28)向う(27)さっき(27)僕(26)そこ(26)こっち(26)お(26)もの(25)上(25)ら(25)たち(25)女の子(25)銀河(24)風(24)お父さん(23)天の川(23)野原(23)い(22)声(22)あかり(21)手(20)星(20)ubuntu@AWS_TEST: ~/dl]

 

何となく「銀河鉄道の夜」らしさを感じます。

  • ジョバンニ
  • カンパネルラ
  • 銀河
  • 汽車
  • 天の川

 

プログラム解説

  • xxx.surface ← 表層形(つまり各語彙を取得できます)

 

 

  • xxx.part_of_speech

part_of_speech

 

 

 

プログラムの変更例

次に試しに「名詞」ではなく「固有名詞」に変えてみます。

        #if ps.find('名詞') < 0: continue ← コメントアウトする

        if ps.find('固有名詞') < 0: continue ← 「固有名詞」に変えてみる

 

 

【プログラム実行結果】

ubuntu@AWS_TEST: ~/dl] python3.6 ginga-count.py
ジョバンニ(190)カムパネルラ(101)ほんとうに(31)あかり(21)うしろ(19)電燈(13)きれいな(12)蝎(10)そらの(10)叫(8)吹(7)りんご(7)河原(7)燈(6)すすきの(6)巨(5)りま(5)ケンタウル(5)天気輪(5)りんどう(5)押(5)わたしたち(5) 浮(4)幾本(4)湧(4)はな(4)たまえ(4)べる(4)見附(3)涙(3)なみ(3)えだ(3)卓子(3)渡(3)むらさき(3)らっこ(3)けもの(3)ぐり(3)露(3)遁(3)疋(3)ほたる(3)灼(3)プリオシン(3)二本(3)改札口(3)なぎさ(3)のようなもの(3)べて(3)黒服(3)ubuntu@AWS_TEST: ~/dl]

 

今度は若干「銀河鉄道の夜」から遠ざかったような気もします。

やはり「銀河」「汽車」がないからでしょうか。

しかしこの結果を見ても「ジョバンニ」「カムパネルラ」が主人公であることが分かります。

 

青空文庫のテキストは「SJIS(Shift JIS)」

今回は「銀河鉄道の夜」のテキストをダウンロードしました。

http://www.aozora.gr.jp/cards/000081/files/456_ruby_145.zip

 

このテキストファイルは「SJIS(Shift JIS)」です。

普通に cat コマンドで開くと文字化けします。

ubuntu@AWS_TEST: ~/dl] cat gingatetsudono_yoru.txt

・      ヘSケフ・
{?。

-------------------------------------------------------
yeLXg?サ・
??「トz    L

stF
   r
i疔     ]s「t渼ス・
bF

 

 

テキストの内容を確認したい場合は「iconv」コマンドを使います。

ubuntu@AWS_TEST: ~/dl] iconv -f SJIS 'gingatetsudono_yoru.txt'
銀河鉄道の夜
宮沢賢治

-------------------------------------------------------
【テキスト中に現れる記号について】

《》:ルビ
(例)云《い》われたり

|:ルビの付く文字列の始まりを特定する記号
(例)光る粒|即《すなわ》ち

[#]:入力者注 主に外字の説明や、傍点の位置の指定
   (数字は、JIS X 0213の面区点番号、または底本のページと行数)
(例)※[#小書き平仮名ん、168-12]
-------------------------------------------------------

[#3字下げ]一、午后《ごご》の授業[#「一、午后の授業」は中見出し]

「ではみなさんは、そういうふうに川だと云《い》われたり、乳の流れたあとだと云われたりしていたこのぼんやりと白いものがほんとうは何かご承知ですか。」先生は、黒板に吊《つる》した大きな黒い星座の図の、上から下へ白くけぶった銀河帯のようなところを指《さ》しながら、みんなに問《とい》をかけました。
 カムパネルラが手をあげました。それから四五人手をあげました。ジョバンニも手をあげようとして、急いでそのままやめました。たしかにあれがみんな星だと、いつか雑誌で読んだのでしたが、このごろはジョバンニはまるで毎日教室でもねむく、本を読むひまも読む本もないので、なんだかどんなこともよくわからないという気持ちがするのでした。
 ところが先生は早くもそれを見附《みつ》けたのでした。
「ジョバンニさん。あなたはわかっているのでしょう。」
 ジョバンニは勢《いきおい》よく立ちあがりましたが、立って見るともうはっきりとそれを答えることができないのでした。ザネリが前の席からふりかえって、ジョバンニを見てくすっとわらいました。ジョバンニはもうどぎまぎしてまっ赤になってしまいました。先生がまた云いました。
「大きな望遠鏡で銀河をよっく調べると銀河は大体何でしょう。」
 やっぱり星だとジョバンニは思いましたがこんどもすぐに答えることができませんでした。
 先生はしばらく困ったようすでしたが、眼《め》をカムパネルラの方へ向けて、
「ではカムパネルラさん。」と名指しました。するとあんなに元気に手をあげたカムパネルラが、やはりもじもじ立ち上ったままやはり答えができませんでした。

 

 

「iconv」コマンドとは?

サーバー系の業務中心の方は「iconv」コマンドをはじめて見るかもしれません。

iconv は「アイコンブ」と読みます。

iconv コマンドは「文字コードを変換して出力する」コマンドです。

 

ubuntu@AWS_TEST: ~/dl] iconv -f SJIS 'gingatetsudono_yoru.txt'
銀河鉄道の夜
宮沢賢治

-------------------------------------------------------
【テキスト中に現れる記号について】

 

ちなみに以下のように出力する際の文字コードを指定できます。

ubuntu@AWS_TEST: ~/dl] iconv -f SJIS -t utf8 'gingatetsudono_yoru.txt'
銀河鉄道の夜
宮沢賢治

-------------------------------------------------------
【テキスト中に現れる記号について】

 

もし出力する際の文字コードを指定(-t utfなど)しなかった場合は、デフォルトの「utf-8」で出力されます。

 

 

参考にした書籍

現在以下の書籍で機械学習のさわり部分を勉強しています。

まだまだ学ぶべき部分は多いですが、「Pythonによるスクレイピング&機械学習 開発テクニック」は機械学習のための様々なライブラリを分かりやすく解説しています。

専門的な部分まで取り扱っていませんが、機械学習初心者にとって、本書は入り口としては最適だと思います。

いきなり難しい専門書を読んでもすぐに挫折すると思うので、最初にこの本を読んでおくのがいいと思います。

Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう

 

 

 

 

今までの記事

 

【AWS】【機械学習】Deep Learning AMI(Ubuntu)で【形態素解析】を試した【Part.1】

 

【AWS】【機械学習】Deep Learning AMI(Ubuntu)で【形態素解析】を試した【Part.2】

 

【AWS】【機械学習】Deep Learning AMI(Ubuntu)で【形態素解析】を試した(Janomeのインストール)【Part.3】

 

【AWS】【機械学習】Deep Learning AMI(Ubuntu)で【形態素解析】を試した(Janome&mecab-ipadic-neologd で解析)【Part.4】

 

 

 

 

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人

コメントを残す

メールアドレスが公開されることはありません。