python을 비롯한 현재의 프로그래밍 언어에서 한국어의 단어 빈도 추출은 어려운 문제인가요???

조회수 666회

업무관련으로 가벼운 프로그래밍이 가능한지 부탁받은 일이 있었는데,

생각보다 잘 안되길래 각종 사이트를 검색하다가 자연어 처리라는 큰 주제에 마주치게 되어서

당황해서 질문 올려봅니다.ㅎㅎ

다름이 아니라 어떤 문서가 밑에서 올라오면 특정한 키워드가 어느 정도로 분포하는지를 체크해서

미리 A, B, C, D등급 정도로 작업 우선도를 분류하려는 프로그래밍을 부탁받았었습니다.

특정한 키워드를 미리 10개 정도 선정해놓고나서 감지되는 키워드 수에 따라 문서들을 분류하는 식의

프로그램을 기대한것 같습니다.

저는 당연히 그정도는 파이썬의 문자열과 관련된 여러 기능들.. count()나 spilit() 함수 등을 이용하면 어렵지 않게 될거라 생각했습니다....

근데 이게 영어로 된 문서일때는 아무 문제가 없는데..

한글로 된 문서에 대해서는 생각보다 잘 안되더군요. ㅡㅡ;

처음에는 왜 안되나 의문이었는데, 생각해보니 한글에는 조사(~은/는/이/가/을/를 등)가 있어서 이거때문에

사실상 제대로 된 탐색이 안 되더군요..

예를 들어 간단히 이런 코드를 짜보면..

Text = "나의 취미는 파이썬으로 프로그래밍 코드를 작성하는 것입니다. 프로그래밍은 재밌고, 파이썬은 쉽습니다."   # 문자열 

Text.split()   # 리스트 데이터

key_word1 = "파이썬"
key_word2 = "프로그래밍"
key_word3 = "취미"

kw_list = [key_word1, key_word2, key_word3]   # 키워드 리스트 작성

count = 0
N=3
for i in range (N):
    if kw_list[i] in Text.split():
        count += 1
        print(count, kw_list[i])
    else :
        print(0, kw_list[i])

예를 들면 "파이썬" 이라는 키워드를 문자열에서 탐색하게 하면.,.

"파이썬은" 이나 "파이썬을" 이런 표현을 "파이썬"으로 감지해내지 못하더군요.,ㅡㅡ;

영어에서는 모든 품사가 개별적으로 띄어쓰기 되어있으니 아무 문제 없을 것 같은데

막상 한글문서로 테스트해보니 생각지도 못했던 난점이 있었습니다.

이 문제를 풀려고 여기저기 알아보다보니.. github쪽에서 자연어 처리나 형태소 분석기 학습까지

접근하게 되었는데..ㅡㅡ; 이게 정말 그렇게 어려운 문제인가요??

제가 원래 연구소에서 텐서플로우 등으로 머신러닝을 다루고는 있습니다만 자연어처리는

저와는 관련 없는 주제일 거라 생각했는데, 생각지도 못한 곳에서 마주치게 되었네요 ㅎㅎ

혹시 이걸 쉽게 처리할 수 있는 방법이나 관련 소스를 알고 계시는 고수분이 있다면

조언 부탁드리겠습니다. ㅜ.ㅜ

2 답변

  • 좋아요

    3

    싫어요
    채택 취소하기

    안녕하세요, 정규식을 이용해 특정 문자열을 검색하는 방법을 이용하시면 되요.

    더 훌륭한 방법이 있을테지만, 아래 방법으로 힌트를 얻어보세요.

    import re
    Text = "나의 취미는 파이썬으로 프로그래밍 코드를 작성하는 것입니다. 프로그래밍은 재밌고, 파이썬은 쉽습니다."   # 문자열
    
    p = re.compile('파이썬')
    m = p.findall(Text)
    print(len(m))
    print(m)
    

    정규식에 대해 더 알고싶으시다면 다음의 사이트를 방문해 보세요. https://wikidocs.net/4308#_5

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 아... 정규식이란게 생각보다 어렵네요 ㅎㅎ 답변 감사드립니다.!! 박형선 2019.3.4 08:41
  • 해당 문제는 정확히 하려면 형태소 분석이 필요합니다.

    질문자가 잘 이해하고 있는 겁니다. 단순히 정규식의 탐색으론 정확한 처리가 어렵습니다.

    구체적으로는 "파이썬으로" 에서 "파이썬" 이라는 명사만 추출하는 것이 필요합니다.

    "감기는" <-- 이것을 한번 고민해보죠...

    감 <- 명사(먹는 감)

    감기 <- 명사(콜록콜록 감기)

    감기다 <- 머리를 감기는 중...

    감기다 <- 실을 감다

    이렇게 다양하게 사용될 수 있기 때문에 단순히 글자로 처리하면 정확한 처리가 어렵습니다.

    그래서 명사, 동사 등등을 정의하는 과정이 필요합니다. 사실 질문자의 경우는 명사만 추출이겠죠.

    한국어에 대한 형태소 분석 관련 프로젝트가 몇 됩니다.

    그중 파이썬기반은 http://konlpy.org/ko/latest/ 이 대표적입니다.

    • 그렇군요!! ㅎㅎ 답변 감사합니다 박형선 2019.3.4 08:40

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)