【コード公開】【Python】テキストマイニングしてみた〜モデル作成〜





汎用性の広いPythonを0から習得するためのフロー及び実際にPythonで開発を行い開発案件を獲得するまでの筋道について解説しているチュートリアル資料と

コーディングの参考となる実際にPythonを使って作ったツールのソースコードを無料で配布していますので、こちらも併せてご覧ください。

初心者・入門者でも30日間で学習できるおすすめPython学習方法

 

おすすめのプログラミングスクールの比較・特徴をまとめた記事を執筆しております。挫折することなく一直線にエンジニアを短期集中で目指している人はこちらから確認してください。

【比較表・無料体験あり】おすすめのプログラミングスクール3選!オンライン学習で完結!

プログラミングを学ぶ上で作りたいものがない人へ提案させてください

 

Word2Vecについて

この記事を読み進める前に、よりテキストマイニングの内容を理解したい方は、下記のURLにてチェックしてみてください。

【Python】テキストマイニングとは〜分析の重要性〜

2018.03.28

「Word2Vec」とは、文章中の語句をベクトルに変換するツールです。単語同士の繋がりに基づいて単語同士の関係性をベクトル化するわけです。

ツール名通り、単語をベクトルとして表現することで、その単語の意味を捕らえる手法となります。つまり、語句と語句の類似度を測ることができるわけですね。

 

Gensimとインストールについて

Word2Vecを実現するツールとして、いくつか挙げられるライブラリがあります。

今回は、実行速度が速く、Pythonから手軽に利用できるものを考えると、「Gensim」ライブラリを使いたいと思います。この「Gensim」は、自然言語処理のためのライブラリです。

 

テキスト処理のための多くの機能を備えており、Word2Vec機能も備えています。「Gensim」はのインストールは、pipコマンド一発でインストール可能です。テキストマイニングを試しに行ってみたい方は利用してみてください。

以下にインストールのコマンドを記載します。

 

pip install gensim

 

モデル作成

今回は、model-making.pyとword2vec.pyの二つのファイルを作成します。

それぞれに行うプログラムを記載して説明していきます。

プログラムの概要

 

1 – model-making.py

 

■処理の流れ

1. python解析器janome,ベクトル変換ツールword2vecをインポート
2. 作成したテキストファイルの読み込み
3. 形態素解析
4. テキストを一行ごとに処理した内容を任意の品詞で抽出
5. 書き込み先のテキストを開く
6. word2vecでモデル作成

 

# python解析器janome, ベクトル変換ツールword2vecをインポート
from janome.tokenizer import Tokenizer
from gensim.models import word2vec
import re

 

1では、今回のテキストマイニングに必要なライブラリとして、python解析器janomeとベクトル変換ツールword2vecをインポートします。

テキスト一行ごとに処理を行う(データクレンジング)ため、正規表現マッチング操作を提供しているreもついでにインポートしておきます。

 

# テキストファイルの読み込み - 2
bindata = open("text_1.txt").read()
text = bindata

 

2では、任意で用意しておいたテキストファイル(何か文章を入力してあるファイル)を読み込みます。

 

# 形態素解析 - 3
t = Tokenizer()
results = []

 

3では、janomeを利用して形態素解析を行うため、インスタンスを作成しておきます。

 

# テキストを一行ごとに処理 - 4
lines = text.split("\r\n")
for line in lines:
	s = line
	s = s.replace("|", "")
	s = re.sub(r"《#.+?》", "", s)
	s = re.sub(r"[#.+?]", "", s)
	tokens = t.tokenize(s)
	# 必要な語句だけを対象とする - 5
	r = []
	for tok in tokens:
		if tok.base_form == "*":
			w = tok.surface
		else:
			w = tok.base_form
		ps = tok.part_of_speech
		hinsi = ps.split(",")[0]
		if hinsi in ["名詞", "形容詞", "動詞", "記号"]:
			r.append(w)
	rl = (" ".join(r)).strip()
	results.append(rl)
	print(rl)

 

4では、テキストを一行ごとに処理しています。

変数linesに対して、読み込んでおいたファイルデータをtextに代入し、その変数を単語ごとに処理しています。
forループにて、正規表現マッチング操作を行ったあと、一文字づつ形態素解析しています。

 

5では、得られた形態素解析後の単語の品詞を必要な形で分かち書きさせていきます。

 

# 書き込み先テキストを開く - 6
text_file = "text_2.txt"
with open(text_file, "w", encoding="utf-8") as fp:
	fp.write("\n".join(results))

 

6では、用意しておいた任意のテキストファイルにて、結果をファイルに保存します。

 

# word2vecでモデル作成 - 7
data = word2vec.LineSentence(text_file)
model = word2vec.Word2Vec(data, size=100, window=1, hs=1, min_count=1, sg=1)
model.save("text_2.model")
print("ok")

 

7では、分かち書きしておいたテキストファイルを読み込み、word2vecにてモデルを作成します。word2vec()メソッドにてパラメータを与えて実行すると、モデルを生成します。生成したモデルは、save()メソッドにてファイルを保存できます。

 

★model-making★

 

# model_making.py

# python解析器janome, ベクトル変換ツールword2vecをインポート - 1
from janome.tokenizer import Tokenizer
from gensim.models import word2vec
import re

# テキストファイルの読み込み - 2
bindata = open("text_1.txt").read()
text = bindata

# 形態素解析 - 3
t = Tokenizer()
results = []
# テキストを一行ごとに処理 - 4
lines = text.split("\r\n")
for line in lines:
	s = line
	s = s.replace("|", "")
	s = re.sub(r"《#.+?》", "", s)
	s = re.sub(r"[#.+?]", "", s)
	tokens = t.tokenize(s)
	# 必要な語句だけを対象とする - 5
	r = []
	for tok in tokens:
		if tok.base_form == "*":
			w = tok.surface
		else:
			w = tok.base_form
		ps = tok.part_of_speech
		hinsi = ps.split(",")[0]
		if hinsi in ["名詞", "形容詞", "動詞", "記号"]:
			r.append(w)
	rl = (" ".join(r)).strip()
	results.append(rl)
	print(rl)

# 書き込み先テキストを開く - 6
text_file = "text_2.txt"
with open(text_file, "w", encoding="utf-8") as fp:
	fp.write("\n".join(results))

# word2vecでモデル作成 - 7
data = word2vec.LineSentence(text_file)
model = word2vec.Word2Vec(data, size=100, window=1, hs=1, min_count=1, sg=1)
model.save("text_2.model")
print("ok")

 

2 – word2vec.py

 

■処理の流れ
1. ベクトル変換ツールword2vecをインポート
2. 類似する語句を表示する

 

# ベクトル変換ツールword2vecをインポート
from gensim.models import word2vec

 

1では、上記のファイルと同様、word2vecをインポートします。

 

# 類似する語句を表示 - 2
model = word2vec.Word2Vec.load("text_2.model")
for word in ["私"]:
	words = model.most_similar(positive=[word])
	n = [w[0] for w in words]
	print(word, "=", ",".join(n))

 

2では、モデル作成しておいたファイルを読み込んで、任意で決めたある単語に関する類似度を表示させます。

 

★word2vec.py★

 

# word2vec.py

# ベクトル変換ツールword2vecをインポート - 1
from gensim.models import word2vec

# 類似する語句を表示 - 2
model = word2vec.Word2Vec.load("text_2.model")
for word in ["私"]:
	words = model.most_similar(positive=[word])
	n = [w[0] for w in words]
	print(word, "=", ",".join(n))

出力結果

 

★用意したテキストファイル★

 

 

★形態素解析を行い、必要な品詞で分かち書きした出力ファイル★

 

 

★指定した単語の類似語句の表示結果★

 

また、今後もテキストマイニングの学習を続けていく場合は、テキストデータに関する情報を理解する力やビッグデータをいかに活用していくかを考えなければなりません。

さらに、必要となるのがデータを利用して何にテキストマイニングが有効になるのか、実例をもとに根拠を持って取り組まなければならないです。

こういったプログラミング言語pythonによるデータアナリストの知見や経験を取り込んだ学習教材として良書が以下の本になるので、合わせて検討して頂ければと幸いです。

おすすめしたいプログラミング学習プラットフォーム

独学・未経験から始める人も少なくないので、プログラミング学習の継続や学習を続けたスキルアップにはそれなりのハードルが設けられています。

また、プログラミング学習においても、学習者によってはすでに学習対象とするプログラミング言語や狙っている分野が存在するかもしれません。

そのため、さらに費用を抑えてピンポイント学習に取り組みたいと考える人も少なくありません。

そこで費用を抑えた上でプログラミングに取り組みたい人へ、オススメしたいプログラミング学習プラットフォームを紹介していきます。

 

プログラミング学習プラットフォーム – Udemy

Udemyは、世界最大級のオンライン学習プラットフォームとなります。

世界中の学びたい人と教えたい人をオンラインでつなぐサービスとなっており、Udemyは米国Udemy,Inc.が運営するプラットフォームで日本ではベネッセが事業パートナーとして協業をしています。

<利用者実績>
受講者数:約3000万人
講師数:約42000人
講座数:約10万

 

お手頃な価格帯の豊富なコンテンツ

1講座あたり数千~数万円程度で実践的なスキルアップが可能となっています。

講座は一度購入すれば視聴期限なく受講することができます。

また、30日返金保証もついているので安心して始めることができます。

 

学びやすい多彩な機能

0.5~2倍の変速機能で自分のペースで受講を可能にする機能や、専用アプリを利用することでスマホからオフライン環境でも学習対象となる講座の視聴が可能です。

また、講師にアプリ・サイト等の直接掲示板から質問ができるため、疑問を解決し自学自習をサポートしています。

 

どんな人が対象者になるのか?

 

Udemyを検討するにあたって、次のような内容で悩んでいるあるいは目的としている人にオススメすることができます。

・習得したいプログラミングスキルが明確で、年収アップのために学習しているエンジニア

・テクノロジー、ビジネスに関するスキルアップに関心が高い人(特にAI・機械学習を学んでスキルアップを検討されている人)

・Adobeのソフトなどウェブデザインを学びたいと考えている人

・仕事に関連して、スキル獲得や資格取得が必須な人

・転職・再就職・副業のために自己投資を検討している人

これらの内容に当てはまる人は、利用しやすい環境が整っています。

 

Udemyの主要コース

Udemyには数多くの講座ありますが、分野ごとに学習対象を区分けしておきましょう。

登録してすぐにでも学習が始められるので、特化した分野を以下にまとめておきます。

プログラミング学習は時間を無駄にせず、素早く学習を始めることも大切なので、一分一秒でも習得したいプログラミングスキルに時間を費やしましょう。

世界最大級のオンライン学習サイトUdemy
※講座数10万の中から取り組みたいものが分野別・レベル別で見つかります

Python 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイルを学ぶオンライン講座
※実践的なPythonスキルを身に付けたい人におすすめ

 



ABOUTこの記事をかいた人

sugi

大学卒業後、IT企業に就職を果たす。システム開発・人工知能に触れながら大手企業と業務をこなす。2年半後脱サラし、現在フリーランス活動中。 2019年2月から起業する予定。 自社サービス及び製品を開発し、売り上げを立てている。