「わしが博士じゃよ」「私、中国人アルよ」といった表現を役割語と言います。
自然言語の形態素解析を利用すると、これを機械で変換できるようになります。
- 文章を品詞や単語に分解、分析する
- 特定の品詞や単語に変更を加える
こうすることで江戸っ子言葉にや関西弁など、特徴ある変化をさせられることができます。
ドラゴンボールでおなじみ、孫悟空の口調に変換してみます。
下記の書籍を参考にしています。
Janomeで形態素解析
紙面中に形態素解析のJanomeを使って形態素解析をするサンプルがあります。
# Janomeのロード
from janome.tokenizer import Tokenizer
# Tokenizerインスタンスの生成
tokenizer = Tokenizer()
# 形態素解析の実施
tokens = tokenizer.tokenize("肉を食べよう!")
# 解析結果の出力
for token in tokens:
print(token) # 各単語の全情報
# print(token.surface) #元の単語そのまま ⇒ 出力を省略
print(token.reading) # ヨミガナ
print(token.base_form) # (動詞などの)原形
print(token.part_of_speech) # 品詞情報
print(token.part_of_speech.split(',')) # 品詞情報をカンマで区切り、リスト形式に加工
print(token.part_of_speech.split(',')[0]) # [0]でリストの先頭の要素を参照
print("-----") # わかりやすいように単語ごとに仕切りを入れる
実行結果
肉 名詞,一般,*,*,*,*,肉,ニク,ニク
ニク
肉
名詞,一般,*,*
['名詞', '一般', '*', '*']
名詞
-----
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
ヲ
を
助詞,格助詞,一般,*
['助詞', '格助詞', '一般', '*']
助詞
-----
食べよ 動詞,自立,*,*,一段,未然ウ接続,食べる,タベヨ,タベヨ
タベヨ
食べる
動詞,自立,*,*
['動詞', '自立', '*', '*']
動詞
-----
う 助動詞,*,*,*,不変化型,基本形,う,ウ,ウ
ウ
う
助動詞,*,*,*
['助動詞', '*', '*', '*']
助動詞
-----
! 記号,一般,*,*,*,*,!,!,!
!
!
記号,一般,*,*
['記号', '一般', '*', '*']
記号
-----
冊子中ではこの形態素解析結果を利用し、例えば助詞を除いてカタカナにすることで
「これで今日からみんな原始人になる」⇒「コレ キョウ ミンナ ゲンシ ジン ナル」
とする原始人ジェネレーターを作成しています。
Janomeで形態素解析(けぇてぇそけぇせき)
それなら形態素解析を使って、あの特徴のある悟空の言葉にも変換できるかなと考えたところ、すでに作成されて試せるWebサイトがありました。
悟空語ジェネレーター
Python(ぺぇそん)のライブラリ(れぇぶらり)にした方もいて、その実装も書籍中で紹介されてっぞ。しっかしこの悟空語ジェネレーター確かにすげぇんだけど、ちょっと不備があっぞ。
「おはようございます。私は悟空です。」
「案外簡単に戦闘民族になれてすごいぞ」を変換してみます。
!pip install janome==0.3.7
!pip install pykakasi==0.94
!pip install semidbm==0.5.1
!pip install six==1.12.0
!pip install gokulang==1.0.2
from gokulang.gokulang import GokuLang
g = GokuLang()
print(g.translate('おはようございます。私は悟空です。'))
print(g.translate('案外簡単に戦闘民族になれてすごいぞ'))
実行結果
おはようこぜぇます。私は悟空です。
あんげぇ簡単に戦闘民族になれてすげぇぞ
2文目は良い感じですが1文目は違う、こうじゃない。笑
悟空語ジェネレーターZ
そこで特定の言葉を置換する機能も追加してみます。品詞に対する操作で語尾・語感を変更し、特定の単語を置換する。この変換テーブルを充実させるほど変換精度を上げられるはず。
大袈裟ですが、悟空語ジェネレーターZと呼ぶことにします。
# 変換用の辞書定義 悟空語ジェネレーターZ
from gokulang.gokulang import GokuLang
g = GokuLang()
goku_dict = {
"おはようございます" : "おっす",
"おはよう" : "おっす",
"こんにちは" : "おっす",
"こんばんは" : "おっす",
"私は" : "オラ",
"です" : "",
"。" : "!",
}
def gokuz(input_str):
result_str = input_str
for key,value in goku_dict.items():
result_str = result_str.replace(key, value)
result_str = g.translate(result_str)
return result_str
print(gokuz('おはようございます。私は悟空です。'))
print(gokuz('案外簡単に戦闘民族になれてすごいぞ'))
print(gokuz('汚い花火だ'))
print(gokuz('パイソンに慣れたか?今のお前なら大丈夫だ'))
実行結果
おっす!オラ悟空!
あんげぇ簡単に戦闘民族になれてすげぇぞ
きたねぇ花火だ
ぺぇそんに慣れたか?今のおめぇならでぇじょうぶだ
形態素解析で語尾・語感を変更し、特定の単語を置換することでさらに変換精度を上げる。
その変換する単語を充実させていけば、変換精度は上がっていくはず。
おもしろい。ワクワクすっぞ。
この書籍の第二章を利用しました。
この記事では形態素分析を使って文章の加工にトライしました。
下記の記事では同じく形態素分析を使って、意味の評価にトライしています。
コメント