레이블이 dart인 게시물을 표시합니다. 모든 게시물 표시
레이블이 dart인 게시물을 표시합니다. 모든 게시물 표시

금요일, 4월 10, 2026

과연 사업보고서를 읽고 LLM은 어떻게 정리, 요약해줄것인가

3월 정기 주총을 진행하면서 각 회사들의 25년도 사업보고서 공개되었기에 지금까지 제가 다녔었던 회사들의 사업보고서를 정리해보는 시간을 가져볼려고 합니다.

물론 몇몇 회사는 폐업하기도 했고, 상장사가 아니기에 사업보고서는 올라오지 않고 감사보고서만 올라오는 경우도 있습니다. 그래서 모든 사업보고서가 있으면 사업보고서를, 없으면 감사보고서 LLM, 그 중에서도 NotebooKLM을 사용해서 분석해보고자 합니다.

대략 한 10년치는 읽어봐야지 회사들이 어떻게 변화되고 있는지 알 수 있겠죠

그래서 (10년치가 있으면)10년치 정도의 사업보고서를 다운받아서 NotebookLM에 업로드해서, 

NotebookLM의 기능 중 하나인 [스튜디오] →[보고서]→[블로그 게시물] 형식을 사용해서 오롯히 사업보고서 내용을 바탕으로 어떻게 정리, 요약하는지 보고자 합니다.


원래는 지난주즈음에도 가능할 것 같았는데, 몇가지 테스트 하느라고 좀 늦어졌습니다.

1. 사업보고서를 걍 pdf로 올리면 잘 분석 할 수 있을까?

물론 지금까지 논문들을 쌩 pdf로 올리고 요약해달라고 해도 잘 했지만, 재무제표와 같이 어마무시하게 많은 숫자들이 들어있기에 좀 헷갈려 할 수 있을 것 같아서 구조를 가지고 있는 json 형식으로 변환해 봤습니다.

근데 문제가 역시 재무제표를 읽을 때, 단위를 빼먹고 작성하는 경우가 있어서 조금 거슬리긴 했으나 대세에는 크게 영향을 주지 않을 것 같아서 무시했습니다. (각각 원, 천원, 백만원 개성있게 사용하나 그래도 개별 회사들 마다 통일성을 유지하고 있기에...)


2. DART에 올라오는 사업보고서를 사용하면 구조화된 문서를 확보 할 수 있지 않을까?

결론: 응? 모르겠음. 아놔.

DART에서 OPENDART라고 API 서비스를 사용해서 공시보고서를 XML형식으로 다운로드 받을 수 있게 해주는데 XML 파일을 파싱하는게 생각보다 마음처럼 되지 않아서 일단 포기했습니다. 

XML형식을 읽는데 형식에 문제가 있다고 에러가 항시 발생하더라구요 ㅋ 

파이썬 XML 모듈의 문제인지 모르겠지만.. load할 때 에러가 나는 지점들도 달랐지만 그래도 어찌저찌해서 json형식으로 변환시켰는데, 온전한 사업 내용 문장을 하나의 변수안에 넣으려고 하니... 이게 파편화되어 있어서.. 

OPENDART나중에 시간을 들여서 한번 확인해 보려고 합니다.


그래서 결론은 네이버에서 확인 할 수 있는 사업보고서 pdf 파일을 json으로 변환시켜서 NotebookLM에게 읽혀서 "블로그 게시물" 형식에 맞게 

- 바이오니아

- 테라젠이텍스 (지금은... 테라젠바이오가 가까운데, 당시 재직할 때는 테라젠이텍스라서..)

- 마크로젠

- 엔젠바이오

- SML제니트리

의 너의 생각을 알려줘 라는 내용의 글들을 다음 주 동안에 하나씩 오픈 하도록 하겠습니다.

항상 그렇지만 LLM들은 멋진 녀석들이라는 것에 놀라고 있습니다. :)


※정보 공개에 의무가 있는 상장회사들이나 비상장 회사들의 정보를 확인 할 수 있는 곳

네이버증권

DART 홈페이지

한국거래소



출처: @ye._.vely618


목요일, 5월 02, 2024

Open Dart 활용하기 (1)

오늘은 전공 대신에 데이터 수집 관련한 내용을 올리려고 합니다.

데이터 수집 하는 테스트 하는데에 주식정보 만큼 좋은게 없어서 한번 

투자공부하는 겸사겸사 dart 사이트에 제공하는 open dart를 활용하는 사용기를 시리즈로 올려보려고 합니다.

오늘은 그중에서 첫번째로 보통 국내 주식은 6자리 숫자 코드로 되어 있는데 open dart에서는 8자리의 별도 기업 코드를 사용하고 있어서 먼저, 그 기업코드를 확보해보도록 하겠습니다.

기업코드는 zip파일로 제공되고 있다고 >여기<에서 설명하고 있습니다.

결론적으로 API Key를 발급받아 crtfc_key=항목에 넣어주고 브라우저의 주소창에 넣어주면

corpCode.xml 파일을 다운로드 받을 수 있습니다.

https://opendart.fss.or.kr/api/corpCode.xml?crtfc_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

저장된 파일은 corpCode.xml이라고 하지만 사실은 zip로 압축된 파일!!

파일이름을 corpCode.xml에서 corpCode.zip 으로 변경해주고 압축을 해제하면 우리가 찾는 기업코드를 품고 있는 xml파일을 확인할 수 있습니다.

이 xml 파일에는 약 10만개정도의 기업코드가 기록되어 있는데.. 이는 상장회사 뿐만 아니라 dart에 공시를 올리는 모든 회사의를 구별하기 위한 코드입니다.


xml파일에서 필요한 정보(기업코드)를 뽑아서 tab delimited 파일을 생성하는 스크립트를 작성해보도록 하겠습니다.


import xml.etree.ElementTree as ET

# XML 파일 읽기

tree = ET.parse("CORPCODE.xml")

root = tree.getroot()

# 결과를 저장할 딕셔너리 생성

result = {}

# XML 파일의 각 리스트 항목을 순회

for item in root.findall("list"):

    # 회사 이름, 회사 코드, 주식 코드 추출

    corp_name = item.find("corp_name").text

    corp_code = item.find("corp_code").text

    stock_code = item.find("stock_code").text

    # 딕셔너리에 추가

    if stock_code.strip() == '':

        stock_code = '-'

    else:

        pass   

    result[corp_code] = {"corp_name":corp_name, "stock_code": stock_code}

ow = open('CORPCODE.txt','w')

for key, value in result.items():

    #print (f"{value['stock_code']}\t{value['corp_name']}\t{key}")

    ow.write(f"{value['stock_code']}\t{value['corp_name']}\t{key}\n")

ow.close()

    

상장사의 경우 주식코드, 회사명, 기업코드 정보들 담은 CORPCODE.txt 파일을 생성 할 수 있습니다.

다음번에는 조금 더 유용한 코드를 가지고 다시 돌아오도록 하겠습니다. :)


출처: @ye._.vely618