File size: 2,257 Bytes
318adba
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import re

from openai import OpenAI

REQUIREMENT = """以下の箇条書きの文章群から、数値データや表データを含む箇所をそのまま抜き出してください。数値や表が含まれていない場合、その文章については None としてください。具体的には以下の条件に従ってください。

### 条件
-  数値データや表データを含む箇所をそのまま抜き出す
- 数値や表がない場合は None を返す
- 結果を箇条書きで表示する
- 複数データが含まれる場合はスラッシュ(/)区切りで一行に複数記す"""

EXAMPLE_QUESTION = """1. TSRの倒産集計における業種分類は、総務省の日本産業標準分類に準拠している。
2. 2024年1-8月の倒産は、ラーメン店が44件(前年同期比57.1%増)で、2009年からの統計では同期間で最多だった2020年の31件を大幅に上回っている。
3. 2009年以降の倒産動向をみると、ラーメン店は2013年に29件を記録した。その後、インバウンド(訪日外国人客)の来店増などで2016年は16件まで減少した"""

EXAMPLE_ANSWER = """1. None
2. 2024年1-8月の倒産は、ラーメン店が44件(前年同期比57.1%増)/ 2009年からの統計では同期間で最多だった2020年の31件
3. ラーメン店は2013年に29件を記録した/ 2016年は16件まで減少した"""


def get_data_info(client: OpenAI, facts, model_name='gpt-4o-mini-2024-07-18'):
    message = "\n".join([f'{i+1}. {q}' for i, q in enumerate(facts)])
    response = client.chat.completions.create(
        messages=[
            {"role": "user","content": REQUIREMENT},
            {"role": "user","content": EXAMPLE_QUESTION},
            {"role": "assistant","content": EXAMPLE_ANSWER},
            {"role": "user","content": message}
        ],
        model=model_name,
        temperature=0,
    )
    res_text = response.choices[0].message.content
    predicted_data = re.findall(r'\d{1,2}\. (.+)\n*', res_text)
    predicted_data = [[d_.strip() for d_ in d.split('/')] for d in predicted_data]
    predicted_data = '/'.join(['/'.join(d) for d in predicted_data if d != ['None']]).split('/')
    return predicted_data