azu/text-map-kuromoji: テキストを形態素解析した結果とテキストの関係をビジュアライズするエディタというツールを作った話。

くだけた表現を高精度に解析するための正規化ルール自動生成手法という論文誌では、「ヵゎぃぃ」,「ゎた Uゎ」みたいな普通の形態素解析では未知語として検出されるものをどうやって正規化していくかという話が書かれていました。

これを読んでいて面白かったのは形態素解析をした結果の未知語となった部分と穴埋め的にパターンを作って、そのパターンにマッチする同じようなテキストを探すというアプローチでした。

プログラミング言語と違って、大抵の自然言語パーサはパース失敗ではなく、単なる未知な言葉として検出されます。 また、その未知な言葉は常に増えていて、さきほどのくだけた表現を高精度に解析するための正規化ルール自動生成手法によると手動では登録できない増加量らしいです。

著者らの経験では,1 人月あたり約 3 万種類の未知語登録が可 能であるのに対し,ブログ 600 万文を著名な形態素解析器 MeCab 3) を用いて解析したと ころ,約 65 万種類の未知語が検出されたことから,ブログ文書のくだけた表現を正しく解 析することは困難といえる.

この辺のスラング的な単語もクローリングしたデータから辞書を作ることで扱える量が多い辞書としてmecab-ipadic-NEologdが有名です。

で、話を戻して形態素解析をした結果の未知語となるパターンってどれぐらいあるのかなーと思いました。 普通に形態素解析した結果を見ればいいのですが、それは品詞付きの情報が並ぶだけだったり、JSONだったりして、テキストのこの部分が未知語というのがあま見やすくはありませんでした。

今日もしないとね。
今日    名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
も      助詞,係助詞,*,*,*,*,も,モ,モ
し      動詞,自立,*,*,サ変・スル,未然形,する,シ,シ
ない    助動詞,*,*,*,特殊・ナイ,基本形,ない,ナイ,ナイ
と      助詞,接続助詞,*,*,*,*,と,ト,ト
ね      助詞,終助詞,*,*,*,*,ね,ネ,ネ
。      記号,句点,*,*,*,*,。,。,。

入力されたテキストと特定の位置に関する情報をビジュアライズするパターンについてはSourceMapを調べていたときにsource-map-visualizationというサイトがあるのを思い出しました。

sourcemap

これの形態素解析版があると良さそうと思いました。

ここで、既にJavaScriptとそのパース結果からECMAScriptのバージョンをToken毎に割り出すツールを作ってたのを思い出しました。

image

これをforkしてkuromoji.jsで形態素解析してその結果をビジュアライズするものを作りました。

それで目的だった壊れた日本語は未知語として検出されるのかを確かめてみましたが、てにをはを間違えただけとかその程度だとやっぱり未知語として検出されないということがわかりました。

一方、ローマ字入力のIME特有のtypoはアルファベットが不自然に混ざるからか未知な言葉として検出されやすくかったです(論文誌の形状が似てる言葉もこういうタイプ)

やっぱり形態素解析に失敗するパーサの必要性を感じました。