KT 에이블스쿨 44일차(1)

박기범·2023년 4월 3일
0

에이블스쿨

목록 보기
50/95

오늘부터 5일간 자연어처리 미니프로젝트가 진행합니다.



실습에 사용한 코드

아직 실습이 모두 끝난 것이 아니라 실습 중에 사용한 코들르 좀 정리하겠습니다..솔직히 아직 이론적으로 부족해서 최대한 이해한 코드 위주로 정리하겠습니다.

▶한글 깨짐 방지

강사님이 지원해준 코드로도 한글깨짐 방지가 안되서 전에 사용했던 한글 깨짐 방지 코드 적어두겠습니다.

	#한글깨짐 방지

    plt.rc('font', family='Malgun Gothic')
    sns.set(font="Malgun Gothic",#"NanumGothicCoding", 
            rc={"axes.unicode_minus":False}, # 마이너스 부호 깨짐 현상 해결
            style='darkgrid')

    # scipy
    import scipy.stats as spst  

▶데이터 길이 분포 파악하기

    # 문의 내용이 저장되어 있는 컬럼을 선택합니다.
    inquiries = data['text']
    # 각 문의 내용의 길이를 구합니다.
    lengths = [len(inquiry) for inquiry in inquiries]

    # 최소, 최대 길이와 해당 길이를 가진 문의 내용을 찾습니다.
    min_length = min(lengths)
    max_length = max(lengths)
    min_index = lengths.index(min_length)
    max_index = lengths.index(max_length)


    # 결과를 출력합니다.
    print(f"문의 내용의 최소 길이: {min_length}")
    print(f"문의 내용의 최대 길이: {max_length}")
    print(f"최소 길이를 가진 문의 내용의 index: {min_index}")
    print(f"최대 길이를 가진 문의 내용의 index: {max_index}")

    # 최소 길이를 가진 문의내용
    print(f'최소 길이를 가진 문의 내용 : {data.loc[min_index, "text"]}')
    print(f'최대 길이를 가진 문의 내용 : {data.loc[max_index]}')

해당 코드를 사용해 가장 짧은 문장을 가진 내용과 인덱스를 가장 긴 문장을 가진 내용과 인덱스를 찾아보았습니다.

▶명사 추출

Okt를 사용하여 명사를 추출했습니다.

    import nltk
    from konlpy.tag import Okt

    # Okt 객체 생성
    okt = Okt()

    # 각 문장에서 명사 추출하여 리스트로 저장
    nouns_list = [okt.nouns(sentence) for sentence in data['text']]

    # 이중 리스트를 단일 리스트로 변경
    nouns = [n for ns in nouns_list for n in ns]

    # nltk Text 객체 생성
    text = nltk.Text(nouns)

▶명사 빈도수 출력

추출한 명사와 조사를 가지고 가장 많이 사용된 단어를 알아보고자 시각화 했습니다.

    # 가장 많이 등장한 상위 20개의 단어와 빈도수 출력
    print(text.vocab().most_common(20))

    # 빈도수 분포 시각화
    import matplotlib.pyplot as plt

    plt.figure(figsize=(20, 5))
    text.plot(20)
    plt.show()

▶nltk를 사용한 similar사용

만약 `코드`라는 단어와 비슷한 맥락의 단어들을 찾아줍니다. 코드는 아래와 같습니다.

    import nltk

    text.similar('코드')

▶WordCloude 만들기

    from wordcloud import WordCloud
    import matplotlib.pyplot as plt

    FONT_PATH = '/usr/share/fonts/truetype/nanum/NanumGothic.ttf'


    # 명사 추출 결과를 사용하여 nouns 리스트 생성
    nouns = [n for ns in nouns_list for n in ns if len(n) > 1]

    # WordCloud 객체 생성
    wordcloud = WordCloud(font_path=FONT_PATH, max_font_size=200, background_color='white',
                          width=1200, height=800, max_words=100, relative_scaling=.5)

    # WordCloud에 사용될 텍스트 데이터 생성
    wordcloud.generate(' '.join(nouns))

    # 화면에 출력
    plt.imshow(wordcloud)
    plt.axis("off")
    plt.show()

추출한 명사를 가지고 해당 명사들로 WordCloude만드는 코드입니다. 결과는 아래와 같습니다.







자연어처리의 분석을 위조로한 코드인데어렵고 익숙하지 않은 코드들이라 자주 풀어봐야할 것 같습니다.




※공부하고 있어 다소 틀린점이 있을 수 있습니다. 언제든지 말해주시면 수정하도록 하겠습니다.
※용어에 대해 조금 공부 더 해서 수정하겠습니다.

profile
개발자가 되기 위한 한걸음

0개의 댓글