「テキストアナリティクスの基礎と実践」をpythonで読む0 テキスト処理のツール

この内容は金明哲さんの「テキストアナリティクスの基礎と実践」のRでの実装をpythonで書き換えながら読んでいくものです。
提供されているデータは、すでに形態素解析されてある程度集計されたデータとなります。
詳しくは本を読んでください。

## 0. テキスト処理のツール
### 0.1 形態素解析
意味を持つ最小単位のことを**形態素**と呼ぶ。  
文を形態素ごとに分割し、品詞情報などを付け加える作業を**形態素解析**、機械的に形態素解析を行うシステムを形態素解析器と呼ぶ。

#### JUMAN
**JUMAN**は、京都大学の研究室を中心に開発された。
JUMANの改良と並んで、 **JUMAN++** が公開されている。

```python
from pyknp import Juman

jumanpp = Juman()
result = jumanpp.analysis("最近、痛ましい事件や事故のニュースが多い。")
result
```

```python
for mrph in result.mrph_list(): # 各形態素にアクセス
    print("見出し:%s, 読み:%s, 原形:%s, 品詞:%s, 品詞細分類:%s, 活用型:%s, 活用形:%s, 意味情報:%s, 代表表記:%s" \
           % (mrph.midasi, mrph.yomi, mrph.genkei, mrph.hinsi, mrph.bunrui, mrph.katuyou1, mrph.katuyou2, mrph.imis, mrph.repname))
```



    見出し:最近, 読み:さいきん, 原形:最近, 品詞:名詞, 品詞細分類:時相名詞, 活用型:*, 活用形:*, 意味情報:代表表記:最近/さいきん カテゴリ:時間, 代表表記:最近/さいきん
    見出し:、, 読み:、, 原形:、, 品詞:特殊, 品詞細分類:読点, 活用型:*, 活用形:*, 意味情報:NIL, 代表表記:
    見出し:痛ましい, 読み:いたましい, 原形:痛ましい, 品詞:形容詞, 品詞細分類:*, 活用型:イ形容詞イ段, 活用形:基本形, 意味情報:代表表記:痛ましい/いたましい, 代表表記:痛ましい/いたましい
    見出し:事件, 読み:じけん, 原形:事件, 品詞:名詞, 品詞細分類:普通名詞, 活用型:*, 活用形:*, 意味情報:代表表記:事件/じけん カテゴリ:抽象物 ドメイン:政治, 代表表記:事件/じけん
    見出し:や, 読み:や, 原形:や, 品詞:助詞, 品詞細分類:接続助詞, 活用型:*, 活用形:*, 意味情報:NIL, 代表表記:
    見出し:事故, 読み:じこ, 原形:事故, 品詞:名詞, 品詞細分類:普通名詞, 活用型:*, 活用形:*, 意味情報:代表表記:事故/じこ カテゴリ:抽象物 ドメイン:家庭・暮らし;交通, 代表表記:事故/じこ
    見出し:の, 読み:の, 原形:の, 品詞:助詞, 品詞細分類:接続助詞, 活用型:*, 活用形:*, 意味情報:NIL, 代表表記:
    見出し:ニュース, 読み:にゅーす, 原形:ニュース, 品詞:名詞, 品詞細分類:普通名詞, 活用型:*, 活用形:*, 意味情報:代表表記:ニュース/にゅーす カテゴリ:抽象物 ドメイン:メディア, 代表表記:ニュース/にゅーす
    見出し:が, 読み:が, 原形:が, 品詞:助詞, 品詞細分類:格助詞, 活用型:*, 活用形:*, 意味情報:NIL, 代表表記:
    見出し:多い, 読み:おおい, 原形:多い, 品詞:形容詞, 品詞細分類:*, 活用型:イ形容詞アウオ段, 活用形:基本形, 意味情報:代表表記:多い/おおい 反義:形容詞:少ない/すくない, 代表表記:多い/おおい
    見出し:。, 読み:。, 原形:。, 品詞:特殊, 品詞細分類:句点, 活用型:*, 活用形:*, 意味情報:NIL, 代表表記:
    


#### MeCab
**MeCab**は京都大学等が開発し、公開した。  
辞書とコーパスに依存しない汎用的な設計と、高速処理が可能である。

```python
import MeCab

mecab = MeCab.Tagger()
mecab.parse('最近、痛ましい事件や事故のニュースが多い。').split('\n')
```



    ['最近\t名詞,副詞可能,*,*,*,*,最近,サイキン,サイキン',
     '、\t記号,読点,*,*,*,*,、,、,、',
     '痛ましい\t形容詞,自立,*,*,形容詞・イ段,基本形,痛ましい,イタマシイ,イタマシイ',
     '事件\t名詞,一般,*,*,*,*,事件,ジケン,ジケン',
     'や\t助詞,並立助詞,*,*,*,*,や,ヤ,ヤ',
     '事故\t名詞,一般,*,*,*,*,事故,ジコ,ジコ',
     'の\t助詞,連体化,*,*,*,*,の,ノ,ノ',
     'ニュース\t名詞,一般,*,*,*,*,ニュース,ニュース,ニュース',
     'が\t助詞,格助詞,一般,*,*,*,が,ガ,ガ',
     '多い\t形容詞,自立,*,*,形容詞・アウオ段,基本形,多い,オオイ,オーイ',
     '。\t記号,句点,*,*,*,*,。,。,。',
     'EOS',
     '']

#### Janome
**Janome** もよく使用される。

```python
from janome.tokenizer import Tokenizer

j_t = Tokenizer()

text = 'ピカチュウ人気だが数が少ないので貴重'

for token in j_t.tokenize(text):
    print(token)
```
     
     ピカチュウ	名詞,一般,*,*,*,*,ピカチュウ,*,*
     人気	名詞,一般,*,*,*,*,人気,ニンキ,ニンキ
     だ	助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ
     が	助詞,接続助詞,*,*,*,*,が,ガ,ガ
     数	名詞,一般,*,*,*,*,数,カズ,カズ
     が	助詞,格助詞,一般,*,*,*,が,ガ,ガ
     少ない	形容詞,自立,*,*,形容詞・アウオ段,基本形,少ない,スクナイ,スクナイ
     ので	助詞,接続助詞,*,*,*,*,ので,ノデ,ノデ
     貴重	名詞,形容動詞語幹,*,*,*,*,貴重,キチョウ,キチョー

### 0.2 構文解析
**構文解析**とは、文法規則に基づいて、文の構造を句・文節を単位として解析することである。  
日本語の場合は、文節を単位に係り受け関係を用いて構文を解析するのが一般的である。  
**句**とは、1つ以上の語が集まって1つの品詞と同じような働きをしながら、文を構成する誤の塊のことである。  
**文節**とは、日本語を意味の分かる単位で区切ったものである。  
たとえば「明日は明日の風が吹く」を文節で区切ると、「明日は/ 明日の/ 風が/ 吹く」となる。  
#### JUMAN/KNP
**KNP**は、京都大学のJUMANをベースとした係り受け関係の解析器である。


```python
from pyknp import KNP
knp = KNP()     # Default is JUMAN++. If you use JUMAN, use KNP(jumanpp=False)
result = knp.parse("下鴨神社の参道は暗かった。")

print("文節")
for bnst in result.bnst_list(): # 各文節へのアクセス
    print("\tID:%d, 見出し:%s, 係り受けタイプ:%s, 親文節ID:%d, 素性:%s" \
            % (bnst.bnst_id, "".join(mrph.midasi for mrph in bnst.mrph_list()), bnst.dpndtype, bnst.parent_id, bnst.fstring))

print("基本句")
for tag in result.tag_list(): # 各基本句へのアクセス
    print("\tID:%d, 見出し:%s, 係り受けタイプ:%s, 親基本句ID:%d, 素性:%s" \
            % (tag.tag_id, "".join(mrph.midasi for mrph in tag.mrph_list()), tag.dpndtype, tag.parent_id, tag.fstring))

print("形態素")
for mrph in result.mrph_list(): # 各形態素へのアクセス
    print("\tID:%d, 見出し:%s, 読み:%s, 原形:%s, 品詞:%s, 品詞細分類:%s, 活用型:%s, 活用形:%s, 意味情報:%s, 代表表記:%s" \
            % (mrph.mrph_id, mrph.midasi, mrph.yomi, mrph.genkei, mrph.hinsi, mrph.bunrui, mrph.katuyou1, mrph.katuyou2, mrph.imis, mrph.repname))
```

    文節
    	ID:0, 見出し:下鴨神社の, 係り受けタイプ:D, 親文節ID:1, 素性:<文頭><相対名詞><地名疑><助詞><連体修飾><体言><係:ノ格><区切:0-4><準主題表現><正規化代表表記:下/した+鴨/かも+神社/じんじゃ><主辞代表表記:神社/じんじゃ>
    	ID:1, 見出し:参道は, 係り受けタイプ:D, 親文節ID:2, 素性:<ハ><助詞><体言><係:未格><提題><区切:3-5><主題表現><格要素><連用要素><正規化代表表記:参道/さんどう><主辞代表表記:参道/さんどう>
    	ID:2, 見出し:暗かった。, 係り受けタイプ:D, 親文節ID:-1, 素性:<文末><時制-過去><句点><用言:形><レベル:C><区切:5-5><ID:（文末）><係:文末><提題受:30><主節><格要素><連用要素><正規化代表表記:暗い/くらい><主辞代表表記:暗い/くらい>
    基本句
    	ID:0, 見出し:下, 係り受けタイプ:D, 親基本句ID:1, 素性:<文節内><係:文節内><文頭><相対名詞><体言><一文字漢字><正規化代表表記:下/した>
    	ID:1, 見出し:鴨, 係り受けタイプ:D, 親基本句ID:2, 素性:<文節内><係:文節内><体言><一文字漢字><正規化代表表記:鴨/かも>
    	ID:2, 見出し:神社の, 係り受けタイプ:D, 親基本句ID:3, 素性:<相対名詞><地名疑><助詞><連体修飾><体言><係:ノ格><区切:0-4><準主題表現><係チ:非用言格解析||用言&&文節内:Ｔ解析格-ヲ><正規化代表表記:神社/じんじゃ>
    	ID:3, 見出し:参道は, 係り受けタイプ:D, 親基本句ID:4, 素性:<ハ><助詞><体言><係:未格><提題><区切:3-5><主題表現><格要素><連用要素><正規化代表表記:参道/さんどう><解析格:ガ>
    	ID:4, 見出し:暗かった。, 係り受けタイプ:D, 親基本句ID:-1, 素性:<文末><時制-過去><句点><用言:形><レベル:C><区切:5-5><ID:（文末）><係:文末><提題受:30><主節><格要素><連用要素><正規化代表表記:暗い/くらい><用言代表表記:暗い/くらい><格関係3:ガ:参道><格解析結果:暗い/くらい:形22:ガ/N/参道/3/0/1;ニ/U/-/-/-/-;ト/U/-/-/-/-;カラ/U/-/-/-/-;時間/U/-/-/-/-;修飾/U/-/-/-/-;ガ２/U/-/-/-/-;ニクラベル/U/-/-/-/-;外の関係/U/-/-/-/->
    形態素
    	ID:0, 見出し:下, 読み:した, 原形:下, 品詞:名詞, 品詞細分類:普通名詞, 活用型:*, 活用形:*, 意味情報:代表表記:下/した 漢字読み:訓 カテゴリ:場所-機能, 代表表記:下/した
    	ID:1, 見出し:鴨, 読み:かも, 原形:鴨, 品詞:名詞, 品詞細分類:普通名詞, 活用型:*, 活用形:*, 意味情報:代表表記:鴨/かも カテゴリ:動物;人工物-食べ物 ドメイン:料理・食事, 代表表記:鴨/かも
    	ID:2, 見出し:神社, 読み:じんじゃ, 原形:神社, 品詞:名詞, 品詞細分類:普通名詞, 活用型:*, 活用形:*, 意味情報:代表表記:神社/じんじゃ 地名末尾 カテゴリ:場所-施設 ドメイン:文化・芸術, 代表表記:神社/じんじゃ
    	ID:3, 見出し:の, 読み:の, 原形:の, 品詞:助詞, 品詞細分類:接続助詞, 活用型:*, 活用形:*, 意味情報:NIL, 代表表記:
    	ID:4, 見出し:参道, 読み:さんどう, 原形:参道, 品詞:名詞, 品詞細分類:普通名詞, 活用型:*, 活用形:*, 意味情報:代表表記:参道/さんどう カテゴリ:場所-施設 ドメイン:文化・芸術, 代表表記:参道/さんどう
    	ID:5, 見出し:は, 読み:は, 原形:は, 品詞:助詞, 品詞細分類:副助詞, 活用型:*, 活用形:*, 意味情報:NIL, 代表表記:
    	ID:6, 見出し:暗かった, 読み:くらかった, 原形:暗い, 品詞:形容詞, 品詞細分類:*, 活用型:イ形容詞アウオ段, 活用形:タ形, 意味情報:代表表記:暗い/くらい, 代表表記:暗い/くらい
    	ID:7, 見出し:。, 読み:。, 原形:。, 品詞:特殊, 品詞細分類:句点, 活用型:*, 活用形:*, 意味情報:NIL, 代表表記:
    

#### Cabocha
**Cabocha**は、サポートベクターマシンに基づいた係り受け解析器である。

### 0.3 意味解析
**意味解析**とは、文によって記述されている物事の関係を同定する処理のこと。  
形態素解析や構文解析ほど進んでおらず、構文解析結果と概念辞書や意味ネットワークなどの辞書を組み合わせて、  
文の意味を組み立てているのが現状である。  
意味ネットワークは、単語の意味や、それらの概念間の関連の有無をネットワークに示したものである。  
#### 概念辞書
**概念辞書**は、単語の意味を概念体系にまとめた辞書である。シソーラスや分類語彙表など。  
#### 極性辞書
テキストの**感情分析**を行う際、そのテキストの内容がポジティブなものかネガティブなものかについて判断する必要がある。  
機械的に感情を分析するためには、感情表現の辞書が必要である。  
現段階では、両極性(ネガティブとポジティブ、主観と客観など)に分類した評価極性辞書を用いて行われる。  
#### モダリティ
意味処理では、**モダリティ**も重要となる。
モダリティとは、話している内容に対して、話し手の感じ方、判断の認識を表す言語表現である。


### 次回
テキストの基本統計と視覚化

https://qiita.com/tanaka_benkyo/items/0bd039292f790502cad5

### 参考文献

https://www.amazon.co.jp/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%81%A8%E5%AE%9F%E8%B7%B5-%E9%87%91-%E6%98%8E%E5%93%B2/dp/4000298968