前提・実現したいこと
大学の授業データをスクレイピングしてまとめています。pdfminerで取得して変換した2つのテキストデータのようにぐちゃぐちゃで思ったようにデータを取得できません。取得したいデータは科目の名前、教師の名前、単位数、前期か後期かの4つです。それらを多次元の辞書でまとめる必要があります。
ただしテキストデータのように欲しいデータはぐちゃぐちゃですが、ほしいデータはそれぞれの題目にスペースを1つ挟んだ次の行に必ず存在しています。これを使ってデータを取得しようとしてますが思うようにコードがかけないです。
発生している問題・エラーメッセージ
エラーメッセージは発生していません
該当のソースコード
Python
1import sys 2sys.path.append('C:\Python38\lib\site-packages') 3import os 4import shutil 5from os import path 6 7from pdfminer.converter import TextConverter 8from pdfminer.layout import LAParams 9from pdfminer.pdfinterp import PDFPageInterpreter, PDFResourceManager 10from pdfminer.pdfpage import PDFPage 11 12def convert_text(): 13 # textディレクトリ作成、既に存在すれば全削除&再作成 14 this_path = os.getcwd() + '\app\Http\Python\text' 15 exists = os.path.exists(this_path) 16 if (exists == True): 17 shutil.rmtree(this_path) 18 os.mkdir(this_path) 19 else: 20 os.mkdir(this_path) 21 22 # pdfディレクトリのファイル全取得 23 this_path = os.getcwd() + '\app\Http\Python\pdf' 24 files = [] 25 for file in os.listdir(this_path): 26 if os.path.isfile(os.path.join(this_path, file)): # ファイルのみ 27 files.append(file) 28 29 for file in files: 30 # pdfフォルダからファイル取得, 拡張子を.txtに変換 31 this_path = os.getcwd() + '\app\Http\Python\pdf\' 32 input_path = this_path + file 33 this_path = os.getcwd() + '\app\Http\Python\text\' 34 output_path = this_path + file.replace('.pdf', '.txt') 35 36 # コンバート 37 manager = PDFResourceManager() 38 with open(output_path, "wb") as output: 39 with open(input_path, 'rb') as input: 40 with TextConverter(manager, output, codec='utf-8', laparams=LAParams()) as conv: 41 interpreter = PDFPageInterpreter(manager, conv) 42 for page in PDFPage.get_pages(input): 43 interpreter.process_page(page)
Python
1import os 2import glob 3import sys 4 5def get_data(): 6 # テキストファイル取得 7 this_path = os.getcwd() + '\app\Http\Python\text' 8 files = glob.glob(this_path + '\*.txt') 9 10 # データ取得 11 data_list = [] 12 for file in files: 13 with open(file, 'r', encoding="utf-8") as f: 14 line = f.readlines() 15 teacher = line[6].replace('\n', '') 16 subject = line[10].replace('\n', '') 17 semester = line[12].replace('\n', '') 18 credit = line[16].replace('\n', '') 19 data = [teacher, subject, semester[-2:], credit] 20 data_list.append(data) 21 22 return data_list
text
12020/04/09(木)16:02 2 3科目ナンバー 0000000000 4 5教員名 6 7教員名の名前 8 9科目名 10 11科目の名前 12 13開講年度学期 2020年度 前期 14 15単位数 16 171
text
12020/04/09(木)15:07 2 3科目ナンバー 4 5000000000 6 7開講年度学期 2020年度 前期 8 9科目名 10 11科目の名前 12 13教員名 14 15教員の名前 16 17単位数 18 192
試したこと
現状テキストの行番号を指定して取得していますが、それだと当然ですがうまくいきません。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/28 16:50