josw123 / dart-fss

한국 금융감독원에서 운영하는 다트(Dart) 시스템 크롤링을 위한 라이브러리
https://github.com/josw123/dart-fss
MIT License
330 stars 111 forks source link

samsung.extract_fs(bgn_de='20150101') 오류 #34

Closed wjh744 closed 4 years ago

wjh744 commented 4 years ago

올려두신 예제와 똑같이 쳤는데 samsung.extract_fs(bgn_de='20150101') 에서 오류가 나네요.

JVMNotFoundException Traceback (most recent call last) ~\anaconda3\lib\site-packages\dart_fss\fs\extract.py in merge_fs(fs_df, label_df, report, fs_tp, lang, separate) 842 for compare_func in additional_comparison_function: --> 843 ndata, nlabels = compare_func(column, df, ndf, label_df[tp], ndata, nlabels) 844

~\anaconda3\lib\site-packages\dart_fss_classifier\fs_search.py in compare_df_and_ndf_cnn(column, df, ndf, ldf, ndata, nlabels) 108 label = extract_account_title(ndf[ndf_label_column].iloc[idx]) --> 109 concept_id = guess_concept_id(label) 110 index = concept_none_data.get(concept_id)

~\anaconda3\lib\site-packages\dart_fss_classifier\fs_search.py in guess_concept_id(text) 39 """ ---> 40 return guess(text) 41

~\anaconda3\lib\site-packages\dart_fss_classifier\classifier.py in guess(text) 29 """ ---> 30 c = Classifier() 31 return c.guess(text)

~\anaconda3\lib\site-packages\dart_fss\utils\singleton.py in call(cls, *args, *kwargs) 7 if cls not in cls._instances: ----> 8 cls._instances[cls] = super(Singleton, cls).call(args, **kwargs) 9 return cls._instances[cls]

~\anaconda3\lib\site-packages\dart_fss_classifier\classifier.py in init(self) 131 def init(self): --> 132 self.konlpy = Kkma() 133 self._dataset = None

~\anaconda3\lib\site-packages\konlpy\tag_kkma.py in init(self, jvmpath, max_heap_size) 94 if not jpype.isJVMStarted(): ---> 95 jvm.init_jvm(jvmpath, max_heap_size) 96

~\anaconda3\lib\site-packages\konlpy\jvm.py in init_jvm(jvmpath, max_heap_size) 54 ---> 55 jvmpath = jvmpath or jpype.getDefaultJVMPath() 56

~\anaconda3\lib\site-packages\jpype_jvmfinder.py in getDefaultJVMPath() 73 finder = LinuxJVMFinder() ---> 74 return finder.get_jvm_path() 75

~\anaconda3\lib\site-packages\jpype_jvmfinder.py in get_jvm_path(self) 210 "environment variable properly." --> 211 .format(self._libfile)) 212

JVMNotFoundException: No JVM shared library file (jvm.dll) found. Try setting up the JAVA_HOME environment variable properly.

During handling of the above exception, another exception occurred:

RuntimeError Traceback (most recent call last)

in ----> 1 samsung.extract_fs(bgn_de='20150101') ~\anaconda3\lib\site-packages\dart_fss\corp\corp.py in extract_fs(self, bgn_de, end_de, fs_tp, separate, report_tp, lang, separator) 225 226 """ --> 227 return extract(self.corp_code, bgn_de, end_de, fs_tp, separate, report_tp, lang, separator) ~\anaconda3\lib\site-packages\dart_fss\fs\extract.py in extract(corp_code, bgn_de, end_de, fs_tp, separate, report_tp, lang, separator) 1078 1079 for report in tqdm(reports[next_index:], desc='Annual reports', unit='report'): -> 1080 statements, label_df = merge_fs(statements, label_df, report, fs_tp=fs_tp, separate=separate, lang=lang) 1081 1082 if str_compare(report_tp, 'half') or str_compare(report_tp, 'quarter'): ~\anaconda3\lib\site-packages\dart_fss\fs\extract.py in merge_fs(fs_df, label_df, report, fs_tp, lang, separate) 848 except Exception: 849 msg = 'An error occurred while fetching or analyzing {}.'.format(report.to_dict()) --> 850 raise RuntimeError(msg) 851 852 RuntimeError: An error occurred while fetching or analyzing {'rcp_no': '20180402005019', 'corp_code': '00126380', 'corp_name': '삼성전자', 'stock_code': '005930', 'corp_cls': 'Y', 'report_nm': '사업보고서 (2017.12)', 'flr_nm': '삼성전자', 'rcept_dt': '20180402', 'rm': '연'}.
josw123 commented 4 years ago

안녕하세요.

올려주신 오류는 dart-fss-classifier 설치시 의존성에 의하여 설치되는 KoNLPy 패키지에서 발생하는 오류입니다. KoNLPy 패키지 사용을 위해서는 JAVA 및 추가 환경설정이 필요한데 이를 설정해 주지 않아 발생하는 오류로, KoNLPy 설치법을 참고하셔서 설치 및 환경설정을 해주시면 되겠습니다.

또한 2015년 이후의 재무제표 추출시에는 dart-fss-classifier를 설치하지 않으셔도 재무제표 추출에는 큰 차이가 없으니 아래와 같이 dart-fss-classifier 플러그인 없이 사용하셔도 큰 무리는 없습니다.

# Dart-fss 라이브러리 불러오기
import dart_fss as dart

# 회사리스트 불러오기
corp_list = dart.get_corp_list()
# 삼성전자 선택
samsung = corp_list.find_by_corp_name(corp_name='삼성전자', exactly=True)[0]
# 재무제표 추출
fs = samsung.extract_fs(bgn_de='20150101')

dart-fss-classifier 플러그인은 2008년 이전(혹은 2011년 이전)의 데이터 추출시 자연어 처리를 통해 재무제표 추출 성능을 향상 시킬 수 있습니다.

wjh744 commented 4 years ago

아 그렇군요. 상세한 설명 감사합니다. 올려주신 라이브러리 정말 잘 활용하고 있습니다.