环境:对日开发语言处理
要求:分析词语,将词语中的日文单词分割,转换形式。
分析:
任务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用法:
1 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操作,不然会很慢很慢很慢,此时可以定义成静态常量或者单例模式。
欢迎大家评论和指教。