日文文本分析最强王者——Kuromoji

在我认识范围内atilika完成的Kuromoji是在日文文本分析方面的最强王者。

简介

  1. kuromoji是一个开源的日文词法分析的JAVA库。

  2. 但也有Ruby,javascript,go等语言的版本,你可以在github或则语言对应的库管理工具中找到。

  3. 官网有更多的信息。

功能

《日文文本分析最强王者——Kuromoji》

你可以用它来对日文文本进行如下的处理,包括且不仅包括:

  1. 分词

  2. 给出读音( 包括汉字)

  3. 词性

  4. 词干提取

  5. ……

你也可以在kuromoji.js的playground尝试kuromoji

使用

作为一名前端小卒,我就以js版的kuromoji来做示范吧,JAVA同胞们可以看这里JAVA简要教程

安装

kuromoji的npm页面在这里

在 Node.js 中使用:

先通过npm来安装到项目中

npm install kuromoji

再在JS文件中引用其。

var kuromoji = require("kuromoji");

接来下你可以如下来实例化一个解析器。

kuromoji.builder({ dicPath: "指定/对应的路径/到你使用/的/词典上去" }).build(function (err, tokenizer) {
    // tokenizer is ready
    var path = tokenizer.tokenize("すもももももももものうち");
    console.log(path);
});
/* !!注意 !!
*
* Kuromoji可以指定不同的词典,因此在实例化解析器的过程中需要指定使用
* 词典的路径,`kuromoji.builder`中的参数的`dicPath`的值应指向使用
* 得词典。
* 若在node.js中使用,一般来说直接使用该库中的字典即可,即设置
*     {dicPath:"./node_modules/kuromoji/dict/"}
*/

在 浏览器 中使用:

如果使用npm安装,那么你需要使用到包中的build/kuromoji.jsdict/*.dat.gz下的文件。

你可以直接使用前端模块管理Bower来安装浏览器专用的kuromoji

bower install kuromoji

你也可以直接使用github、CDN等其他网络链接的方式来引入该文件。

<script src="url/to/kuromoji.js"></script>

再在你的JS中这样使用

设置路径到kuromoji.builder({ dicPath: "指定/对应的路径/到你使用/的/词典上去" }).build(function (err, tokenizer) {
    // tokenizer is ready
    var path = tokenizer.tokenize("すもももももももものうち");
    console.log(path);
});
/* !!注意 !!
*
* Kuromoji可以指定不同的词典,因此在实例化解析器的过程中需要指定使用
* 词典的路径,`kuromoji.builder`中的参数的`dicPath`的值应指向使用
* 得词典。
* 若在浏览器中使用,则设置路径到对应的网络位置就好。
* 比如字典放在了 http://apps.bdimg.com/libs/kuromoji.js/0.3.2/dict/
* 就设置{ dicPath:"http://apps.bdimg.com/libs/kuromoji.js/0.3.2/dict/" }
*/

API

tokenize()函数将会返回一个如下格式的JSON数组:

[ {
    word_id: 509800,          // 词典中的词所在ID
    word_type: 'KNOWN',       // 单词类型(存在词典的为KNOWN,不存在的为UNKNOWN)
    word_position: 1,         // 单词开始的位置
    surface_form: '黒文字',    // 单词的表面(不知什么意思)
    pos: '名詞',               // 词性
    pos_detail_1: '一般',      // 词性细分类别1
    pos_detail_2: '*',        // 词性细分类别2
    pos_detail_3: '*',        // 词性细分类别3
    conjugated_type: '*',     // 活用型
    conjugated_form: '*',     // 活用形
    basic_form: '黒文字',      // 基本型
    reading: 'クロモジ',       // 阅读
    pronunciation: 'クロモジ'  // 发育
  } ]

以处理 “世界の神” 为例子

tokenizer.tokenize("世界の神");

将会返回

[  { word_id: 2633350,
    word_type: 'KNOWN',
    word_position: 6,
    surface_form: '世界',    
    pos: '名詞',
    pos_detail_1: '一般',
    pos_detail_2: '*',
    pos_detail_3: '*',
    conjugated_type: '*',
    conjugated_form: '*',
    basic_form: '世界',
    reading: 'セカイ',
    pronunciation: 'セカイ' },
  { word_id: 93100,
    word_type: 'KNOWN',
    word_position: 8,
    surface_form: 'の',
    pos: '助詞',
    pos_detail_1: '連体化',
    pos_detail_2: '*',
    pos_detail_3: '*',
    conjugated_type: '*',
    conjugated_form: '*',
    basic_form: 'の',
    reading: 'ノ',
    pronunciation: 'ノ' },
  { word_id: 2771160,
    word_type: 'KNOWN',
    word_position: 9,
    surface_form: '神',
    pos: '名詞',
    pos_detail_1: '一般',
    pos_detail_2: '*',
    pos_detail_3: '*',
    conjugated_type: '*',
    conjugated_form: '*',
    basic_form: '神',
    reading: 'カミ',
    pronunciation: 'カミ' },
]

备注

你尝试了一下,然后会发现kuromoji虽然强大,但是有一个问题——慢。

不过别担心,kuromojin(node.js)可以帮你解决这个问题。

kuromojin

kuromojin是一个对kuromoji进行了高度包装的语法糖,并且还实现了缓冲层来保证速度。

使用kuromojin,你可以:

  1. 不用设置词典的地址。

  2. 实例化解析器后,除了第一次之外,之后的速度会非常块。

  3. 基于Promise实现了APi。

使用方面它的文档已经很详细,RDD我就不多作介绍了。

关联

可以将 日文汉字 转换成 平假名,片假名或Romaji 的 KAKASI

    原文作者:RDDcoding
    原文地址: https://segmentfault.com/a/1190000009913094
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞