ここではファイルから入力し、処理を行い、ファイルに出力するという典型的なIPOモデルを行います。
まず、次のような内容のファイルtext02.txtがあるとします。この中で会話部分、つまり”「“から”」“までを抜き出します。また”《せいきょ》“や”《めがね》“といった漢字の読みがなは必要ないので消した形にします。その内容をconv.txtに保存します。そのようなプログラムを作成してみましょう。
尚、前提条件として”「“から”」“までは改行なしで同じパラグラフであるということにします。
(注意)このプログラムは制御構造を知るため例として提示していますが、このような書き方を推奨しているわけではありません。pythonでは正規表現のマッチングを使うと非常に短く、かつ効率的に書くことができます。詳しくは正規表現reクラスのセクションを参照してください。
# File: text02.txt
文壇の、或《あ》る老大家が亡《な》くなって、その告別式の終り頃から、雨が降りはじめた。早春の雨である。
その帰り、二人の男が相合傘《あいあいがさ》で歩いている。いずれも、その逝去《せいきょ》した老大家には、お義理一ぺん、話題は、女に就《つ》いての、極《きわ》めて不きんしんな事。紋服の初老の大男は、文士。それよりずっと若いロイド眼鏡《めがね》、縞《しま》ズボンの好男子は、編集者。
「あいつも、」と文士は言う。「女が好きだったらしいな。お前も、そろそろ年貢《ねんぐ》のおさめ時じゃねえのか。やつれたぜ。」
「全部、やめるつもりでいるんです。」
その編集者は、顔を赤くして答える。
この文士、ひどく露骨で、下品な口をきくので、その好男子の編集者はかねがね敬遠していたのだが、きょうは自身に傘の用意が無かったので、仕方なく、文士の蛇《じゃ》の目傘《めがさ》にいれてもらい、かくは油をしぼられる結果となった。# File: convextract.py
# 文章から発話部分を抜き出す。
lines=[] # 発話テキストを保持するリスト
with open('text02.txt',encoding='utf-8') as f: # テキスト読み込み用としてオープン
for l in f:
if '「' in l : # 行の中に'「'がある (発話がある)
speak='' # 発話を保持するための文字列
for e in l: # 行を文字単位でチェックしていく
if e == '「':
speak = speak+e # 文字を加える
continue # 次に進む
if e == '」': # 発話が終了
speak = speak+e
lines.append(speak) # リストに追加
speak='' # 次のために初期化
if speak != '': # 発話の最中なら文字列に文字を加える
speak=speak + e
with open('conv.txt','w',encoding='utf-8') as f: # 書き出しファイルをオープン
for l in lines: # リストの要素(発話)を1つ取り出す
if '《' in l: # 文字列の中に読みがながあるか
flag=False # あればフラグをオフにする
for e in l: # 一文字づつチェックする
if e == '《': # 読みがな開始
flag=True # フラグをオン
continue # スキップ
if e == '》': # 読みがな終了
flag=False # フラグをオフ
continue # スキップ
if flag == False: # フラグが立っていない(読みがなではない)
f.write(e) # ファイルに書き出し
else:
f.write('\n') # 一行終わると改行を加える
else:
f.write(l+'\n') # 文字列の中に読みがながなかったので書き出す