平文コーパスとChaSen形式のタグ付きコーパスの違いを確認した結果です。
MeCabのインストール
OSは、Ubuntu 14.04 を利用して パッケージマネージャーで導入できるものだけでインストールしました。
sudo apt-get install libmecab2 libmecab-dev mecab mecab-ipadic mecab-ipadic-utf8 mecab-utils
テキストデータの準備
テキストデータは、現代日本語であれば良いので、ウィッキペディア 3月のライオン の一部を引用しました。
ubuntu@ubuntu-xenial:~/nltk$ head -n 1 sometext.txt
少年・桐山零は、幼いころに交通事故で家族を失い、父の友人である棋士、幸田に内弟子として引き取られ、15歳で将棋のプロ棋士になった。幸田の実子との軋轢もあり、六月町にて1人暮らしを始めた零は、1年遅れで高校に編入するが、周囲に溶け込めず校内で孤立し、将棋の対局においても不調が続いていた。
形態素解析済みコーパスの作成
NLTKの解説記事 Python による日本語自然言語処理 では、ChaSen形式の形態素解析済みのデータを利用していますから、MeCabを利用して、ChaSen形式の形態素解析データの作成することにしました。
ubuntu@ubuntu-xenial:~/nltk$ mecab -Ochasen sometext.txt > sometext.chasen
少年 ショウネン 少年 名詞-一般
・ ・ ・ 記号-一般
桐山 キリヤマ 桐山 名詞-固有名詞-人名-姓
零 レイ 零 名詞-固有名詞-人名-名
は ハ は 助詞-係助詞
、 、 、 記号-読点
幼い オサナイ 幼い 形容詞-自立 形容詞・アウオ段 基本形
ころ コロ ころ 名詞-非自立-副詞可能
に ニ に 助詞-格助詞-一般
交通 コウツウ 交通 名詞-一般
事故 ジコ 事故 名詞-一般
で デ で 助詞-格助詞-一般
家族 カゾク 家族 名詞-一般
を ヲ を 助詞-格助詞-一般
失い ウシナイ 失う 動詞-自立 五段・ワ行促音便 連用形
、 、 、 記号-読点
父 チチ 父 名詞-一般
の ノ の 助詞-連体化
友人 ユウジン 友人 名詞-一般
で デ だ 助動詞 特殊・ダ 連用形
ある アル ある 助動詞 五段・ラ行アル 基本形
棋士 キシ 棋士 名詞-一般
、 、 、 記号-読点
幸田 コウダ 幸田 名詞-固有名詞-人名-姓
に ニ に 助詞-格助詞-一般
内弟子 ウチデシ 内弟子 名詞-一般
として トシテ として 助詞-格助詞-連語
NLTK タグ付きコーパス
ChaSen形式にした コーパスデータを読み込んで表示するコード
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import nltk
from nltk.corpus.reader.chasen import *
data = ChasenCorpusReader('./', 'sometext.chasen', encoding='utf-8')
print '/'.join( data.words()[0:100] )
上記コードの実行結果です。 平文コーパスに比べると「ひらがな」混じり単語の処理が改善されていることが解ります。
ubuntu@ubuntu-xenial:~/nltk$ ./chasenCorpusReader.py
少年/・/桐山/零/は/、/幼い/ころ/に/交通/事故/で/家族/を/失い/、/父/の/友人/で/ある/棋士/、/幸田/に/内弟子/として/引き取ら/れ/、/15/歳/で/将棋/の/プロ/棋士/に/なっ/た/。/幸田/の/実子/と/の/軋轢/も/あり/、/六月/町/にて/1/人/暮らし/を/始め/た/零/は/、/1/年/遅れ/で/高校/に/編入/する/が/、/周囲/に/溶け/込め/ず/校内/で/孤立/し/、/将棋/の/対局/において/も/不調/が/続い/て/い/た/。/自ら/の/境遇/を/停滞/し
比較参考 平文コーパス
以下がNLTK の PlainTextCorpus リーダーで処理した結果です。
ubuntu@ubuntu-xenial:~/nltk$ ./plainTextCorpus.py
少年/・/桐山零/は/、/幼/いころに/交通事故/で/家族/を/失/い/、/父/の/友人/である/棋士/、/幸田/に/内弟子/として/引/き/取/られ/、15/歳/で/将棋/の/プロ/棋士/になった/。/幸田/の/実子/との/軋轢/もあり/、/六月町/にて/1/人暮/らしを/始/めた/零/は/、1/年遅/れで/高校/に/編入/するが/、/周囲/に/溶/け/込/めず/校内/で/孤立/し/、/将棋/の/対局/においても/不調/が/続/いていた/。
上記のテキストの生成コード
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import nltk
from nltk.corpus.reader import *
from nltk.corpus.reader.util import *
jp_sent_tokenizer = nltk.RegexpTokenizer(u'[^ 「」!?。]*[!?。]')
jp_chartype_tokenizer = nltk.RegexpTokenizer(u'([ぁ-んー]+|[ァ-ンー]+|[\u4e00-\u9FFF]+|[^ぁ-んァ-ンー\u4e00-\u9FFF]+)')
data = PlaintextCorpusReader("./",
r'sometext.txt',
encoding='utf-8',
para_block_reader=read_line_block,
sent_tokenizer=jp_sent_tokenizer,
word_tokenizer=jp_chartype_tokenizer)
print '/'.join( data.words()[0:100] )