LoginSignup
0
1

More than 3 years have passed since last update.

JanomeとMecabを使って形態素解析してみる

Last updated at Posted at 2021-05-15

目次

1 形態素解析とは
2 環境
3 Janome
 3-1 Janomeとは
 3-2 インストール
 3-3 ソースコード
 3-4 実行結果
4 MeCab
 4-1 MeCabとは
 4-2 ソースコード
 4-3 実行結果

1 形態素解析とは

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

要は文章を単語ごとに区切るというイメージです。
今回はWikipediaから持ってきた以下の文章で形態素解析を行っていきます。

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

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とは

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

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', '年', 'から', '国際', '連合', 'に', '加盟', 'し', 'て', 'おり', '、', '国連', '中心', '主義', 'を', '採っ', 'て', 'いる', '。']
0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1