형태소 분석기 설치 및 적용
형태소 분석기란(Morphological Analyzer)란?
자연어 처리에서 사용되는 도구로, 문장을 구성하는 단어를 형태소 단위로 분석하는 작업을 수행합니다.
형태소란 언어에서 의미를 가지는 가장 작은 단위로, 보통 명사, 동사, 형용사, 부사 등과 같은 단어 형태로 나타납니다.
형태소 분석기는 주어진 문장을 형태소 단위로 분할하고, 각 형태소의 품사(POS, Part-of-Speech)를 결정하는 작업을 수행합니다. 품사 정보는 문장의 구조를 파악하고, 문장을 다른 단위로 분석하거나 처리하는 데에 활용될 수 있습니다.
또한, 형태소 분석은 텍스트 마이닝, 정보 검색, 기계 번역 등 다양한 자연어 처리 작업의 전처리 과정에서 중요한 역할을 합니다.
형태소 분석기는 주로 기계 학습 알고리즘을 사용하여 구현됩니다. 예를 들어, 통계적인 접근 방식을 사용하는 Hidden Markov Model (HMM)이나 Conditional Random Fields (CRF)와 같은 알고리즘이 활용될 수 있습니다. 또한, 한국어 형태소 분석기로는 KoNLPy(코엔엘파이), 은전한닢 프로젝트의 mecab-ko 등이 널리 사용되고 있습니다.
형태소 분석기를 사용하면 문장을 형태소 단위로 분석하여 품사 정보를 추출할 수 있으며, 이를 토대로 다양한 자연어 처리 작업을 수행할 수 있습니다
왜 사용하는가?
주로 주소를 맵핑하거나 비정제된 텍스트를 정제 할 때 많이 사용합니다.
불특정 하게 들어오는 주소를 가지고 시군구 읍면동을 체계적으로 나눈다면 맵핑 데이터로써 활용가치가 높아지겠죠
형태소 분석기를 설치하려는 환경은 우분투 22.04 + postgres 12 버전입니다.
목차
1. 다운로드
2. 빌드도구설치
3. mecab-ko 설치
4. mecab-ko-dic 설치
5. textsearch_ko 설치
6. Postgresql 설정
7. 사용자사전추가
8. 테스트
1. 다운로드
https://bitbucket.org/eunjeon/mecab-ko/downloads/
mecab-0.996-ko-0.9.2.tar.gz
eunjeon / mecab-ko / Downloads — Bitbucket
For large uploads, we recommend using the API. Get instructions
bitbucket.org
https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/
mecab-ko-dic-2.1.1-20180720.tar.gz
eunjeon / mecab-ko-dic / Downloads — Bitbucket
For large uploads, we recommend using the API. Get instructions
bitbucket.org
https://github.com/i0seph/textsearch_ko
textsearch_ko-master.zip
GitHub - i0seph/textsearch_ko: mecab 형태소 분석기와 mecab-ko-dic 사전을 이용한 PostgreSQL용 한국어 전문검
mecab 형태소 분석기와 mecab-ko-dic 사전을 이용한 PostgreSQL용 한국어 전문검색 full text search 확장모듈 - GitHub - i0seph/textsearch_ko: mecab 형태소 분석기와 mecab-ko-dic 사전을 이용한 PostgreSQL용 한국어 전문
github.com
다운로드한 3개의 파일을 우분투 서버에 업로드합니다.
2. 빌드도구 설치
빌드도구가 이미 설치되어 있다면 설치할 필요 없습니다.
빌드에 필요한 각종 기본 개발도구 및 라이브러리 gcc g++ make c++ 등등 설치
sudo apt-get update
sudo apt install build-essential
설치확인
gcc --version
3. mecab-ko 설치
tar -xvzf mecab-0.996-ko-0.9.2.tar.gz
cd mecab-0.996-ko-0.9.2/
./configure
make
make check
sudo make install
...
-gen '/usr/local/libexec/mecab'
libtool: install: /usr/bin/install -c .libs/mecab-dict-index /usr/local/libexec/mecab/mecab-dict-index
libtool: install: /usr/bin/install -c .libs/mecab-dict-gen /usr/local/libexec/mecab/mecab-dict-gen
libtool: install: /usr/bin/install -c .libs/mecab-cost-train /usr/local/libexec/mecab/mecab-cost-train
libtool: install: /usr/bin/install -c .libs/mecab-system-eval /usr/local/libexec/mecab/mecab-system-eval
libtool: install: /usr/bin/install
4. mecab-ko-dic 설치
tar -xvzf mecab-ko-dic-2.1.1-20180720.tar.gz
cd mecab-ko-dic-2.1.1-20180720/
./autogen.sh
Looking in current directory for macros.
configure.ac:2: warning: AM_INIT_AUTOMAKE: two- and three-arguments forms are deprecated. For more info, see:
configure.ac:2: http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_005fINIT_005fAUTOMAKE-invocation
-- 아래와 같은 에러 발생시 autotools-dev, automake 설치
./autogen.sh: 11: ./autogen.sh: aclocal: not found
./autogen.sh: 14: ./autogen.sh: autoconf: not found
./autogen.sh: 15: ./autogen.sh: automake: not found
sudo apt-get install autotools-dev
sudo apt-get install automake
./configure
make
-- libmecab.so.2를 찾을 수 없는 에러가 나는 경우 라이브러리를 다시 링크하고 확인후 재시도
sudo ldconfig
sudo make install
위 안될경우 autogen.sh 실행하고 sudo make install 실행
5. textsearch_ko 설치
unzip textsearch_ko-master.zip
-- unzip이 없을경우
[root@localhost etc]# sudo apt install unzip
#build.sh 아래와 같이 설정
cd textsearch_ko-master/
vi ./build.sh
#최초설치시 아래와 같다. 버전만 살짝 바꿔줘서 테스트완료 되었다.
export PATH=/data/pgsql/12/bin:/data/mecab-ko/bin:$PATH
C_INCLUDE_PATH=/data/mecab-ko/include LIBRARY_PATH=/data/mecab-ko/lib make USE_PGXS=1 install
#패키지 설치확인 없는패키지 재설치
apt list --installed | grep postgres
sudo apt-get install libpq-dev
sudo apt-get install postgresql-server-dev-1
sudo apt-get install postgresql-common
pg_config --pgxs
#빌드
sudo ./build.sh
#설치확인
ls -al /usr/lib/postgresql/12/lib/ts_mecab_ko.so
-rwxr-xr-x 1 root root 93264 12월 7 10:24 /usr/lib/postgresql/12/lib/ts_mecab_ko.so*
위 testsearch_ko 설치확인까지 오셨다면 90% 되었습니다.
6. Postgresql 설정
기본설정 postgres 계정으로 psql -f ts_mecab_ko.sql 적용Databas명
textsearch_ko-master 폴더에서 ts_mecab_ko.sql 파일을 postgresql로 옮겨줍니다.
cp /home/tomcat/textsearch_ko-master/ts_mecab_ko.sql /etc/postgresql/ts_mecab_ko.sql
postgres 계정변환 및 ts_mecab_ko.sql을 적용할 psql 실행
su postgres
psql -f ts_mecab_ko.sql 적용될데이터베이스명
7. 사용자사전추가
추가단어등록 mecab-ko-dic/userdic 디렉토리 안에 csv 확장자로 사전 파일을 추가
cd /home/yama/mecab-ko-dic-2.1.1-20180720/user-dic
#결과
userdic/
├── nnp.csv
├── person.csv
└── place.csv
#명사추가
vi nnp.csv
대우,,,,NNP,*,F,대우,*,*,*,*
구글,,,,NNP,*,T,구글,*,*,*,*
티스토리,,,,NNP,*,T,티스토리,*,*,*,*,*
#인명추가
vi persion.csv
은비,,,,NNP,인명,F,은비,*,*,*,*
#지명추가
vi place.csv
세종,,,,NNP,지명,T,세종,*,*,*,*
세종시,,,,NNP,지명,F,세종시,Compound,*,*,세종/NNP/지명+시/NNG/*
#사전추가 add-userdic.sh을 실행후 user-xxx.csv 사전이 추가된 모습을 볼 수 있음
/home/yama/mecab-ko-dic-2.1.1-20180720/tools/add-userdic.sh
tree
#위 tree 없을경우 설치 sudo apt tree install
.
......
├── user-dic
│ ├── README.md
│ ├── nnp.csv
│ ├── person.csv
│ └── place.csv
├── user-nnp.csv
├── user-person.csv
└── user-place.csv
#재컴파일 mecab-ko-dic-2.1.1-20180720 안에서 실행한다.
pwd
~~/mecab-ko-dic-2.1.1-20180720
sudo make clean
sudo make
sudo make install
#추가된 단어 확인
mecab -d /usr/local/lib/mecab/dic/mecab-ko-dic
티스토리 입니다 경기도에 없습니다
티스토리 NNP,*,T,웹스타일,*,*,*,*,*
입니다 VCP+EF,*,F,입니다,Inflect,VCP,EF,이/VCP/*+ᄇ니다/EF/*
경기도 NNP,지명,F,경기도,Compound,*,*,경기/NNG/*+도/NNG/*
에 JKB,*,F,에,*,*,*,*
없 VA,*,T,없,*,*,*,*
습니다 EF,*,F,습니다,*,*,*,*
EOS
[root@localhost etc]# su postgres
[root@localhost etc]# psql
postgres=# select * from mecabko_analyze('서울시 성동구 답십리동 티스토리 입니다');
word | type | part1st | partlast | pronounce | conjtype | conjugation | basic | detail | lucene
----------+------+---------+----------+-----------+----------+-------------+-------+--------------------------+----------
서울시 | NNP | 지명 | F | 서울시 | Compound | | | 서울/NNP/지명+시/NNG/* | 서울시
성동구 | NNP | 지명 | F | 성동구 | Compound | | | 성동/NNP/지명+구/NNG/* | 성동구
답십리동 | NNP | 지명 | T | 답십리동 | Compound | | | 답십리/NNP/지명+동/NNG/* | 답십리동
티스토리 | NNP | | T | 티스토리 | | | | |
이 | VCP | | F | 이 | | | | |
ᄇ니다 | EC | | F | ᄇ니다 | | | | |
(6 rows)
8.테스트
SELECT *
FROM MECABKO_ANALYZE('서울특별시 강남구 강남대로 408');
위까지 되었다면 형태소분석기 설치 완료 끄읏~
이제 위 형태소분석기를 가지고 다양한 산업군에서 활용할 수 있다.
아래 결과는 형태소분석기 + 도로명주소 + 읍면동 주소 + 우편번호 등을 조합하여 마스터를 생성한 후 형태소 분석기에서
나온 결과를 가지고 각 주소 마스터와 맵핑하여 아래와 같이 도출한다.
INPUT : 서울특별시 강남구 강남대로 408
OUTPUT : 서울특별시 강남구 역삼동 강남대로 408로 변환된 결과를 알 수 있다.
여기까지 형태소분석기 포스팅을 마칩니다.
오늘도 보람찬 생존 ^.^