MeCab

Exisi 2023-03-27 21:14:12
Categories: Tags:
  • MeCab 全文解析器插件是用于日语的全文解析器插件,MeCab 全文解析器插件支持用于 InnoDB MyISAM

 

  • 内置的 MySQL 全文解析器使用单词之间的空格作为分隔符来确定单词的开始和结束位置,这对于不使用单词分隔符的表意语言是一个限制。为了解决日语的这个限制,MySQL 提供了一个 MeCab 全文解析器插件。

 

  • MeCab 全文解析器将文本序列标记解析为有意义的单词。例如,MeCab データベース管理”(“Database Management”) 标记解析为  データベース”(“Database”) 管理 ”(“Management”)

 

  • 相比之下,ngram 全文解析器将文本标记解析为 n 个字符的连续序列,其中 n 表示 1 10 之间的数字。

  • 除此之外,MeCab 索引通常比 ngram 索引要小,而且 MeCab 全文搜索通常更快。一个缺点是,与 ngram 全文解析器相比,MeCab 全文解析器可能需要更长的时间来标记文档。

 

 

MeCab 解析器的安装

  • MeCab 解析器插件需要 mecab 和 mecab-ipadic。 

 

  • 要安装和配置 MeCab 解析器插件,执行以下步骤: 

 

  1. 在 MySQL 配置文件中,将 mecab_rc_file 配置选项设置为 mecabrc 配置文件的位置,这是 MeCab 的配置文件。如果你使用的是与 MySQL 一起分发的 MeCab 包,mecabrc 文件位于 MYSQL_HOME/lib/mecab/etc/。 

 

[mysqld]

loose-mecab-rc-file=MYSQL_HOME/lib/mecab/etc/mecabrc

 

  •  loose (松散) 前缀是一个选项修饰符。mecab_rc_file 选项在安装 MeCaB 解析器插件之前不会被 MySQL 识别,但是在尝试安装 MeCaB 解析器插件之前必须设置它。

 

  •  loose (松散) 前缀允许重新启动 MySQL 而不会遇到由于无法识别的变量而导致的错误。 如果使用自己的 MeCab 安装,或从源代码构建 MeCab, mecabrc 配置文件的位置可能不同。 

 

  1. 在 MySQL 配置文件中,将最小标记大小设置为 1 或 2,这是推荐用于 MeCab 解析器的值。对于 InnoDB 表,最小标记大小由 innodb_ft_min_token_size 配置选项定义,默认值为 3。对于 MyISAM 表,最小标记大小由 ft_min_word_len 定义,它的默认值是 4。 

 

[mysqld]

innodb_ft_min_token_size=1

 

  1. 修改 mecabrc 配置文件以指定要使用的字典。与 MySQL 二进制文件一起发布的 mecab-ipadic 包包括三个字典(ipadic_euc-jpipadic_sjis 和 ipadic_utf-8)MySQL 中打包的 mecabrc 配置文件包含类似如下内容: 

 

dicdir =  path/to/mysql/lib/mecab/lib/mecab/dic/ipadic_euc-jp

 

 例如,要使用 ipadic_utf-8 字典,修改如下: 

 

dicdir=MYSQL_HOME/lib/mecab/dic/ipadic_utf-8

 

如果正在使用自己的 MeCab 安装或已经从源代码构建了 MeCab, mecabrc 文件中的默认 dicdir 条目可能会有所不同,字典及其位置也是如此。

 

  1. 重新启动 MySQL

 

  1. 安装 MeCab 解析器插件。MeCab 解析器插件是使用 INSTALL PLUGIN 语法安装的。插件名称是 mecab,共享库名称是 libpluginmecab.so

 

INSTALL PLUGIN mecab SONAME 'libpluginmecab.so';

 

一旦安装完毕,MeCab 解析器插件就会在 MySQL 每次正常重启时加载。

 

  1. 使用 SHOW PLUGINS 语句验证 MeCab 解析器插件是否已加载。

 

SHOW PLUGINS;

 

mecab 插件应该出现在插件列表中。

  • 在受支持的 Fedora, Debian 和 Ubuntu 平台上(除了 Ubuntu 12.04 的系统 mecab 版本太旧),如果系统 mecab 被安装到默认位置,MySQL 动态链接到系统 mecab 安装。在其他支持的类 Unix 平台上,libmecab.so 被静态链接到 libpluginmecab.solibpluginmecab.so 位于 MySQL 插件目录中。mecab-ipadic 包含在 MySQL 二进制文件中,位于 MYSQL_HOME\lib\mecab。 可以使用本地包管理工具(FedoraDebian 和 Ubuntu 上)安装 mecab 和 mecab-ipadic,或者从源代码构建 mecab 和 mecab-ipadic。 

 

  • 在 Windows 上,libmecab.dll 在 MySQL bin 目录中。mecab-ipadic 位于 MYSQL_HOME/lib/mecab。 

 

  • 安装 MeCab 解析器插件后,可以使用 mecab_charset 状态变量来查看 MeCab 使用的字符集。MySQL 二进制提供的三个 MeCab 字典支持以下字符集。

 

  • ipadic_euc-jp 字典支持 ujis 和 eucjpms 字符集
  • ipadic_sjis 字典支持 sjis 和 cp932 字符集
  • ipadic_utf-8 字典支持 utf8 和 utf8mb4 字符集。 

 

  • mecab_charset 只报告第一个支持的字符集。例如,ipadic_utf-8 字典同时支持 utf8 和 utf8mb4。当使用这个字典时,mecab_charset 总是报告 utf8

 

  • MeCab 解析器在查询字符串中使用空格作为分隔符。例如,MeCab 解析器将 データベース管理 标记解析为 データベース 和 管理。

 

 

 

MeCab 解析器的使用

  • 要创建使用 mecab 解析器的 FULLTEXT 索引,请使用 CREATE TABLEALTER TABLE CREATE INDEX 语句,并指定 WITH PARSER mecab

语法

WITH PARSER mecab

示例

USE test;

CREATE TABLE articles (
      id
INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
      title
VARCHAR(200),
      body
TEXT,
     
FULLTEXT (title,body) WITH PARSER mecab
   
) ENGINE=InnoDB CHARACTER SET utf8mb4;

SET NAMES utf8mb4;

INSERT INTO articles (title,body)

VALUES
    ('
データベース管理','このチュートリアルでは、私はどのようにデータベースを管理する方法を紹介します'),
    ('
データベースアプリケーション開発','データベースアプリケーションを開発することを学ぶ');

 

SET GLOBAL innodb_ft_aux_table="test/articles";

 

SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE

ORDER BY doc_id, position;

示例

ALTER TABLE articles

ADD FULLTEXT INDEX ft_index (title,body)

WITH PARSER mecab;

示例

CREATE FULLTEXT INDEX ft_index

ON articles (title,body)

WITH PARSER mecab;

 

 

 

MeCab 停止词处理

  • 默认情况下,MeCab 解析器使用默认终止词列表,该列表包含一个简短的英文终止词列表。对于适用于日语的终止词列表,必须自己创建。

 

 

MeCab 查询处理

对于自然语言模式搜索,搜索词被转换为标记的集合。例如,データベース管理 转化为 データベース 管理。

示例

SELECT COUNT(*) FROM articles

WHERE MATCH(title,body) AGAINST('データベース管理' IN NATURAL LANGUAGE MODE);

 

对于布尔模式搜索,搜索词被转换为搜索词组。例如,データベース管理 转化为 データベース 管理

示例

SELECT COUNT(*) FROM articles

WHERE MATCH(title,body) AGAINST('データベース管理' IN BOOLEAN MODE);

 

  • 通配符搜索词不会被标记。搜索 データベース管理* 会对前缀执行,即搜索 データベース管理

示例

SELECT COUNT(*) FROM articles

WHERE MATCH(title,body) AGAINST

('データベース*' IN BOOLEAN MODE);

 

 

 

来自 <https://dev.mysql.com/doc/refman/8.0/en/fulltext-search-mecab.html>