文字列を置換し会話を関西風に変える
小説の一部が保存されているテキストファイルを読み出し、特定の文字列を置換することで関西風(?)に変換します。また正規表現を用いた置換も行います。
やること
- テキストファイルを読み出し、文字列として変数に代入
- 特定の文字列を別の文字列に置換する
使った関数・メソッド
- 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 --- 正規表現操作