この記事はテキストファイルを読み込む|Pythonの続き
はじめに
読み込んだテキストには改行文字やルビ、注釈が含まれていた
今回は、これらを除去して今後扱いやすくすることを目指す
主な内容
- 正規表現モジュールを用いた置換
- string.strip()メソッド
今回も以下のテキストファイルを利用する
底本:「人間失格」新潮文庫、新潮社
1952(昭和27)年10月30日発行
1985(昭和60)年1月30日100刷改版
初出:「展望」筑摩書房
1948年(昭和23年)6〜8月号
入力:細渕真弓
校正:八巻美惠
1999年1月1日公開
2011年1月9日修正
青空文庫作成ファイル:
このファイルは、インターネットの図書館、青空文庫(http://www.aozora.gr.jp/)で作られました。入力、校正、制作にあたったのは、ボランティアの皆さんです。
「図書カード:人間失格」 https://www.aozora.gr.jp/cards/000035/card301.html (最終閲覧日2024/11/26)
テキストファイルの前処理
青空文庫からダウンロードしたファイルには、最初と最後に書誌情報や記号の説明が含まれている
ここはテキストエディタで手動で削除して、’r-ningen_shikkaku.txt’というファイルを新規作成した(プログラムを実装するより速いので)
ソースコード
先に全体のコードを示す
ファイルの読み込みに関しては前回の記事を参照
テキスト処理前後の比較のため、最初の3行を出力するようにしている
import re
# ファイルの読み込み
filepath = 'r-ningen_shikkaku.txt'
with open(file=filepath, mode='r', encoding='shift_jis') as f:
textlist = f.readlines()
print(textlist[:3])
# テキスト処理
pattern = re.compile(pattern=r'《.*?》|||[#.*?]')
s_list = [pattern.sub(repl='', string=s.strip()) for s in textlist] # リスト内包表記
print(s_list[:3])
正規表現モジュールreを用いた置換
ここで除去したいのは以下のパターンの文字列
-------------------------------------------------------
【テキスト中に現れる記号について】
《》:ルビ
(例)従姉妹《いとこ》
|:ルビの付く文字列の始まりを特定する記号
(例)昔|気質《かたぎ》
[#]:入力者注 主に外字の説明や、傍点の位置の指定
(例)[#3字下げ]はしがき[#「はしがき」は大見出し]
-------------------------------------------------------
正規表現を扱うにはreモジュールをimportする
re.compile()メソッド
正規表現パターンをコンパイルするメソッド
事前にコンパイルしておくことで、同じパターンを何回も繰り返す場合のパフォーマンスが向上する
import re
pattern = re.compile(pattern=r'《.*?》|||[#.*?]')
引数に正規表現パターンを取る
re.Patternクラスを返す
使用した正規表現の記号
全て半角記号
記号 | 意味 |
---|---|
.(ピリオド) | 任意の1文字 |
*(アスタリスク) | 0回以上の繰り返し |
*?(アスタリスク+クエスチョンマーク) | 最短一致(なるべく短い文字列でマッチするように探索する) |
|(縦棒) | または |
今回は縦棒の全角と半角が両方存在するので注意
(全角:テキスト中から除去したい記号、半角:正規表現で「または」を表す記号)
re.Pattern.sub()メソッド
パターンに一致した文字列を置換するメソッド
pattern.sub(repl='', string=s.strip())
今回は削除したいのでrepl = ”としている
string引数にはパターンに一致するかどうか調べたい文字列を入れる(strip()については後述)
string.strip()メソッド
文の先頭と末尾に存在する空白文字を消去するメソッド
消去される空白文字の例
- スペース(
' '
) - タブ(
\t
) - 改行(
\n
) - 復帰(
\r
) - 垂直タブ(
\v
) - フォームフィード(
\f
)
これで末尾の改行文字と、文頭の字下げのスペースを削除している
実行結果
['[#3字下げ]はしがき[#「はしがき」は大見出し]\n', '\n', '\n']
['はしがき', '', '']
見出しにつけられていた入力者注([# (任意の文)])、改行コード(\n)が消えていることが分かる
おわりに
今後は、この処理したテキストにMeCabで形態素解析を行なってみたい
また、今回は説明を省略したが、リスト内包表記についても一度まとめたい
コメントを残す