环境:对日开发语言处理

要求:分析词语,将词语中的日文单词分割,转换形式。

分析:

  任务1:词语拆分

  任务2:转换形式

 

日文的形式转换可以用kanavetor去实现 非常简单 直接调用Kana类的convert方法就可以,在Kana的官网上可以看到用法(即便看不懂介绍,看到管网的表格应该也就一目了然了~)。

重点在于词语的拆分上:

词语拆分使用了Kuromoji,Kuromoji是一款非常好用的日语分词工具,并且,分解后的词是可以自动将汉字,平假名等转换成カタカナ的,有类似需要的可以直接用这个而不用再去寻找其他工具了。Kuromoji我找到了两个版本,一个是kuromoji,0.7.7版本,官网上说捐献给了apache,内置在Lucene的4.0,5.0版本里,由于忘记Lucene的用法,暂且不考虑。另外一个版本是kuromoji-ipadic,这个东东和kuromoji都是一个公司出的,但是略有不同,稍微研究了一下,kuromoji在使用的时候是只能找到jar包,找不到源代码文件的,通过maven下载可以,但是gradle是引入不了的。而kuromoji-ipadic则是gradlle也可以引用,并且引入之后可以看到源码。此外kuromoji毕竟是以前的api,还有一些小小的缺陷。

kuromoji官网:http://www.atilika.org/

Kuromoji-ipadic官网:http://www.atilika.com/en/kuromoji/

Kuromoji用法:

         Tokenizer tokenizer = Tokenizer.builder().build();
2         for (Token token : tokenizer.tokenize("寿司が食べたい。")) {
        // token 中存放的是分割后的词 不同的属性可以取到该词的不同内容
              // surfaceForm:原内容
3             System.out.println(token.getSurfaceForm() + "\t" + );
              // baseForm:内容词语的基础 例如 食べたい⇒食べ
        System.out.println(token.getBaseForm() + "\t" + );
4 }

↑↑↑这个api对日文汉字的识别率不如下面的api(有些简体日文汉字和特别生僻的识别不出来,毕竟是老版本),并且遇到不认识的汉字时token调用get方法会得到null。。。不建议使用。

Kuromoji-ipadic用法:

1         Tokenizer tokenizer = new Tokenizer() ;
2         List<Token> tokens = tokenizer.tokenize("お寿司が食べたい。");
3         for (Token token : tokens) {
4             System.out.println(token.getSurface()); // 读取到的原内容
5             System.out.println(token.getReading()); // カタカナ
6         }

顺带一提,kuromoji-ipadic由于是用new产生产生实例的,所以如果你的工具或系统需要转换大量词汇,要注意不要做太多的new操作,不然会很慢很慢很慢,此时可以定义成静态常量或者单例模式。

欢迎大家评论和指教。