LoginSignup
2
1

More than 1 year has passed since last update.

自然言語処理ツールで寿限無を要約してみた

Posted at

寿限無という落語をご存知でしょうか。子供の長寿を願って、やたらと長い名前をつけるお話です。

寿限無のフルネームは以下になります。ふりがなのない、ニコニコ大百科の記述をコピペしました。

寿限無寿限無五劫の擦り切れ海砂利水魚の水行末雲来末風来末食う寝る処に住む処やぶら小路の藪柑子パイポパイポパイポのシューリンガンシューリンガンのグーリンダイグーリンダイのポンポコピーのポンポコナーの長久命の長助

「寿限無(ことぶきかぎりなし)」このシンプルな名前が人の記憶に留めたのではないでしょうか。

僕は他人から「話が長い」「まとめてくれ」とよく言われます。ここは一つPCの力を借りてみます。

まず、summpyという文書要約パッケージをインストールします。

summpyはリクルートが公開したpython2.7用のコードでした。

python2系のコードをpython3系で実行しようとすると往々にしてエラーが発生します。僕の実行環境もpython3系なのでpython3系にない関数が存在しないなどのエラーが起きました。そこでエラー部分を3系に書き直すことも試しましたが、実行できませんでした。

そこで、3系でも動くように書き直されたコードを活用いたしました。

僕が参考にしている、「実践で学ぶ機械学習活用ガイド」の著者である吉崎亮介さんがMIT licenseで公開されていたので、こちらでもライセンスをコピペします。

The MIT License (MIT)
Copyright © 2015 Recruit Technologies Co.,Ltd.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

早速、ターミナルからgitのコードを使用するフォルダにダウンロードしてから、JupyterNotebookで下記のコードによりインポートします。

$ git clone https://github.com/kikagaku/summpy.git
qiita.ipynb
from summpy.summpy.lexrank import summarize

次に、jugemを定義します。文意の途切れ目で「。」を打っているのは、「、」や「.」で区切っても、文(意)の区切りと認識されず、summpyの機能である「重要な文を取捨選択する」機能が働かなかったためです。

qiita.ipynb
jugemu = '寿限無。寿限無。五劫の擦り切れ。海砂利水魚の。水行末雲来末風来末。食う寝る処に住む処。やぶら小路の藪柑子。パイポパイポパイポのシューリンガン。シューリンガンのグーリンダイ。グーリンダイのポンポコピーのポンポコナーの。長久命の長助'

最後に、要約後の文の数(sent_limit)を指定して、下記のコードを実行すると、要約ができます。

qiita.ipynb
sentences, debug_info = summarize(
    jugemu, sent_limit=1, continuous=True, debug=True
)
qiita.ipynb
sentences

実行結果は下の画像の通りです。「寿限無」の一文が「重要」と認識され、無事に要約されました。

スクリーンショット 2022-08-24 15.58.39.png

おそらく、冒頭かつ二回繰り返される単語だったので、重要と判断されたのだと考えられます。

必ずしも「寿限無」が抽出されるわけではなく、例えば、jugemuの冒頭での「寿限無。寿限無。」を「寿限無寿限無。」と一つにまとめて、抽出する文の数を三文にすると、以下のような結果になります。

スクリーンショット 2022-08-24 15.59.59.png

ターミナルで「Janome」をインストールして、下記のコードを実行すると形態素解析もできます。

上述した教科書のサンプルコードをメインで、他の記事なども参考にしました。

$ pip3 install  -U janome
qiita.ipynb
from janome.tokenizer import Tokenizer
tagger = Tokenizer()

jugemu = '寿限無。寿限無。五劫の擦り切れ。海砂利水魚の。水行末雲来末風来末。食う寝る処に住む処。やぶら小路の藪柑子。パイポパイポパイポのシューリンガン。シューリンガンのグーリンダイ。グーリンダイのポンポコピーのポンポコナーの。長久命の長助'
results = tagger.tokenize(jugemu)
results
qiita.ipynb
for result in results:
    print(result)

出力結果は以下のようになりました。

寿 名詞,一般,,,,,寿,コトブキ,コトブキ
限 名詞,接尾,一般,,,,限,ゲン,ゲン
無 名詞,一般,
,,,,無,ム,ム
。 記号,句点,
,,,,。,。,。
寿 名詞,一般,
,,,,寿,コトブキ,コトブキ
限 名詞,接尾,一般,
,,,限,ゲン,ゲン
無 名詞,一般,,,,,無,ム,ム
。 記号,句点,,,,,。,。,。
五 名詞,数,,,,,五,ゴ,ゴ
劫 名詞,一般,,,,,劫,コウ,コー
の 助詞,格助詞,一般,,,,の,ノ,ノ
擦り切れ 動詞,自立,
,,五段・ラ行,命令e,擦り切る,スリキレ,スリキレ
。 記号,句点,
,,,,。,。,。
海 名詞,一般,
,,,,海,ウミ,ウミ
砂利 名詞,一般,
,,,,砂利,ジャリ,ジャリ
水魚 名詞,一般,
,,,,水魚,スイギョ,スイギョ
の 助詞,連体化,
,,,,の,ノ,ノ
。 記号,句点,
,,,,。,。,。
水 名詞,一般,
,,,,水,ミズ,ミズ
行末 名詞,一般,
,,,,行末,ギョウマツ,ギョーマツ
雲来 名詞,固有名詞,人名,名,
,,雲来,ウンライ,ウンライ
末 名詞,接尾,副詞可能,
,,,末,マツ,マツ
風 名詞,接尾,一般,,,,風,フウ,フー
来 名詞,接尾,副詞可能,
,,,来,ライ,ライ
末 名詞,接尾,副詞可能,,,,末,マツ,マツ
。 記号,句点,
,,,,。,。,。
食う 動詞,自立,
,,五段・ワ行促音便,基本形,食う,クウ,クウ
寝る 動詞,自立,
,,一段,基本形,寝る,ネル,ネル
処 名詞,一般,
,,,,処,トコロ,トコロ
に 助詞,格助詞,一般,
,,,に,ニ,ニ
住む 動詞,自立,,,五段・マ行,基本形,住む,スム,スム
処 名詞,サ変接続,,,,,処,ショ,ショ
。 記号,句点,,,,,。,。,。
やぶら 動詞,自立,,,五段・ラ行,未然形,やぶる,ヤブラ,ヤブラ
小路 名詞,一般,,,,,小路,コウジ,コージ
の 助詞,連体化,,,,,の,ノ,ノ
藪 名詞,固有名詞,地域,一般,,,藪,ヤブ,ヤブ
柑子 名詞,一般,,,,,柑子,コウジ,コージ
。 記号,句点,,,,,。,。,。
パイポパイポパイポ 名詞,一般,,,,,パイポパイポパイポ,,
の 助詞,連体化,,,,,の,ノ,ノ
シューリンガン 名詞,一般,,,,,シューリンガン,,
。 記号,句点,,,,,。,。,。
シューリンガン 名詞,一般,,,,,シューリンガン,,
の 助詞,連体化,,,,,の,ノ,ノ
グーリンダイ 名詞,一般,,,,,グーリンダイ,,
。 記号,句点,,,,,。,。,。
グーリンダイ 名詞,一般,,,,,グーリンダイ,,
の 助詞,連体化,,,,,の,ノ,ノ
ポンポコピー 名詞,一般,,,,,ポンポコピー,,
の 助詞,連体化,,,,,の,ノ,ノ
ポンポコナー 名詞,一般,,,,,ポンポコナー,,
の 助詞,連体化,,,,,の,ノ,ノ
。 記号,句点,,,,,。,。,。
長久 名詞,一般,,,,,長久,チョウキュウ,チョーキュー
命 名詞,一般,,,,,命,イノチ,イノチ
の 助詞,連体化,,,,,の,ノ,ノ
長助 名詞,固有名詞,人名,名,,,長助,チョウスケ,チョースケ

良い感じで分解でいてますが、「寿限無」がまとまりとしてではなく、「寿」「限」「無」と一字ずつに分解されているのが良い味を出していますね。

以上でコードの説明を終えます。以下は落語についてです。

最後に立川談志さんの落語「寿限無」の音声を共有します。

この記事を書く過程で寿限無のオチなどのストーリーを確認するために落語家の動画を色々見ましたが、やはり談志さんの話し方は面白いですね。「寿限無は前座としての基本だから面白くない」と音声の中でおっしゃっておりますが、全然そんなことなくて、繰り返し「寿限無」のフルネームを言うたびに笑ってしまいました。

最近の僕は話の面白い人に憧れていたのですが、談志さんの話し方は、表面的な話術という感じではなく人物それ自体の面白さ・奥深さに由来してるように感じられました。落語はほとんど詳しくなかったのであまり語れませんが、wikipediaを読んでいたところ、発言録の中で、

落語とは、人間の業の肯定である

と引用されており、イリュージョン落語の境地に到達していたという部分で、只者ではなかったのだなと伺われたのでした。

「子供に長生きしてほしい」という親の願いも「人間は必ず死ぬ」という絶対真理からすれば業であり、俺の屍を超えてゆけのエンディングロールでもありましたが、人生を要約するなら…

殺して、生きて、生まれて、死んで…

話術の向上と人間理解のためにも「湯神くんには友達がいない」の湯神くん並みに落語を聴きまくろうと思ったのでした。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1