ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 명사 사전 만들기(우리말샘)
    Programming/Python 2021. 3. 12. 00:05
    반응형

    opendict.korean.go.kr/service/openApiInfo

     

    우리말샘 - 오픈 API 서비스 소개

    1. 우리말샘 오픈 API 서비스 소개 우리말샘 오픈 API는 검색 플랫폼을 외부에 공개하여 다양하고 재미있는 서비스 및 애플리케이션을 개발할 수 있도록 외부 개발자와 사용자들이 공유하는 프로

    opendict.korean.go.kr

    자연어처리를 하다보면 명사 사전이 필요할 때가 있다..

    정말 고맙게도 우리말샘에서 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)

     

     

     

    반응형
Designed by Tistory.