졸업 프로젝트를 진행하면서 자연어 처리를 해야할 일이 생겼다.
자연어 처리의 첫 단계가 형태소 분석기를 사용해서 문서를 형태소로 나누는 것이다.
1. 형태소란 ?
먼저 형태소에 대해 조금 알아보자면 형태소의 사전적 정의는 '의미를 가지는 요소로서는 더 이상 분석할 수 없는 가장 작은 말의 단위' 이다. 예를 들어, '아버지가방에들어가신다' 라는 문장을 형태소로 나눠보면 ['아버지', '가', '방', '에', '들어가', '신다'] 이런 식으로 나올 것이다. 명사, 동사, 조사, 접두어 등으로 문장을 나눈 다음 본인이 원하는 과정을 처리를 하면 된다.
2. 사용할 라이브러리
서버에서 사용할 예정이라 최대한 빠르고 가벼운 라이브러리를 선택하고 싶었다. 형태소 분석기를 간단하게 비교한 블로그가 있어서 그 글을 참고했다.
사진 출처 : https://soohee410.github.io/compare_tagger
네이버 리뷰 10000개를 형태소 분석기로 분석하는 시간을 체크한 표이다. mecab이 1초로 다른 분석기에 비해 압도적인 속도를 보여줬다. 꼬마의 경우 매우 느리지만 형태소 분석을 정확하게 하는 분석기다. 코모란같은 경우도 빠르긴 하지만 띄어쓰기나 오타를 잘 처리하지 못하는 것 같았다. okt의 경우 오타까지 고쳐주는 좋은 성능을 가지고 있지만 내가 원하는 속도가 아니었다. 각자 다른 용도로 사용하면 좋을 것 같다.
3. mecab 설치하기
node.js 서버에서 사용하기 위해 아래의 mecab 라이브러리를 설치했다.
https://github.com/golbin/node-mecab-ya
사용할 서버에서 npm으로 라이브러리를 설치한다.
npm install mecab-ya
그 다음 필요한 언어로 설치한다.
node_modules/mecab-ya/bin/install-mecab ko
실행이 되는지 확인해 보기 위해 간단한 코드를 작성했다.
비동기, 동기 둘 다 사용해봤다.
let mecab = require('mecab-ya');
let text = '아버지가방에들어가신다.';
console.log(text);
mecab.pos(text, (err, result) => {
console.log('pos : ', result);
});
mecab.morphs(text, (err, result) => {
console.log('morphs : ', result);
});
console.log('nouns : ', mecab.nounsSync(text));
결과는 아래와 같다.
pos는 형태소로 나눈 것과 품사 태그가 같이 나왔다.
morphs는 형태소로 나눈 것만 나왔다.
nouns는 명사만 나왔다.
만약 Sync함수가 없다는 경고 메시지가 나오면 위의 mecab 라이브러리 깃헙 사이트에서 mecab.js를 복사해서 node-modules/mecab-ya 의 mecab.js와 교체하면 된다.
참고한 사이트
https://soohee410.github.io/compare_tagger
https://nhj12311.tistory.com/514
https://github.com/golbin/node-mecab-ya
'JavaScript > 자연어 처리' 카테고리의 다른 글
[node.js] JavaScript 문서 유사도 검사, 추천 시스템 (0) | 2022.07.08 |
---|---|
[node.js] JavaScript TF-IDF, 코사인 유사도 검사 (0) | 2022.06.26 |