string.strip()メソッドと正規表現パターンを用いて、テキストから記号を除去する|Python

0 アクセス

この記事はテキストファイルを読み込む|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

これで末尾の改行文字と、文頭の字下げのスペースを削除している

実行結果

見出しにつけられていた入力者注([# (任意の文)])、改行コード(\n)が消えていることが分かる

おわりに

今後は、この処理したテキストにMeCabで形態素解析を行なってみたい
また、今回は説明を省略したが、リスト内包表記についても一度まとめたい

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です