厚生労働省のブラック企業リストをTSV変換
前回tabulaのは失敗するのでcamelotで再挑戦
Camelot: PDF Table Extraction for Humans — Camelot 0.7.3 documentation
厚生労働省の長時間労働削減に向けた取り組みから www.mhlw.go.jp
労働基準関係法令違反に係る公表事案をダウンロード https://www.mhlw.go.jp/kinkyu/dl/180928.pdf
表の部分しか取れないので労働局名と最新更新日がありません
apt install ghostscript pip install camelot-py[cv]
import re import pandas as pd import matplotlib.pyplot as plt import camelot # 2ページ目から最終頁まで、セパレーター優先、改行除去 tables = camelot.read_pdf('180928.pdf', pages='2-end', split_text=True, strip_text='\n') dfs = [] # dataframeに変換、ヘッダー部削除、ヘッダー追加 for table in tables: df = table.df df.drop(0, inplace=True) df.columns = ['企業・事業場名称', '所在地', '公表日', '違反法条', '事案概要', 'その他参考事項'] dfs.append(df) # ページ結合 df_black = pd.concat(dfs) # カンマを追加 def ihan_conv(temp): result = re.sub('条(の\d{1,3})?', lambda m: m.group(0) + ', ', temp).rstrip(', ') return result def sonota_conv(temp): result = re.sub('H\d{1,2}\.\d{1,2}\.\d{1,2}', lambda m: ', ' + m.group(0), temp).lstrip(', ') return result df_black['違反法条'] = df_black['違反法条'].apply(ihan_conv) df_black['その他参考事項'] = df_black['その他参考事項'].apply(sonota_conv) # CSVファイルへ出力 df_black.to_csv('black.csv') # TSVファイルへ出力 df_black.to_csv('black.tsv', sep='\t' ) # EXCELファイルへ出力 with pd.ExcelWriter('black.xlsx') as writer: df_black.to_excel(writer, sheet_name='sheet1')
camelotは線できちんと囲まれているものは大丈夫そう。 2行で1つのセルのようなexcelで1つは線ありもう一つは文字オーバーして線が消えていると隣や上にくっついてしまうので難しい。