ノンタイトル

理系大学生の雑記と備忘録

形態素解析とは?JanomeとMecabを使った形態素解析のやり方

f:id:mizukawa815:20211003190923p:plain
今日は形態素解析について簡単に触れていくよ~。
JanomeとMecubの導入と使い方を紹介していくよ~。




1. 形態素解析とは

 形態素解析とは
自然言語処理(NLP)の一部で、自然言語で書かれた文を言語上で意味を持つ最小単位(=形態素)に分け、
それぞれの品詞や変化などを判別することです。
例えば 「庭には二羽ニワトリがいる」という文章を
庭(名詞)/に(助詞)/は(助詞)/二(数詞)/羽(助数詞)/ニワトリ(名詞)/が(助詞)/いる(動詞)
のように形態素に分解し、意味を割り出します。


要は文章を単語ごとに区切るというイメージです。


今回はWikipediaから持ってきた以下の文章で形態素解析を行っていきます。

日本国(にほんこく、にっぽんこく、英: Japan)、または日本(にほん、にっぽん)は、東アジアに位置し、日本列島[注 6] および南西諸島・伊豆諸島・小笠原諸島などからなる民主制国家[1][要文献特定詳細情報][2]。首都は東京都[1][3]。
気候は四季の変化に富み、国土の多くは山地で、人口は沿岸の平野部に集中している。国内には行政区分として47の都道府県があり、日本民族[注 7]・アイヌ[注 8]・外国人系の人々[注 9]が居住し、日本語を通用する[1]。
内政においては、明治維新後の1889年に大日本帝国憲法を制定し立憲国家となった。太平洋戦争後の1947年には現行の日本国憲法を施行。外交においては、1956年から国際連合に加盟しており、国連中心主義を採っている[1]。

引用元:日本 - Wikipedia


2. 環境

今回はGoogle Colaboratoryを使用します。


3. Janome

まずはJanomeを用いて形態素解析を行います。

3.1. Janomeとは

 Janomeとは
Pythonライブラリの1つで、形態素解析をしたり分かち書きをしたりすることができる。
速度はMeCabに劣るが、導入が容易。



3.2.インストール

!pip install janome

3.3. ソースコード

from janome.tokenizer import Tokenizer
import re

# ファイルの読み込み
with open("Wikipedia-Japan.txt", mode="r", encoding="utf-8") as f:
  nihon_orig = f.read()

# 不要な部分を削除
nihon = re.sub("([^)]+)", "", nihon_orig)
nihon = re.sub("\[[^\]]+\]", "", nihon)
nihon = re.sub("[  \n]", "", nihon) 

separator = "。" # 句点をセパレータに指定
nihon_list = nihon.split("。") # 各文毎に分割
nihon_list.pop() # 最後の要素は空文字列なので削除
nihon_list = [s+separator for s in nihon_list] # 各文の最後に句点を追加

tokenizer = Tokenizer() # インスタンスを生成

nihon_words = [] # 単語を格納するリスト
for s in nihon_list:
  nihon_words.append(list(tokenizer.tokenize(s, wakati=True))) # wakati=True で各単語を2次元リストとして格納

print(*nihon_words, seq="\n")

3.4. 実行結果

['日本', '国', '、', 'または', '日本', 'は', '、', '東アジア', 'に', '位置', 'し', '、', '日本', '列島', 'および', '南西諸島', '・', '伊豆諸島', '・', '小笠原諸島', 'など', 'から', 'なる', '民主', '制', '国家', '。']
['首都', 'は', '東京', '都', '。']
['気候', 'は', '四季', 'の', '変化', 'に', '富み', '、', '国土', 'の', '多く', 'は', '山地', 'で', '、', '人口', 'は', '沿岸', 'の', '平野', '部', 'に', '集中', 'し', 'て', 'いる', '。']
['国内', 'に', 'は', '行政', '区分', 'として', '47', 'の', '都道府県', 'が', 'あり', '、', '日本', '民族', '・', 'アイヌ', '・', '外国', '人', '系', 'の', '人々', 'が', '居住', 'し', '、', '日本語', 'を', '通用', 'する', '。']
['内政', 'において', 'は', '、', '明治維新', '後', 'の', '1889', '年', 'に', '大日本帝国', '憲法', 'を', '制定', 'し', '立憲', '国家', 'と', 'なっ', 'た', '。']
['太平洋戦争', '後', 'の', '1947', '年', 'に', 'は', '現行', 'の', '日本国', '憲法', 'を', '施行', '。']
['外交', 'において', 'は', '、', '1956', '年', 'から', '国際', '連合', 'に', '加盟', 'し', 'て', 'おり', '、', '国連', '中心', '主義', 'を', '採っ', 'て', 'いる', '。']

雑記です。

4. MeCab

続いてMeCabを用いて形態素解析を行います。

4.1. MeCabとは

 MeCabとは
形態素解析定番のツールです。
知名度が高さに加えて、高速、高精度という特徴があります。

引用元:Wikipedia - MeCab

4.2. インストール

!apt install aptitude
!aptitude install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file -y
!pip install mecab-python3==0.7

4.3. ソースコード

import MeCab
import re

# ファイルの読み込み
with open("Wikipedia-Japan.txt", mode="r", encoding="utf-8") as f:
  nihon_orig = f.read()

# 不要な部分を削除
nihon = re.sub("([^)]+)", "", nihon_orig)
nihon = re.sub("\[[^\]]+\]", "", nihon)
nihon = re.sub("[  \n]", "", nihon) 

separator = "。" # 句点をセパレータに指定
nihon_list = nihon.split("。") # 各文毎に分割
nihon_list.pop() # 最後の要素は空文字列なので削除
nihon_list = [s+separator for s in nihon_list] # 各文の最後に句点を追加

tagger = MeCab.Tagger("-Ochasen")
tagger.parse("")

nihon_words = [] # 単語を格納するリスト
for i, s in enumerate(nihon_list):
  tmp = []
  s = tagger.parseToNode(s) #「文頭」の要素を取得
  while s:
    if not s.surface == "": # 空文字列を削除
      tmp.append(s.surface)
    s = s.next # 次のノードへ
  nihon_words.append(tmp)

print(*nihon_words, sep="\n")

4.4. 実行結果

['日本', '国', '、', 'または', '日本', 'は', '、', '東アジア', 'に', '位置', 'し', '、', '日本', '列島', 'および', '南西諸島', '・', '伊豆諸島', '・', '小笠原諸島', 'など', 'から', 'なる', '民主', '制', '国家', '。']
['首都', 'は', '東京', '都', '。']
['気候', 'は', '四季', 'の', '変化', 'に', '富み', '、', '国土', 'の', '多く', 'は', '山地', 'で', '、', '人口', 'は', '沿岸', 'の', '平野', '部', 'に', '集中', 'し', 'て', 'いる', '。']
['国内', 'に', 'は', '行政', '区分', 'として', '47', 'の', '都道府県', 'が', 'あり', '、', '日本', '民族', '・', 'アイヌ', '・', '外国', '人', '系', 'の', '人々', 'が', '居住', 'し', '、', '日本語', 'を', '通用', 'する', '。']
['内政', 'において', 'は', '、', '明治維新', '後', 'の', '1889', '年', 'に', '大日本帝国', '憲法', 'を', '制定', 'し', '立憲', '国家', 'と', 'なっ', 'た', '。']
['太平洋戦争', '後', 'の', '1947', '年', 'に', 'は', '現行', 'の', '日本国', '憲法', 'を', '施行', '。']
['外交', 'において', 'は', '、', '1956', '年', 'から', '国際', '連合', 'に', '加盟', 'し', 'て', 'おり', '、', '国連', '中心', '主義', 'を', '採っ', 'て', 'いる', '。']


以上で形態素解析についての解説は終わりです。

あわせて読みたい
形態素解析をした後のステップとしてWord2Vecを使って学習をしているよ。
よかったら読んでね。mzkw.hateblo.jp