본문으로 바로가기

Python nltk 패키지로 수사를 찾아보자.

category Senior Project/Notes 2022. 5. 30. 18:58

목적은 이 사람이 주문할 의도가 있는지 분석하는 것이다.

그리고 메뉴와 갯수를 추출해야만 한다.

 

처음에는 NLP로 문장을 분석할 때 무조건 한국어 NLP 로 해야한다고 생각했다.

메뉴 이름을 추출하려면 무조건 한국어로 뽑아야 하기 때문이다.

 

하지만 이건 좁은 시각의 판단이고, 메뉴 이름을 제외한 다른 단어 추츨은 문장을 영어로 번역하여 영어 NLP 로 처리하는 게 낫다.

대표적으로 수사 추출이다. 메뉴와 개수(수사) 리스트는 함께 뽑혀야 한다.

 

Konlpy 는 로딩도 너무 오래걸리고, 한국어 NLP 난이도 자체가 너무 압도적으로 높다.

한국어는 어간에 접사가 붙어 의미가 달라지는 교착어이기 때문이다. 영어는 어순만 신경쓰면 되는 고립어다.

 

다음과 같은 문장들이 있다고 치자.

 

"셋 정도 하고 쉰다"
"세 개 하고 쉰다"
"3 개 하고 쉰다"

 

한국어는 '3' 을 나타내는 수사에도 NLP 태그가 세개씩이나 나눠진다.

-셋( NR = 수사) , 세( MM = 부사 ) , 3( SN = 단순숫자)

 

수많은 숫자들에 이런걸 매핑해주려면 너무나 복잡한 노동을 야기한다.

word2num 같은 패키지라도 쓸수 있으면 좋으련만 이런 패키지에는 심지어 한국어 모듈이 없다.

 

영어는 '고립어'이기 때문에 수사가 이렇게 많은 방식으로 나뉘어 지지 않는다.

영어에서 수사는 'CD' (cardinal digit) 이라는 태그 하나로 고정되기 때문에, 훨씬 편리하다.

 

그리고 문장에서 얻은 수사를 word2num 패키지로 숫자로 변환 해주기만 하면 되기 때문에 한국어 NLP 를 거칠 때보다 훨씬 낮은 난이도로 수사를 추출할 수 있다.