読者です 読者をやめる 読者になる 読者になる

かわみのメモ帳

趣味に関するメモを書いていきます。

普通の文章から川柳を自動で見つけよう その1(概要編)

川柳探索

おはようございます。かわみです。投稿日を見た人は爆発
突然ですが、みなさん川柳作ってますか? 私は作ってません。
川柳とはざっくりいえば「五・七・五」で展開される言語表現ですよね。語感によっては「五・八・六」でも成り立つかもしれませんが。 川柳を作る時には、意図的に「五・七・五」を作り出しますが、意図しない場面で「五・七・五」が成立してしまう場合もあります。 たとえば

このアニメ作画崩壊しすぎでしょ

という文。一見、普通の文に思えますが、実は「五・七・五」になっています。

このアニメ 作画崩壊 しすぎでしょ

かわみ

こうしてみると、名句ですね。

もしかすると、このような無意識下での日常文の川柳化現象が結構起きてるのかもしれません。そうとなったら、いろんな文から川柳化している文を自動で見つけたくなりますよね、ね。

川柳とは

川柳の説明は前述しましたが、システムで扱うための定義を改めてしてみましょう。
まず川柳の「五・七・五」ですが、5文字・7文字・5文字ではなく、正しくは5モーラ・7モーラ・5モーラです。
音節……と言いたかったのですが、日本語の発音はモーラで数えられるのです。モーラに関してはWikipediaの説明が分かりやすいかも。ってか俳句のことがそのまま載ってるし。
モーラ - Wikipedia

当たり前のことではありますが、プログラム内部の処理では必須となる考え方ですね。
よって、端的に言えば5モーラ・7モーラ・5モーラを見つければ良いのです。
余談になりますが、季語が入っていて"切れ"があれば俳句です。これを応用すれば俳句も探せる。

「5モーラ・7モーラ・5モーラ」を見つけるということ

どうやって文をモーラに変換するのでしょうか。またどうやって単語単位でモーラに変換するのでしょうか。
世の中には「形態素解析」という技術があり、文を「形態素」という単位に分けることができます。 これに関しては、詳しくは以下をご覧になって試してみてください。
Atilika - Applied Search Innovation

では、「このアニメ作画崩壊しすぎでしょ」を形態素に分割したら、[5モーラの形態素・7モーラの形態素・5モーラの形態素]というパターンが見つかるでしょうか。 「このアニメ」「作画崩壊」「しすぎでしょ」の3つに分割できれば良いんですけどね。そうはいかない。

Surface form Part-of-Speech Base form Reading Pronunciation
この 連体詞,,,* この コノ コノ
アニメ 名詞,一般,, アニメ アニメ アニメ
作画 名詞,サ変接続,, 作画 サクガ サクガ
崩壊 名詞,サ変接続,, 崩壊 ホウカイ ホーカイ
動詞,自立,, する
すぎ 動詞,非自立,, すぎる スギ スギ
でしょ 助動詞,,,* です デショ デショ

Pronunciationを見てもそれぞれのモーラは、2-3-3-4-1-2-2。全然川柳っぽくない。
じゃあ、そのままは見ないようにしましょう。一つの形態素ではダメでも、いくつか合体すれば何とかなるかもしれません。3本の矢みたいな。正義は勝つ、みたいな。
そもそも人間が見てる単位にすれば良いのです。

  • 「この」+「アニメ」⇒「このアニメ」
  • 「作画」+「崩壊」⇒「作画崩壊
  • 「し」+「すぎ」+「でしょ」⇒「しすぎでしょ」

つまり、何個かの形態素のモーラの数を合体させたとき、グループにし、グループ1とグループ2とグループ3がそれぞれ5モーラ・7モーラ・5モーラになれば良いのです。たぶん。

まとめると、グループnのモーラの数をXnとし、1個以上の形態素のモーラの数を足し合わせてグループを形成し、X1=5、X2=7、X3=5となるようなものを見つければ良いのです。

もっとシステマチックに考える

コーディングできそうな形に考えていきましょう。もう十分コーディングできるという方は作ってください。
ある1文が川柳化しているかに関する判定は、先に述べた手法で十分可能と思われます。ただし今回は文章の中から川柳を見つけ出すのです。たとえば1文の中で何個も川柳を見つけ出すのが目的なのです。
ある1文が川柳であるかは、文中に川柳を含むかではなく、それが完全に一致するかということです。一方で長文の場合、完全一致ではなく、部分的に川柳が見つかる可能性があります。このとき、形態素の合体がおかしなものだと川柳だと言えません。日本語の文だと言えません。非文です。文に非ず。
たとえば次の文を見てみましょう。

制作スケジュールが破綻してたこのアニメ、私は見てましたよ。

この文に、先に述べたアルゴリズムを適用していきます。

形態素分割すると以下のようになります。

Surface form Part-of-Speech Base form Reading Pronunciation
制作 名詞,サ変接続,, 制作 セイサク セイサク
スケジュール 名詞,一般,, スケジュール スケジュール スケジュール
助詞,格助詞,一般,*
破綻 名詞,サ変接続,, 破綻 ハタン ハタン
動詞,自立,, する
動詞,非自立,, てる
助動詞,,,*
この 連体詞,,,* この コノ コノ
アニメ 名詞,一般,, アニメ アニメ アニメ
記号,読点,,
名詞,代名詞,一般,* ワタシ ワタシ
助詞,係助詞,,
動詞,自立,, 見る
助詞,接続助詞,,
まし 助動詞,,,* ます マシ マシ
助動詞,,,*
助詞,終助詞,,
記号,句点,,

先頭の形態素⇒「制作」

  • 制作 ⇒ 4
  • 制作 + スケジュール ⇒ 9 …X1=5を超えたのでアウト

先頭の形態素⇒「スケジュール」

  • スケジュール ⇒ 5 …X1=5なのでグループ1認定。

先頭の形態素⇒「が」

  • が ⇒ 1
  • が + 破綻 ⇒ 4
  • が + 破綻 + し ⇒ 5
  • が + 破綻 + し + て ⇒ 6
  • が + 破綻 + し + て + た ⇒ 7 …X2=7なのでグループ2認定。

先頭の形態素⇒「この」

  • この ⇒ 2
  • この + アニメ ⇒ 5 …X3=5なのでグループ3認定。

無事、一つ目の川柳が見つかりました。まあ良いでしょう。

スケジュール が破綻してた このアニメ

かわみ

一つ目の川柳が「スケジュール」から始まっていたので、一つずらして「が」から探索を続けます。

先頭の形態素⇒「が」

  • が ⇒ 1
  • が + 破綻 ⇒ 4
  • が + 破綻 + し ⇒ 5 …X1=5なのでグループ1認定。

先頭の形態素⇒「て」

  • て ⇒ 1
  • て + た ⇒ 2
  • て + た + この ⇒ 4
  • て + た + この + アニメ ⇒ 7 …X2=7なのでグループ2認定。

先頭の形態素⇒「、」

  • 、 ⇒ 0
  • 、 + 私 ⇒ 3
  • 、 + 私 + は ⇒ 4
  • 、 + 私 + は + 見 ⇒ 5 …X3=5なのでグループ3認定。

二つ目の川柳が見つかりました。句読点などの記号は基本的に発音しないので取り除くことにしましょう。

が破綻し てたこのアニメ 私は見

作者不詳

ダメですね。日本語の文になっていません。文に非ず。

さて、この問題をどう解決できるでしょうか。今回はここまで。

次回予告

長文の中で形態素のモーラの数を合体させる方法を用いると、非文になってしまうことがあります。この問題を解決できそうな方法をご紹介しましょう。
ほかにも文字をどのようにモーラに変換するのかについてもご紹介しましょう。Wikipediaに答えが書いてあるけどね。 既にお分かりの方は作ってください。次回に続く。