7.8.12. TokenMecab
#
7.8.12.1. 概要#
TokenMecab
は MeCab 形態素解析器をベースにしたトークナイザーです。
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,
# 1337566253.89858,
# 0.000355720520019531
# ],
# [
# {
# "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,
# 1337566253.89858,
# 0.000355720520019531
# ],
# [
# {
# "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,
# 1337566253.89858,
# 0.000355720520019531
# ],
# [
# {
# "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,
# 1337566253.89858,
# 0.000355720520019531
# ],
# [
# {
# "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,
# 1337566253.89858,
# 0.000355720520019531
# ],
# [
# {
# "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,
# 1337566253.89858,
# 0.000355720520019531
# ],
# [
# {
# "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,
# 1337566253.89858,
# 0.000355720520019531
# ],
# [
# {
# "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,
# 1337566253.89858,
# 0.000355720520019531
# ],
# [
# {
# "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_class
、 target_class
、 include_form
と use_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
#
トークンの読みを出力します。