形態素解析とは?JanomeとMecabを使った形態素解析のやり方
今日は形態素解析について簡単に触れていくよ~。
JanomeとMecubの導入と使い方を紹介していくよ~。
1. 形態素解析とは
形態素解析とは
自然言語処理(NLP)の一部で、自然言語で書かれた文を言語上で意味を持つ最小単位(=形態素)に分け、
それぞれの品詞や変化などを判別することです。
例えば 「庭には二羽ニワトリがいる」という文章を
庭(名詞)/に(助詞)/は(助詞)/二(数詞)/羽(助数詞)/ニワトリ(名詞)/が(助詞)/いる(動詞)
のように形態素に分解し、意味を割り出します。
それぞれの品詞や変化などを判別することです。
例えば 「庭には二羽ニワトリがいる」という文章を
庭(名詞)/に(助詞)/は(助詞)/二(数詞)/羽(助数詞)/ニワトリ(名詞)/が(助詞)/いる(動詞)
のように形態素に分解し、意味を割り出します。
要は文章を単語ごとに区切るというイメージです。
今回はWikipediaから持ってきた以下の文章で形態素解析を行っていきます。
日本国(にほんこく、にっぽんこく、英: Japan)、または日本(にほん、にっぽん)は、東アジアに位置し、日本列島[注 6] および南西諸島・伊豆諸島・小笠原諸島などからなる民主制国家[1][要文献特定詳細情報][2]。首都は東京都[1][3]。
気候は四季の変化に富み、国土の多くは山地で、人口は沿岸の平野部に集中している。国内には行政区分として47の都道府県があり、日本民族[注 7]・アイヌ[注 8]・外国人系の人々[注 9]が居住し、日本語を通用する[1]。
内政においては、明治維新後の1889年に大日本帝国憲法を制定し立憲国家となった。太平洋戦争後の1947年には現行の日本国憲法を施行。外交においては、1956年から国際連合に加盟しており、国連中心主義を採っている[1]。
気候は四季の変化に富み、国土の多くは山地で、人口は沿岸の平野部に集中している。国内には行政区分として47の都道府県があり、日本民族[注 7]・アイヌ[注 8]・外国人系の人々[注 9]が居住し、日本語を通用する[1]。
内政においては、明治維新後の1889年に大日本帝国憲法を制定し立憲国家となった。太平洋戦争後の1947年には現行の日本国憲法を施行。外交においては、1956年から国際連合に加盟しており、国連中心主義を採っている[1]。
引用元:日本 - Wikipedia
2. 環境
今回はGoogle Colaboratoryを使用します。
3. Janome
まずはJanomeを用いて形態素解析を行います。
3.1. Janomeとは
Janomeとは
Pythonライブラリの1つで、形態素解析をしたり分かち書きをしたりすることができる。
速度はMeCabに劣るが、導入が容易。
速度は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.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
よかったら読んでね。mzkw.hateblo.jp