PRUV開発1周年

LINEで送る
Pocket

1年前の2016年2月4日、オンライン文章校正支援サービス「PRUV」の開発がスタートしました。最初のコードはHTMLフォームによる入力機能もなく、コード内に直接書き込んだ文字列を形態素解析するというものでした。

形態素解析とは、文字列(文)を単語に分割して単語の品詞を判定する処理です。例えば、「今日は晴れだ」という文を、「今日」(名詞)、「は」(助詞)、「晴れ」(名詞)、「だ」(助動詞)というデータにします。

それから少しずつ機能を加えて、4月7日にはほぼ現在のPRUVの原型となるシステムになっていたようです。HTMLフォームで入力を受け付け、文章を形態素解析し、辞書を基に正誤チェックして結果を出力する。この一応動作するバージョンが、テストサーバに残っていました。

PRUV 2016/4/7版

当時は「レーベンシュタイン距離」を使って表記ゆれを検出するテストをしていました。レーベンシュタイン距離とは、2つの文字列の類似度を数値化する手法です。これを使うと何がうれしいのか。

ある単語が「正しい」ことを調べるのは簡単です。正しい単語を登録した辞書と、文章中の単語が一致するかどうかで確かめられます。しかし、この方法では、単語「AAB」は単語「AAA」の間違いなのか、単語「AAB」が別に存在するのかは分かりません。

そこで、「間違いの辞書」を用意することになります。「AABは誤り」と定義すれば、「AAB」は間違いであると分かります。では、「AAC」は? 「AAD」は?。

文章中の単語と辞書を単純にマッチングさせるだけだと、どちらの方法を使うにせよ思い付く限りのパターンを辞書に登録しなければなりません。

そこでレーベンシュタイン距離です。2つの文字列がどれくらい似ているのかを数値化するので、類似度による判定が可能になります。類似度1.0(完全一致)であればOK。逆に類似度が0.5以下(全然似ていない)であれば、別の単語であると見なして他の辞書登録語との比較を開始。類似度が0.6~0.9であれば、似ているので誤り・表記ゆれの可能性があるとして指摘します。

例えば辞書に「AAA」という単語がある場合、文章中に「AAB」があると「もしかしてAAAのこと?」と類推できるのです。「AABはAAAの誤り」という定義を辞書に登録する必要はなくなります。

ただし、片仮名語ではこれがうまくいきません。「セキュリティ」と「セキュリティー」はどちらが正しい表記でしょうか。それは人、組織ごとに変わるので、汎用的な辞書が作れないのです。このような理由から、現在のPRUVにはレーベンシュタイン距離を利用した機能は実装されていません。手法自体は確立しているので、いつか何らかの形で活用できればと思ってはいるのですが……。

PRUVはまだ始まったばかり。5年後には、もう少しマシになっているかもしれません。10年後は、AIを使ったシステムが現れていてPRUVの出る幕はなくなっていることでしょう。