Magicode logo
Magicode
3 min read

道路族把握の一環1

https://cdn.magicode.io/media/notebox/blob_f7gfeFV

道路族対策プログラム

このプログラムは、道路で騒ぐ人々(通称「道路族」)への対策の一環として、小中高学生の休日などに道路族が発生する可能性が高い日を把握することを目的としています。周辺の学校イベント情報がネット上でPDF形式で掲載されている場合、それを取得し処理するためのコードです。今後は、道路族被害者の方々のために役立つプログラムを拡充していく予定です。

プログラムの概要

このプログラムは、以下の手順で機能します:
  1. 指定されたPDFファイルのURLからPDFをダウンロードします。
  2. ダウンロードしたPDFファイルからテキストを抽出します。
  3. 抽出されたテキストを処理して、学校イベント情報などのデータを整形します。
  4. 整形されたデータをJSON形式で保存します。

コードの説明(メイン)

from dataProcess import PDFDataProcessor
if __name__ == "__main__":
    processor = PDFDataProcessor()

    # PDFのURLを設定
    
    pdf_url = "ここにPDFのURL"
    processor.set_pdf_url(pdf_url)

    # PDFデータをダウンロードして処理
    processed_json = processor.process_pdf_to_json()

    if processed_json:
        # JSONデータをファイルに保存
        with open("processed_data.json", "w", encoding="utf-8") as json_file:
            json_file.write(processed_json)
            print("Processed data saved to processed_data.json")
    else:
        print("PDF processing failed.")

コードの説明(ロジック部)

import pdfplumber
import requests
import json
from io import BytesIO

class PDFDataProcessor:
    def __init__(self):
        self.pdf_url = None

    def set_pdf_url(self, pdf_url):
        self.pdf_url = pdf_url

    def download_pdf(self):
        try:
            response = requests.get(self.pdf_url)
            response.raise_for_status()  # エラーハンドリング
            return response.content
        except requests.exceptions.RequestException as e:
            print("Error downloading PDF:", e)
            return None

    def extract_text_from_pdf(self, pdf_content):
        pdf_text = ""
        pdf_buffer = BytesIO(pdf_content)
        with pdfplumber.open(pdf_buffer) as pdf:
            for page in pdf.pages:
                pdf_text += page.extract_text()
        return pdf_text

    def preprocess_text(self, text):
        # ここにテキストの前処理を追加
        preprocessed_text = text.replace('\n', ' ').strip()
        return preprocessed_text

    def process_pdf_to_json(self):
        pdf_content = self.download_pdf()
        if pdf_content:
            pdf_text = self.extract_text_from_pdf(pdf_content)
            preprocessed_text = self.preprocess_text(pdf_text)
            processed_data = {
                "pdf_url": self.pdf_url,
                "text": preprocessed_text,
            }
            return json.dumps(processed_data, indent=4, ensure_ascii=False)
        else:
            return None

Discussion

コメントにはログインが必要です。