|
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 |