7.8.12. TokenMecab

7.8.12.1. 概要

TokenMecabMeCab 形態素解析器をベースにしたトークナイザーです。

MeCabは日本語に依存していません。その言語用の辞書を用意すれば日本語以外でもMeCabを使えます。日本語用の辞書には NAIST Japanese Dictionary を使えます。

TokenMecab を使うには、追加のパッケージをインストールする必要があります。追加のパッケージをインストールする方法の詳細については、 インストール を参照して下さい。

TokenMecab は再現率より適合率に優れています。 TokenBigram では 京都 というクエリーで 東京都京都 も見つかりますが、この場合は 東京都 は期待した結果ではありません。 TokenMecab を使うと 京都 というクエリーで 京都 だけを見つけられます。

新語をサポートしたい場合は、MeCabの辞書を更新し続ける必要があります。これはメンテナンスコストがかかります。( TokenBigram には辞書のメンテナンスコストはありません。なぜなら、 TokenBigram は辞書を使っていないからです。)新語への対応に mecab-ipadic-NEologd : Neologism dictionary for MeCab が役に立つかもしれません。

7.8.12.2. 構文

TokenMecab は、省略可能な引数があります。

オプションなし:

TokenMecab

オプション指定:

TokenMecab("include_class", true)

TokenMecab("target_class", "a_part_of_speech")

TokenMecab("include_reading", true)

TokenMecab("include_form", true)

TokenMecab("use_reading", true)

複数のオプション指定:

TokenMecab("target_class", "名詞", "include_reading", true)

上記のように、 TokenMecab は複数のオプションを指定することもできます。上記の例以外にも複数のオプションを組み合わせて指定できます。

7.8.12.3. 使い方

7.8.12.4. 簡単な使い方

以下は TokenMeCab の例です。 東京都東京 にトークナイズされています。 京都 というトークンはありません。

実行例:

tokenize TokenMecab "東京都"
# [
#   [
#     0,
#     1545812631.661493,
#     0.0002415180206298828
#   ],
#   [
#     {
#       "value": "東京",
#       "position": 0,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "都",
#       "position": 1,
#       "force_prefix": false,
#       "force_prefix_search": false
#     }
#   ]
# ]

TokenMecab はオプションを指定することもできます。TokenMecab は、target_class オプション、 include_class オプション、 include_reading オプション、 include_form オプションと use_reading オプションがあります。

target_class オプションは、指定した品詞のトークンを検索します。例えば、以下のように名詞のみを検索できます。

実行例:

tokenize 'TokenMecab("target_class", "名詞")' '彼の名前は山田さんのはずです。'
# [
#   [
#     0,
#     1545810238.195525,
#     0.0003066062927246094
#   ],
#   [
#     {
#       "value": "彼",
#       "position": 0,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "名前",
#       "position": 1,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "山田",
#       "position": 2,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "さん",
#       "position": 3,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "はず",
#       "position": 4,
#       "force_prefix": false,
#       "force_prefix_search": false
#     }
#   ]
# ]

include_class オプションは、以下のようにMeCabのメタデータの品詞と品詞細分類を出力します。

実行例:

tokenize 'TokenMecab("include_class", true)' '彼の名前は山田さんのはずです。'
# [
#   [
#     0,
#     1545892715.887472,
#     0.03757452964782715
#   ],
#   [
#     {
#       "value": "彼",
#       "position": 0,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "class": "名詞",
#         "subclass0": "代名詞",
#         "subclass1": "一般"
#       }
#     },
#     {
#       "value": "の",
#       "position": 1,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "class": "助詞",
#         "subclass0": "連体化"
#       }
#     },
#     {
#       "value": "名前",
#       "position": 2,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "class": "名詞",
#         "subclass0": "一般"
#       }
#     },
#     {
#       "value": "は",
#       "position": 3,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "class": "助詞",
#         "subclass0": "係助詞"
#       }
#     },
#     {
#       "value": "山田",
#       "position": 4,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "class": "名詞",
#         "subclass0": "固有名詞",
#         "subclass1": "人名",
#         "subclass2": "姓"
#       }
#     },
#     {
#       "value": "さん",
#       "position": 5,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "class": "名詞",
#         "subclass0": "接尾",
#         "subclass1": "人名"
#       }
#     },
#     {
#       "value": "の",
#       "position": 6,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "class": "助詞",
#         "subclass0": "連体化"
#       }
#     },
#     {
#       "value": "はず",
#       "position": 7,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "class": "名詞",
#         "subclass0": "非自立",
#         "subclass1": "一般"
#       }
#     },
#     {
#       "value": "です",
#       "position": 8,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "class": "助動詞"
#       }
#     },
#     {
#       "value": "。",
#       "position": 9,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "class": "記号",
#         "subclass0": "句点"
#       }
#     }
#   ]
# ]

このオプションで出力する品詞と品詞細分類と target_class で不要なトークンを取り除くことができます。

include_reading は以下のように、MeCabのメタデータの読みを出力します。

実行例:

tokenize 'TokenMecab("include_reading", true)' '彼の名前は山田さんのはずです。'
# [
#   [
#     0,
#     1545892913.226588,
#     0.0003414154052734375
#   ],
#   [
#     {
#       "value": "彼",
#       "position": 0,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "reading": "カレ"
#       }
#     },
#     {
#       "value": "の",
#       "position": 1,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "reading": "ノ"
#       }
#     },
#     {
#       "value": "名前",
#       "position": 2,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "reading": "ナマエ"
#       }
#     },
#     {
#       "value": "は",
#       "position": 3,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "reading": "ハ"
#       }
#     },
#     {
#       "value": "山田",
#       "position": 4,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "reading": "ヤマダ"
#       }
#     },
#     {
#       "value": "さん",
#       "position": 5,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "reading": "サン"
#       }
#     },
#     {
#       "value": "の",
#       "position": 6,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "reading": "ノ"
#       }
#     },
#     {
#       "value": "はず",
#       "position": 7,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "reading": "ハズ"
#       }
#     },
#     {
#       "value": "です",
#       "position": 8,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "reading": "デス"
#       }
#     },
#     {
#       "value": "。",
#       "position": 9,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "reading": "。"
#       }
#     }
#   ]
# ]

このオプションを使って、トークンの読みを取得できます。

include_form は、以下のようにMeCabのメタデータの活用型と活用形を出力します。

実行例:

tokenize 'TokenMecab("include_form", true)' '彼の名前は山田さんのはずです。'
# [
#   [
#     0,
#     1545892987.209944,
#     0.0004286766052246094
#   ],
#   [
#     {
#       "value": "彼",
#       "position": 0,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "base_form": "彼"
#       }
#     },
#     {
#       "value": "の",
#       "position": 1,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "base_form": "の"
#       }
#     },
#     {
#       "value": "名前",
#       "position": 2,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "base_form": "名前"
#       }
#     },
#     {
#       "value": "は",
#       "position": 3,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "base_form": "は"
#       }
#     },
#     {
#       "value": "山田",
#       "position": 4,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "base_form": "山田"
#       }
#     },
#     {
#       "value": "さん",
#       "position": 5,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "base_form": "さん"
#       }
#     },
#     {
#       "value": "の",
#       "position": 6,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "base_form": "の"
#       }
#     },
#     {
#       "value": "はず",
#       "position": 7,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "base_form": "はず"
#       }
#     },
#     {
#       "value": "です",
#       "position": 8,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "inflected_type": "特殊・デス",
#         "inflected_form": "基本形",
#         "base_form": "です"
#       }
#     },
#     {
#       "value": "。",
#       "position": 9,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "base_form": "。"
#       }
#     }
#   ]
# ]

use_reading は、読みがなによる検索をサポートします。このオプションは、読みがなを使った検索をするため、表記ゆれの対策として有用です。

実行例:

tokenize 'TokenMecab("use_reading", true)' '彼の名前は山田さんのはずです。'
# [
#   [
#     0,
#     1545893087.556662,
#     0.0003693103790283203
#   ],
#   [
#     {
#       "value": "カレ",
#       "position": 0,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ノ",
#       "position": 1,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ナマエ",
#       "position": 2,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ハ",
#       "position": 3,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ヤマダ",
#       "position": 4,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "サン",
#       "position": 5,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ノ",
#       "position": 6,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "ハズ",
#       "position": 7,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "デス",
#       "position": 8,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "。",
#       "position": 9,
#       "force_prefix": false,
#       "force_prefix_search": false
#     }
#   ]
# ]

7.8.12.5. 高度な使い方

target_class オプションは、品詞細分類を指定することや、 + や - を使って、特定の品詞を追加または、除外することもできます。したがって、以下のように人名の接尾語と非自立語を除いた名詞を検索することもできます。

このようにして、ノイズとなるトークンを除外して検索できます。

実行例:

tokenize 'TokenMecab("target_class", "-名詞/非自立", "target_class", "-名詞/接尾/人名", "target_class", "名詞")' '彼の名前は山田さんのはずです。'
# [
#   [
#     0,
#     1545810363.771334,
#     0.0003197193145751953
#   ],
#   [
#     {
#       "value": "彼",
#       "position": 0,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "名前",
#       "position": 1,
#       "force_prefix": false,
#       "force_prefix_search": false
#     },
#     {
#       "value": "山田",
#       "position": 2,
#       "force_prefix": false,
#       "force_prefix_search": false
#     }
#   ]
# ]

加えて、以下のように include_reading を使って、ノイズを除去したトークンの読みを取得できます。

実行例:

tokenize 'TokenMecab("target_class", "-名詞/非自立", "target_class", "-名詞/接尾/人名", "target_class", "名詞", "include_reading", true)' '彼の名前は山田さんのはずです。'
# [
#   [
#     0,
#     1545893197.914959,
#     0.0003139972686767578
#   ],
#   [
#     {
#       "value": "彼",
#       "position": 0,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "reading": "カレ"
#       }
#     },
#     {
#       "value": "名前",
#       "position": 1,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "reading": "ナマエ"
#       }
#     },
#     {
#       "value": "山田",
#       "position": 2,
#       "force_prefix": false,
#       "force_prefix_search": false,
#       "metadata": {
#         "reading": "ヤマダ"
#       }
#     }
#   ]
# ]

7.8.12.6. 引数

7.8.12.6.1. 省略可能引数

省略可能引数は4つあります。 include_classtarget_classinclude_formuse_reading です。

7.8.12.6.1.1. include_class

MeCabのメタデータの品詞と品詞細分類を出力します。

7.8.12.6.1.2. target_class

指定した品詞のトークンを出力します。

7.8.12.6.1.3. include_reading

MeCabのメタデータの読みを出力します。

7.8.12.6.1.4. include_form

MeCabのメタデータの活用型と活用形を出力します。

7.8.12.6.1.5. use_reading

トークンの読みを出力します。

7.8.12.7. 参考