![見出し画像](https://assets.st-note.com/production/uploads/images/24188385/rectangle_large_type_2_b72c05e8a58b0a778209fb030301c54c.jpeg?width=1200)
Pythonでテキストの抽出をしてみる-CSVファイルの作成まで
pythonではテキストの抽出というのができます。正規表現でテキストを抽出するというのがあります。
目標
目標としてはテキストファイルから必要な項目を抽出して、最終的にCSVファイルを作成してみるということになります
なぜCSVファイルかというと、例えばデータベースに取り込みたいとかなんかあった時に便利かなと思いました。
※普段はlogwというブログに記事を書いていますが、Pythonはnoteでやってみようと統一しているため、noteのほうだけに更新となります
使うデータ-PDF
使うPDFは、僕が勝手に作成した実在しないPDFとなります
使うデータ-テキスト
PDFをテキストにしたものです。このテキストはPythonのツールで行っております。
データの形式がおかしい?
全角数字や微妙に変なテキストがあるかもしれませんが、わざとそうしております。
抽出する項目
抽出する項目は以下を想定しております
・整理番号
・日付(令和の箇所)
・日付(平成の箇所)
・提出人
・参考人
・提出日
・提出番号
・通知番号
とします。結構多いなと思いますが頑張っていきたいと思います。
テキスト抽出方法
正規表現ではre.search()、re.findall()がありますが今回はre.findall()を使います。
re.search()とre.findall()の違い
re.search()→抽出するワードが存在するだけで結果を返す。ただし複数有った場合は最初の1つのみ
re.findall()→すべての結果をlist型で返す。複数あっても全て返す。
今回は重複するテキストはないと思いますが、もし有った場合もre.findall()だったら対応できるのではないかなと思っております。違っていたらすいません。
整理番号の抽出
まずは整理番号を抽出してみたいと思います。整理番号は:で区切られているので、ここでは「整理番号」と「番号(322636940)」でわけてみたいと思います。コードは以下になります
import os
import re
#ファイルの読み込み
path = '1pdf.txt'
#ファイルを開く
with open(path) as open_file:
areas = open_file.read()
#str型に変換
str_areas = str(areas)
#print(str_areas)
results = re.findall(r"整理番号:", str_areas)
for result in results:
result = result.split()
print(result)
今回はCSVにもしたいのでreadで読み込んでおります。実行結果は
[macan@localhost ~]$ python read.py
['整理番号:']
となります。無事に整理番号のテキストを抽出できました。番号の抽出ができておりません。
番号の抽出をしてみる
番号の抽出をしてみたいと思います。PDFを見ると、今回作った「整理番号」の番号部分は「半角数字」というのがわかります。正規表現で取り出してみたいと思います。分かりやすいpythonの正規表現の例を元に調べて見ます。
半角数字の抽出は\dか[0-9]でできるみたいです。
import os
import re
#ファイルの読み込み
path = '1pdf.txt'
#ファイルを開く
with open(path) as open_file:
areas = open_file.read()
#str型に変換
str_areas = str(areas)
#print(str_areas)
results = re.findall(r"整理番号:\d+", str_areas)
for result in results:
result = result.split()
print(result)
実行すると、以下の様になります。
['整理番号:322636940']
無事に整理番号がとれました。\dの後が*か+かですが、0回以上と1回以上(繰り返し)の違いでした。特によくわからないのでどっちでも今回は良いと思います。
テキストファイルに書き込みが必要
ここまではコマンド上での出力になります。実際にテキストデータ(.txt)に書き込みをします。
コードは以下になります。
import os
import re
#ファイルの読み込み
path = '1pdf.txt'
#ファイルを開く
with open(path) as open_file:
areas = open_file.read()
#str型に変換
str_areas = str(areas)
#print(str_areas)
results = re.findall(r"整理番号:\d*", str_areas)
with open("sample_python_txt.txt",'a',newline='') as f:
for result in results:
#result = result.split()
print(result)
f.write(result + '\n')
with open("sample_python_txt.txt",'a',newline='') as f:からが追記したところになります。
for文で書き込みをしておりますが、今回のケースは1つのテキストで1つの中身しかないのでfor文は不要となりますが、なんとなくしてみました。
テキストの中身は整理番号:322636940とでていると思います。
次回は残りのテキストもやってみたいと思います。
お役に立ちましたか?
投げ銭をいただけるともっと頑張れます!
・note
・仮想通貨(bitflyer)
・キャッシュ
のどれでも構いません
ビットコインアドレスは以下になります
3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS