こんにちは、ごみばこです。
MeCab や Kuromoji などで行える形態素解析、すごいですよねー。ただ新しい語が増えたり、なんだりーってしたときに、辞書を更新しないとちょっとだけ直感的ではない分割のされ方になりますよね。まあ、辞書を元に分割の仕方を学習するのでそうなんですが。。 そこに対して mecab-ipadic-neologd という素晴らしいプロジェクトがあって、最近の語もどんどん追加してくれています。
これを使うと GitHub のサンプルにもかいてありますが「中居正広のミになる図書館」が固有名詞として認識されたりします!(スゴイ)
$ echo "10日放送の「中居正広のミになる図書館」(テレビ朝日系)で、SMAPの中居正広が、篠原信一の過去の勘違いを明かす一幕があった。" | mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd
10日 名詞,固有名詞,一般,*,*,*,10日,トオカ,トオカ
放送 名詞,サ変接続,*,*,*,*,放送,ホウソウ,ホーソー
の 助詞,連体化,*,*,*,*,の,ノ,ノ
「 記号,括弧開,*,*,*,*,「,「,「
中居正広のミになる図書館 名詞,固有名詞,一般,*,*,*,中居正広のミになる図書館,ナカイマサヒロノミニナルトショカン,ナカイマサヒロノミニナルトショカン
」 記号,括弧閉,*,*,*,*,」,」,」
( 記号,括弧開,*,*,*,*,(,(,(
テレビ朝日 名詞,固有名詞,組織,*,*,*,テレビ朝日,テレビアサヒ,テレビアサヒ
系 名詞,接尾,一般,*,*,*,系,ケイ,ケイ
) 記号,括弧閉,*,*,*,*,),),)
で 助詞,格助詞,一般,*,*,*,で,デ,デ
、 記号,読点,*,*,*,*,、,、,、
SMAP 名詞,固有名詞,一般,*,*,*,SMAP,スマップ,スマップ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
中居正広 名詞,固有名詞,人名,*,*,*,中居正広,ナカイマサヒロ,ナカイマサヒロ
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
、 記号,読点,*,*,*,*,、,、,、
篠原信一 名詞,固有名詞,人名,*,*,*,篠原信一,シノハラシンイチ,シノハラシンイチ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
過去 名詞,副詞可能,*,*,*,*,過去,カコ,カコ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
勘違い 名詞,サ変接続,*,*,*,*,勘違い,カンチガイ,カンチガイ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
明かす 動詞,自立,*,*,五段・サ行,基本形,明かす,アカス,アカス
一幕 名詞,一般,*,*,*,*,一幕,ヒトマク,ヒトマク
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
あっ 動詞,自立,*,*,五段・ラ行,連用タ接続,ある,アッ,アッ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。 記号,句点,*,*,*,*,。,。,。
EOS
(サンプルそのまま)
もうこれを使ったら良いんじゃないかなあと思います。
が!やっぱり実際に様々な文言をいれていくと、そういう分け方になるのねーだったり、それはちょっといらないんだよなー、というパターンは発生します。なんていうんでしょうか、特徴語抽出とか、なんかそういうときにちょっと不便になるんですよきっと。 そんなころに、形態素解析した後に品詞を見て結合処理をすると良い、と風の噂で聞いたので試しました。
※ここからは都合によって mecab-ipadic を使っています。 neologd の結果ではないので注意。※
まずは結合処理無しのものを見てみましょう。
Target: 「3Dブロー方式」でスピード乾燥。のびる、ひろがる「ふとん乾燥アタッチメント」
[ ' BOS/EOS *',
'「 記号 括弧開',
'3 名詞 数',
'D 名詞 一般',
'ブロー 名詞 一般',
'方式 名詞 一般',
'」 記号 括弧閉',
'で 助詞 格助詞',
'スピード 名詞 一般',
'乾燥 名詞 サ変接続',
'。 記号 一般',
' BOS/EOS *',
' BOS/EOS *',
'のびる 動詞 自立',
'、 記号 一般',
'ひろがる 動詞 自立',
'「 記号 括弧開',
'ふとん 動詞 自立',
'乾燥 名詞 サ変接続',
'アタッチメント 名詞 一般',
'」 記号 括弧閉',
' BOS/EOS *']
短い文章ですが、「3」「D」と分かれていたり、「3」「D」「ブロー」「方式」はくっついていたほうがいいんじゃないかなあ、などなど。もうちょっと、なあ、という部分がありそうです(主観) こういったものをはじめ、色々な文章をいれつつ、こっちのほうがいいなー、これはためだなー、などと、目視で結合処理を増やしていったロジックがこれです。
形態素解析の結果を1語ずつループし、以下の処理をしていく
- ()[]’" が出てきたら
- 次のループへ※
- 記号が出てきたら
- ただし、今が半角で構成されている、かつ、1つ前も半角であれば
- 1つ前に今の語を結合
- 次のループへ
- 次のループへ※
- ただし、今が半角で構成されている、かつ、1つ前も半角であれば
- 今が半角で構成されている、かつ、1つ前も半角であれば
- 1つ前に今の語を結合する
- 次のループへ
- 1つ前が接頭詞なら
- 1つ前に今の語を結合する
- 品詞を今のものに置き換える
- 次のループへ
- 今が接尾なら
- 1つ前に今の語を結合する
- 次のループへ
- 1つ前が名詞、かつ、形容動詞語幹なら
- 今が助詞、助動詞、副詞、非自立のいずれか
- 次のループへ※
- 新しい語として追加
- 次のループへ
- 今が助詞、助動詞、副詞、非自立のいずれか
- 今が非自立なら
- 1つ前に結合する
- 次のループへ
- 今が終助詞なら
- 1つ前に結合する
- 次のループへ
- 1つ前が名詞、かつ、今が名詞なら
- 1つ前が接尾なら
- 新しい語として追加
- 次のループへ
- 今が数なら
- 新しい語として追加
- 次のループへ
- 1つ前に結合する
- 次のループへ
- 1つ前が接尾なら
- 1つ前が動詞または助動詞、かつ、今が動詞または助動詞なら
- 1つ前に結合する
- 次のループへ
- 1つ前が動詞または助動詞、かつ、今が助詞なら
- 1つ前に結合する
- 次のループへ
- 1つ前が形容詞、かつ、今が助動詞なら
- 1つ前に結合する
- 次のループへ
- 1つ前が助詞類接続、かつ、今が動詞なら
- 1つ前に結合する
- 次のループへ
- 1つ前が助詞、かつ、今が助詞なら
- 1つ前に結合する
- 次のループへ
- 今が接頭詞、あるいは、助詞類接続、あるいは、数なら
- 新しい語として追加
- 次のループへ
- 今が助詞、あるいは、助動詞、あるいは、非自立なら
- 次のループへ※
- 新しい語として追加
- 次のループへ
それではこのロジックで同じ文章を試してみましょう。
Target: 「3Dブロー方式」でスピード乾燥。のびる、ひろがる「ふとん乾燥アタッチメント」
[ '3Dブロー方式 名詞 数',
'スピード乾燥 名詞 一般',
'のびる 動詞 自立',
'ひろがる 動詞 自立',
'ふとん 動詞 自立',
'乾燥アタッチメント 名詞 サ変接続']
結合したので、品詞や種類などはもう完全に意味をなしていませんが、先ほどよりも、なんだか自然な感じで単語が取れているのではないでしょうか?(主観)
というわけで結合するとよくなりそうだよ、って紹介でした。