Loading...
MySQL 9.5 Reference Manual 9.5의 14.9.9 MeCab Full-Text Parser Plugin의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
내장된 MySQL 전체 텍스트 파서는 단어 사이의 공백을 구분 기호로 사용하여 단어의 시작과 끝을 판단하는데, 이는 단어 구분 기호를 사용하지 않는 표의문자 언어를 다룰 때의 한계가 됩니다. 이 한계를 일본어에 대해 해소하기 위해 MySQL은 MeCab 전체 텍스트 파서 플러그인을 제공합니다. MeCab 전체 텍스트 파서 플러그인은 InnoDB 및 MyISAM에서 사용을 지원합니다.
참고
MySQL은 일본어를 지원하는 ngram 전체 텍스트 파서 플러그인도 제공합니다. 자세한 내용은 Section 14.9.8, “ngram Full-Text Parser”를 참조하십시오.
MeCab 전체 텍스트 파서 플러그인은 일본어용 전체 텍스트 파서 플러그인으로, 텍스트의 시퀀스를 의미 있는 단어로 토큰화합니다. 예를 들어, MeCab은 “データベース管理” (“Database Management”)을 “データベース” (“Database”)와 “管理” (“Management”)으로 토큰화합니다. 반면에 ngram 전체 텍스트 파서는 텍스트를 서로 인접한 n 개의 문자 시퀀스로 토큰화하며, 여기서 n 은 1에서 10 사이의 숫자를 의미합니다.
텍스트를 의미 있는 단어로 토큰화하는 것 외에도, MeCab 인덱스는 일반적으로 ngram 인덱스보다 작고, MeCab 전체 텍스트 검색은 일반적으로 더 빠릅니다. 한 가지 단점은 ngram 전체 텍스트 파서와 비교했을 때 MeCab 전체 텍스트 파서가 문서를 토큰화하는 데 더 오래 걸릴 수 있다는 점입니다.
Section 14.9, “Full-Text Search Functions”에 설명된 전체 텍스트 검색 구문은 MeCab 파서 플러그인에도 적용됩니다. 파싱 동작의 차이점은 이 섹션에 설명되어 있습니다. 전체 텍스트 관련 구성 옵션 또한 적용 가능합니다.
MeCab 파서에 대한 추가 정보는 Github의 MeCab: Yet Another Part-of-Speech and Morphological Analyzer 프로젝트를 참조하십시오.
MeCab 파서 플러그인에는 mecab 및 mecab-ipadic이 필요합니다.
지원되는 Fedora, Debian 및 Ubuntu 플랫폼(단, Ubuntu 12.04는 시스템 mecab 버전이 너무 오래되었기 때문에 제외)에서는, 시스템 mecab이 기본 위치에 설치되어 있으면 MySQL이 해당 설치본에 동적으로 링크합니다. 그 외 지원되는 유닉스 계열 플랫폼에서는 libmecab.so가 정적으로 libpluginmecab.so에 링크되며, 이는 MySQL 플러그인 디렉터리에 위치합니다. mecab-ipadic은 MySQL 바이너리에 포함되어 있으며 MYSQL_HOME\lib\mecab에 위치합니다.
mecab 및 mecab-ipadic은 네이티브 패키지 관리 유틸리티(Fedora, Debian, Ubuntu에서)로 설치할 수 있으며, 또는 소스에서 mecab 및 mecab-ipadic을 빌드할 수도 있습니다. 네이티브 패키지 관리 유틸리티를 사용하여 mecab 및 mecab-ipadic을 설치하는 방법은 Installing MeCab From a Binary Distribution (Optional)를 참조하십시오. mecab 및 mecab-ipadic을 소스에서 빌드하려면 Building MeCab From Source (Optional)를 참조하십시오.
Windows에서는 libmecab.dll이 MySQL bin 디렉터리에 있습니다. mecab-ipadic은 MYSQL_HOME/lib/mecab에 위치합니다.
MeCab 파서 플러그인을 설치하고 구성하려면 다음 단계를 수행하십시오:
MySQL 구성 파일에서, MeCab의 구성 파일인 mecabrc 구성 파일의 위치로 mecab_rc_file 구성 옵션을 설정합니다. MySQL에서 배포된 MeCab 패키지를 사용하는 경우, mecabrc 파일은 MYSQL_HOME/lib/mecab/etc/에 있습니다.
1[mysqld] 2loose-mecab-rc-file=MYSQL_HOME/lib/mecab/etc/mecabrc
loose 프리픽스는 옵션 한정자입니다. mecab_rc_file 옵션은 MeCaB 파서 플러그인이 설치될 때까지 MySQL에서 인식되지 않지만, MeCaB 파서 플러그인을 설치하기 전에 설정되어 있어야 합니다. loose 프리픽스를 사용하면, 인식되지 않는 변수로 인한 오류 없이 MySQL을 재시작할 수 있습니다.
자체 MeCab 설치를 사용하거나 MeCab을 소스에서 빌드하는 경우, mecabrc 구성 파일의 위치는 다를 수 있습니다.
MySQL 구성 파일과 그 위치에 대한 정보는 Section 6.2.2.2, “Using Option Files”를 참조하십시오.
또한 MySQL 구성 파일에서 MeCab 파서와 함께 사용하도록 권장되는 값인 1 또는 2로 최소 토큰 크기를 설정합니다. InnoDB 테이블의 경우, 최소 토큰 크기는 기본값이 3인 innodb_ft_min_token_size 구성 옵션으로 정의됩니다. MyISAM 테이블의 경우, 최소 토큰 크기는 기본값이 4인 ft_min_word_len으로 정의됩니다.
1[mysqld] 2innodb_ft_min_token_size=1
사용할 사전을 지정하도록 mecabrc 구성 파일을 수정합니다. MySQL 바이너리와 함께 배포되는 mecab-ipadic 패키지에는 세 개의 사전(ipadic_euc-jp, ipadic_sjis, ipadic_utf-8)이 포함됩니다. MySQL과 함께 제공되는 mecabrc 구성 파일에는 다음과 유사한 엔트리가 포함되어 있습니다:
1dicdir = /path/to/mysql/lib/mecab/lib/mecab/dic/ipadic_euc-jp
예를 들어, ipadic_utf-8 사전을 사용하려면 엔트리를 다음과 같이 수정합니다:
1dicdir=MYSQL_HOME/lib/mecab/dic/ipadic_utf-8
자체 MeCab 설치를 사용하거나 MeCab을 소스에서 빌드한 경우, mecabrc 파일의 기본 dicdir 엔트리와 사전 및 그 위치가 다를 가능성이 높습니다.
참고
MeCab 파서 플러그인이 설치된 후에는 mecab_charset 상태 변수를 사용하여 MeCab과 함께 사용되는 문자 집합을 확인할 수 있습니다. MySQL 바이너리에 포함된 세 개의 MeCab 사전은 다음 문자 집합을 지원합니다.
ipadic_euc-jp 사전은 ujis 및 eucjpms 문자 집합을 지원합니다.ipadic_sjis 사전은 sjis 및 cp932 문자 집합을 지원합니다.ipadic_utf-8 사전은 utf8mb3 및 utf8mb4 문자 집합을 지원합니다.mecab_charset는 지원되는 문자 집합 중 첫 번째만 보고합니다. 예를 들어, ipadic_utf-8 사전은 utf8mb3와 utf8mb4 모두를 지원합니다.
mecab_charset는 이 사전이 사용 중일 때 항상 utf8을 보고합니다.
MySQL을 재시작합니다.
MeCab 파서 플러그인을 설치합니다:
MeCab 파서 플러그인은 INSTALL PLUGIN을 사용하여 설치합니다. 플러그인 이름은 mecab이고, 공유 라이브러리 이름은 libpluginmecab.so입니다. 플러그인 설치에 대한 추가 정보는 Section 7.6.1, “Installing and Uninstalling Plugins”를 참조하십시오.
1INSTALL PLUGIN mecab SONAME 'libpluginmecab.so';
설치가 완료되면, MeCab 파서 플러그인은 일반적인 MySQL 재시작 시마다 로드됩니다.
SHOW PLUGINS 문을 사용하여 MeCab 파서 플러그인이 로드되었는지 확인합니다.
1mysql> SHOW PLUGINS;
플러그인 목록에 mecab 플러그인이 나타나야 합니다.
MeCab 파서를 사용하는 FULLTEXT 인덱스를 생성하려면, CREATE TABLE, ALTER TABLE 또는 CREATE INDEX에서 WITH PARSER ngram을 지정합니다.
다음 예제에서는 mecab FULLTEXT 인덱스가 있는 테이블을 생성하고, 샘플 데이터를 삽입한 후, Information Schema INNODB_FT_INDEX_CACHE 테이블에서 토큰화된 데이터를 조회하는 방법을 보여줍니다:
1mysql> USE test; 2 3mysql> CREATE TABLE articles ( 4 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, 5 title VARCHAR(200), 6 body TEXT, 7 FULLTEXT (title,body) WITH PARSER mecab 8 ) ENGINE=InnoDB CHARACTER SET utf8mb4; 9 10mysql> SET NAMES utf8mb4; 11 12mysql> INSERT INTO articles (title,body) VALUES 13 ('データベース管理','このチュートリアルでは、私はどのようにデータベースを管理する方法を紹介します'), 14 ('データベースアプリケーション開発','データベースアプリケーションを開発することを学ぶ'); 15 16mysql> SET GLOBAL innodb_ft_aux_table="test/articles"; 17 18mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE ORDER BY doc_id, position;
기존 테이블에 FULLTEXT 인덱스를 추가하려면 ALTER TABLE 또는 CREATE INDEX를 사용할 수 있습니다. 예를 들면 다음과 같습니다:
1CREATE TABLE articles ( 2 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, 3 title VARCHAR(200), 4 body TEXT 5 ) ENGINE=InnoDB CHARACTER SET utf8mb4; 6 7ALTER TABLE articles ADD FULLTEXT INDEX ft_index (title,body) WITH PARSER mecab; 8 9# Or: 10 11CREATE FULLTEXT INDEX ft_index ON articles (title,body) WITH PARSER mecab;
MeCab 파서는 쿼리 문자열에서 공백을 구분 기호로 사용합니다. 예를 들어, MeCab 파서는 データベース管理을 データベース 및 管理으로 토큰화합니다.
기본적으로 MeCab 파서는 짧은 영어 스톱워드 목록을 포함하는 기본 스톱워드 목록을 사용합니다. 일본어에 적용할 수 있는 스톱워드 목록을 사용하려면 직접 생성해야 합니다. 스톱워드 목록 생성에 대한 정보는 Section 14.9.4, “Full-Text Stopwords”를 참조하십시오.
내추럴 랭귀지 모드 검색의 경우, 검색어는 토큰의 유니온으로 변환됩니다. 예를 들어, データベース管理은 データベース 管理으로 변환됩니다.
1SELECT COUNT(*) FROM articles 2 WHERE MATCH(title,body) AGAINST('データベース管理' IN NATURAL LANGUAGE MODE);
불리언 모드 검색의 경우, 검색어는 검색 구로 변환됩니다. 예를 들어, データベース管理은 データベース 管理으로 변환됩니다.
1SELECT COUNT(*) FROM articles 2 WHERE MATCH(title,body) AGAINST('データベース管理' IN BOOLEAN MODE);
와일드카드 검색어는 토큰화되지 않습니다. データベース管理*에 대한 검색은 접두사인 データベース管理에 대해 수행됩니다.
1SELECT COUNT(*) FROM articles 2 WHERE MATCH(title,body) AGAINST('データベース*' IN BOOLEAN MODE);
구는 토큰화됩니다. 예를 들어, データベース管理은 データベース 管理으로 토큰화됩니다.
1SELECT COUNT(*) FROM articles 2 WHERE MATCH(title,body) AGAINST('"データベース管理"' IN BOOLEAN MODE);
이 섹션에서는 네이티브 패키지 관리 유틸리티를 사용하여 바이너리 배포본에서 mecab 및 mecab-ipadic을 설치하는 방법을 설명합니다. 예를 들어, Fedora에서는 Yum을 사용하여 설치를 수행할 수 있습니다:
1$> yum mecab-devel
Debian 또는 Ubuntu에서는 APT 설치를 수행할 수 있습니다:
1$> apt-get install mecab 2$> apt-get install mecab-ipadic
mecab 및 mecab-ipadic을 소스에서 빌드하려는 경우, 기본적인 설치 단계는 아래에 제공되어 있습니다. 추가 정보는 MeCab 문서를 참조하십시오.
mecab과 mecab-ipadic의 tar.gz 패키지를 http://taku910.github.io/mecab/#download에서 다운로드합니다. 2016년 2월 현재, 사용 가능한 최신 패키지는 mecab-0.996.tar.gz 및 mecab-ipadic-2.7.0-20070801.tar.gz입니다.
mecab을 설치합니다:
1$> tar zxfv mecab-0.996.tar 2$> cd mecab-0.996 3$> ./configure 4$> make 5$> make check 6$> su 7$> make install
mecab-ipadic을 설치합니다:
1$> tar zxfv mecab-ipadic-2.7.0-20070801.tar 2$> cd mecab-ipadic-2.7.0-20070801 3$> ./configure 4$> make 5$> su 6$> make install
WITH_MECAB CMake 옵션을 사용하여 MySQL을 컴파일합니다. mecab 및 mecab-ipadic을 기본 위치에 설치한 경우, WITH_MECAB 옵션을 system으로 설정합니다.
1 -DWITH_MECAB=system
커스텀 설치 디렉터리를 정의한 경우, WITH_MECAB을 커스텀 디렉터리로 설정합니다. 예를 들면 다음과 같습니다:
1 -DWITH_MECAB=/path/to/mecab
14.9.8 ngram Full-Text Parser
14.10 Cast Functions and Operators