TKgumi commited on
Commit
ba651f7
·
verified ·
1 Parent(s): 8bcc8d7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +50 -11
app.py CHANGED
@@ -1,17 +1,56 @@
1
- from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
2
- import torch
 
 
 
3
 
4
- MODEL_NAME = "rinna/japanese-gpt-0.5b" # 500Mの軽量モデル
 
 
5
 
6
- tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
7
- model = AutoModelForCausalLM.from_pretrained(
8
- MODEL_NAME,
9
- torch_dtype=torch.float16, # メモリ節約
10
- low_cpu_mem_usage=True # メモリ圧縮
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  )
12
 
13
- generator = pipeline("text-generation", model=model, tokenizer=tokenizer)
 
 
 
 
 
14
 
15
- def generate_text(prompt: str, max_length: int = 100):
16
- return generator(prompt, max_length=max_length)[0]['generated_text']
17
 
 
1
+ import os
2
+ import cv2
3
+ import pytesseract
4
+ from pdf2image import convert_from_path
5
+ from transformers import AutoTokenizer, AutoModelForCausalLM
6
 
7
+ # --- 1. OCRで決算短信PDFからテキスト抽出 ---
8
+ # PDFファイル名
9
+ pdf_path = "kessan.pdf"
10
 
11
+ # PDFを画像に変換(1ページごとにリストへ)
12
+ images = convert_from_path(pdf_path)
13
+
14
+ # Tesseractのパス設定(必要な場合、環境に合わせて変更)
15
+ # 例: Windowsの場合
16
+ # pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
17
+
18
+ extracted_text = ""
19
+
20
+ for i, image in enumerate(images):
21
+ # PillowのImageオブジェクトをOpenCV形式に変換
22
+ image_cv = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR)
23
+
24
+ # 前処理: グレースケール化、二値化(OTSU)やノイズ除去などを必要に応じて追加
25
+ gray = cv2.cvtColor(image_cv, cv2.COLOR_BGR2GRAY)
26
+ thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
27
+ # OCR処理(日本語対応の場合はlang="jpn"を指定)
28
+ text = pytesseract.image_to_string(thresh, lang="jpn")
29
+ extracted_text += text + "\n"
30
+
31
+ print("OCR抽出完了。")
32
+
33
+ # --- 2. 抽出テキストをLLMへ入力して要約生成 ---
34
+ # Hugging Faceの蒸留済みLLM DeepSeek-Coder-1.3B の利用例
35
+ model_name = "deepseek-ai/deepseek-coder-1.3b"
36
+
37
+ # モデルとトークナイザーのロード
38
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
39
+ model = AutoModelForCausalLM.from_pretrained(model_name)
40
+
41
+ # プロンプト作成(必要に応じて調整)
42
+ prompt = (
43
+ "以下の決算短信の内容を要約し、投資家向けに分かりやすく説明してください:\n\n" +
44
+ extracted_text
45
  )
46
 
47
+ # トークナイズ
48
+ inputs = tokenizer(prompt, return_tensors="pt", truncation=True, max_length=4096)
49
+
50
+ # 生成(max_lengthやその他のパラメータは必要に応じて調整)
51
+ output_ids = model.generate(inputs.input_ids, max_length=512, num_beams=5, early_stopping=True)
52
+ summary = tokenizer.decode(output_ids[0], skip_special_tokens=True)
53
 
54
+ print("\n=== 要約結果 ===")
55
+ print(summary)
56