-
명사 사전 만들기(우리말샘)Programming/Python 2021. 3. 12. 00:05반응형
opendict.korean.go.kr/service/openApiInfo
자연어처리를 하다보면 명사 사전이 필요할 때가 있다..
정말 고맙게도 우리말샘에서 Open API로 여러가지 우리나라말이나 외국말들을 공유해주고 있다.
분명 작년에 사전을 구할때는 API 형식으로 한번에 한번 request만 가능했는데,
지금은 사전형태를 배포하고 있네요.
회원가입 후 내 정보관리 들어가시면 있습니다.
다운받아서 열어보면
대략 이런 형태를 띄고 있습니다.
파이썬으로 불러와서 몇가지 전처리하면 편하게 끝날듯 싶네요.
동의어들은 하나로 묶어서 처리해도 될듯합니다.
python code
필요한 라이브러리들 불러와서 처리하겠습니다.
파일불러오고 전처리할 pandas
디렉토리 파일 전부 가져올 glob
텍스트 전처리 re
총 3개면 됩니다.
단어라인을 정리할 사용자 함수를 하나 만들어 줍시다.
import pandas as pd from glob import glob import re def write(before): p = re.compile("[^0-9]") if before is not None: before = before.replace("-","") before = before.replace("^","") after = before.replace(":","") after = "".join(p.findall(after)) return after
엑셀파일을 불러올껀데, pandas 내에서 xlrd를 사용하기 때문에
혹시 몰라서 설치해줍니다.
!pip install xlrd
파일 이름 불러오기
files = glob('전체 내려받기_우리말샘_xls_20210306/*.xls')
이렇게 불러와집니다.
리스트로 반환을 해줍니다 편하게 시리 ㅋㅋㅋ
['전체 내려받기_우리말샘_xls_20210306\\820160_100000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_1000000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_1050000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_1100000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_1141295.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_150000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_200000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_250000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_300000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_350000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_400000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_450000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_50000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_500000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_550000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_600000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_650000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_700000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_750000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_800000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_850000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_900000.xls', '전체 내려받기_우리말샘_xls_20210306\\820160_950000.xls']
데이터프레임을 하나 만들어서 불러온 즉시 담아주도록 하겠습니다.
dataframe = pd.DataFrame() for file in files: data = pd.read_excel(file,sheet_name='Sheet0') dataframe = dataframe.append(data)
다른 컬럼들은 필요없으니 제외
new_data=dataframe[['어휘','품사']]
우리가 필요한건 명사기 때문에 명사만
new_data = new_data[new_data['품사']=='명사']
위에서 만들었던 사용자 함수를 적용해서 특수문자를 제거해줍니다.
띄어쓰기도 제거했습니다.
new_data['어휘'] = new_data['어휘'].apply(write)
확인을 해보죠
new_data
앗 중복제거를 안했네요..
중복제거하고서 데이터를 추출하고 마무리 짓겠습니다.
new_data.drop_duplicates(['어휘'],keep='first')
한 14만개 정도 날라갔네요..ㅋㅋㅋ 동일한 단어가 이렇게 많다니..
new_data.to_csv('noun_dictionary.csv',index=False)
전체 소스
import pandas as pd from glob import glob import re def write(before): p = re.compile("[^0-9]") if before is not None: before = before.replace("-","") before = before.replace("^","") after = before.replace(":","") after = "".join(p.findall(after)) return after files = glob('전체 내려받기_우리말샘_xls_20210306/*.xls') dataframe = pd.DataFrame() for file in files: data = pd.read_excel(file,sheet_name='Sheet0') dataframe = dataframe.append(data) new_data=dataframe[['어휘','품사']] new_data = new_data[new_data['품사']=='명사'] new_data['어휘'] = new_data['어휘'].apply(write) new_data = new_data.drop_duplicates(['어휘'],keep='first') new_data.to_csv('noun_dictionary.csv',index=False)
반응형'Programming > Python' 카테고리의 다른 글
[matplotlib]플롯의 특정 부분만 색상 변경하기 (0) 2021.04.06 (로컬)Python에서 Google Drive 공유파일 다운로드 받는 방법 (0) 2021.04.02 Python 기초 공부 - 7 (numpy) (0) 2021.03.09 Python 기초 공부 - 8 (Pandas,numpy) (0) 2021.03.09 Python 기초 공부 - 6 (Pandas) (0) 2021.03.08