Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

文字列を置換し会話を関西風に変える

 小説の一部が保存されているテキストファイルを読み出し、特定の文字列を置換することで関西風(?)に変換します。また正規表現を用いた置換も行います。

やること
  • テキストファイルを読み出し、文字列として変数に代入
  • 特定の文字列を別の文字列に置換する
使った関数・メソッド
  • with open() : ファイルを開く。withキーワードと共に用いることで ファイルのクローズが自動で行われる
  • f.read() : ファイルの内容をすべて文字列として読み出す
  • re.sub() : 正規表現を用いた文字列の置換
環境
  • windows10 home
  • Anaconda 3/ jupyter notebook 5.6.0
  • Python 3.7.0
準備

青空文庫に収蔵されている江戸川乱歩著「おれは二十面相だ」から一部を抜粋し、ファイル名 おれは二十面相だ(抜粋).txt としてjupyter notebookファイル(***.ipynb)と同じディレクトリに保存しました。

「その大学生は、だれもしらないうちに、出ていったのではありませんか。」
 明智がいいますと、松波博士は、頭をふって、
「いや、そんなことはできません。赤井という、年よりの小使が、ちゃんと見はり番をしていたのですからね。赤井君は、たった一つのドアの外に立っていて、一度も、動かなかったのです。」
「窓から出ることはできませんか。」
「窓は五つありますが、みんな、げんじゅうに、鉄ごうしがはまっていて、ぜったいに出られません。そのほか、部屋の中には、どこにも、かくし戸なんかないのです。ぬけ出すすきまはぜんぜんないのです。」
「そのエジプトの部屋には、いろいろなものがおいてあるのでしょう。そういうものの中に、かくれることはできませんか。たとえば、ミイラの棺なんか、人間がかくれようとおもえば、かくれられるのでしょう。」
「むろん、ふたをあけてしらべました。しかし、棺の中にはミイラのほか、なにもはいっていなかったのです。」
「これは密室のなぞですね。まったく出入り口のない部屋から、どうして人間が消えてしまったかというなぞですね。エジプトの巻き物ののろいなんてことは、しんじられません。これにはなにか、秘密のわけがあるのです。その赤井という小使さんは、うそをいっているのではないでしょうね。」
「いや、うそはいえないのです。」
「えっ、それはどうしてですか。」
「わたしが、この目で見ていたからです。」

おれは二十面相だ(抜粋).txt

コード
with open('おれは二十面相だ(抜粋).txt') as f:  # ファイルのオープン
    oreha = f.read()  # ファイルを文字列として読み、orehaに代入

#文字列 'です。' を 'ですわ。' に置換する   
oreha_kansai = oreha.replace('です。', 'ですわ。')
              
print(oreha_kansai)
実行結果

全ての 'です。' が 'ですわ。' に置換されました。。

「その大学生は、だれもしらないうちに、出ていったのではありませんか。」
 明智がいいますと、松波博士は、頭をふって、
「いや、そんなことはできません。赤井という、年よりの小使が、ちゃんと見はり番をしていたのですからね。赤井君は、たった一つのドアの外に立っていて、一度も、動かなかったのですわ。」
「窓から出ることはできませんか。」
「窓は五つありますが、みんな、げんじゅうに、鉄ごうしがはまっていて、ぜったいに出られません。そのほか、部屋の中には、どこにも、かくし戸なんかないのですわ。ぬけ出すすきまはぜんぜんないのですわ。」
「そのエジプトの部屋には、いろいろなものがおいてあるのでしょう。そういうものの中に、かくれることはできませんか。たとえば、ミイラの棺なんか、人間がかくれようとおもえば、かくれられるのでしょう。」
「むろん、ふたをあけてしらべました。しかし、棺の中にはミイラのほか、なにもはいっていなかったのですわ。」
「これは密室のなぞですね。まったく出入り口のない部屋から、どうして人間が消えてしまったかというなぞですね。エジプトの巻き物ののろいなんてことは、しんじられません。これにはなにか、秘密のわけがあるのですわ。その赤井という小使さんは、うそをいっているのではないでしょうね。」
「いや、うそはいえないのですわ。」
「えっ、それはどうしてですか。」
「わたしが、この目で見ていたからですわ。」


もう少し置換する文字列を増やしてみます。.replace()を連結することで、複数の置換操作が実行できます。

コード
with open('おれは二十面相だ(抜粋).txt') as f:  # ファイルのオープン
    oreha = f.read()  # ファイルを文字列として読み、orehaに代入

#それぞれ文字列を置換する    
oreha_kansai = (oreha
                .replace('です。','ですわ。')
                .replace('ません','まへん')
                .replace('のです。','んやわ。')
                .replace('のでしょう。','やろ。'))

print(oreha_kansai)
実行結果

「その大学生は、だれもしらないうちに、出ていったのではありまへんか。」
 明智がいいますと、松波博士は、頭をふって、
「いや、そんなことはできまへん。赤井という、年よりの小使が、ちゃんと見はり番をしていたのですからね。赤井君は、たった一つのドアの外に立っていて、一度も、動かなかったのですわ。」
「窓から出ることはできまへんか。」
「窓は五つありますが、みんな、げんじゅうに、鉄ごうしがはまっていて、ぜったいに出られまへん。そのほか、部屋の中には、どこにも、かくし戸なんかないのですわ。ぬけ出すすきまはぜんぜんないのですわ。」
「そのエジプトの部屋には、いろいろなものがおいてあるやろ。そういうものの中に、かくれることはできまへんか。たとえば、ミイラの棺なんか、人間がかくれようとおもえば、かくれられるやろ。」
「むろん、ふたをあけてしらべました。しかし、棺の中にはミイラのほか、なにもはいっていなかったのですわ。」
「これは密室のなぞですね。まったく出入り口のない部屋から、どうして人間が消えてしまったかというなぞですね。エジプトの巻き物ののろいなんてことは、しんじられまへん。これにはなにか、秘密のわけがあるのですわ。その赤井という小使さんは、うそをいっているのではないでしょうね。」
「いや、うそはいえないのですわ。」
「えっ、それはどうしてですか。」
「わたしが、この目で見ていたからですわ。」


正規表現(文字列の集合を一つの文字列で表現する方法)を用いる例です。.(ドット)は改行以外の任意の文字に対応します。
re.sub('...。', 'ンゴ。'
とすることで、'せんか。'、'のです。'のように該当する文字列をすべて'ンゴ。' に置換できます。

コード
import re  # reのインポート

with open('おれは二十面相だ(抜粋).txt') as f:  # ファイルのオープン
    oreha = f.read()  # ファイルを文字列として読み、orehaに代入

#文字列 '...。' を 'ンゴ。' に置換する   
oreha_nanj = re.sub('...。', 'ンゴ。', oreha)
              
print(oreha_nanj)

実行結果

なんJっぽくなりました。

「その大学生は、だれもしらないうちに、出ていったのではありまンゴ。」
 明智がいいますと、松波博士は、頭をふって、
「いや、そんなことはできンゴ。赤井という、年よりの小使が、ちゃんと見はり番をしていたのですンゴ。赤井君は、たった一つのドアの外に立っていて、一度も、動かなかったンゴ。」
「窓から出ることはできまンゴ。」
「窓は五つありますが、みんな、げんじゅうに、鉄ごうしがはまっていて、ぜったいに出られンゴ。そのほか、部屋の中には、どこにも、かくし戸なんかないンゴ。ぬけ出すすきまはぜんぜんないンゴ。」
「そのエジプトの部屋には、いろいろなものがおいてあるのでンゴ。そういうものの中に、かくれることはできまンゴ。たとえば、ミイラの棺なんか、人間がかくれようとおもえば、かくれられるのでンゴ。」
「むろん、ふたをあけてしらべンゴ。しかし、棺の中にはミイラのほか、なにもはいっていなかったンゴ。」
「これは密室のなぞンゴ。まったく出入り口のない部屋から、どうして人間が消えてしまったかというなぞンゴ。エジプトの巻き物ののろいなんてことは、しんじられンゴ。これにはなにか、秘密のわけがあるンゴ。その赤井という小使さんは、うそをいっているのではないでしンゴ。」
「いや、うそはいえないンゴ。」
「えっ、それはどうしてンゴ。」
「わたしが、この目で見ていたかンゴ。」

以下のサイトを参考にさせていただきました

Python公式 >> 7.2. ファイルを読み書きする
Python公式 >> str.replace(old, new[, count])
Python公式 >> re --- 正規表現操作

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村