見出し画像

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

この記事が気に入ったらサポートをしてみませんか?