NLTK 平文コーパスとタグ付きコーパスの比較

平文コーパスとChaSen形式のタグ付きコーパスの違いを確認した結果です。

# MeCabのインストール
OSは、Ubuntu 14.04 を利用して パッケージマネージャーで導入できるものだけでインストールしました。
```
sudo apt-get install libmecab2 libmecab-dev mecab mecab-ipadic mecab-ipadic-utf8 mecab-utils
```

# テキストデータの準備

テキストデータは、現代日本語であれば良いので、ウィッキペディア [３月のライオン] (https://ja.wikipedia.org/wiki/3%E6%9C%88%E3%81%AE%E3%83%A9%E3%82%A4%E3%82%AA%E3%83%B3) の一部を引用しました。

```
ubuntu@ubuntu-xenial:~/nltk$ head -n 1 sometext.txt 
少年・桐山零は、幼いころに交通事故で家族を失い、父の友人である棋士、幸田に内弟子として引き取られ、15歳で将棋のプロ棋士になった。幸田の実子との軋轢もあり、六月町にて1人暮らしを始めた零は、1年遅れで高校に編入するが、周囲に溶け込めず校内で孤立し、将棋の対局においても不調が続いていた。
```

# 形態素解析済みコーパスの作成
NLTKの解説記事 [Python による日本語自然言語処理](http://www.nltk.org/book-jp/ch12.html) では、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] )
```