欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

IK分词工具的使用(java)

程序员文章站 2022-06-17 19:05:46
说明  到目前为止,就中文分词工具和中文分词方法而言,分词模型大概有10几个种类,效果较好的并不多,HMM,MMSEG之类的,当然还有深度学习的模型,paddle的模型比较好。按工具名说的话有中科院的nlpir,哈工大的ltp,不知何出的jieba,还有清华北大都有分词工具,还有很多,十几种应该有。所有工具我都看了的效果并不是他们吹嘘的那么好,很多场景都无法正常分词。主要问题:  emsp;同样的词在不同的句子中分词效果不一样;  未登录词,也就是常见的专有名词,无法处理;  歧义句子;  现在...

说明

  到目前为止,就中文分词工具和中文分词方法而言,分词模型大概有10几个种类,效果较好的并不多,HMM,MMSEG之类的,当然还有深度学习的模型,paddle的模型比较好。按工具名说的话有中科院的nlpir,哈工大的ltp,不知何出的jieba,还有清华北大都有分词工具,还有很多,十几种应该有。所有工具我都看了的效果并不是他们吹嘘的那么好,很多场景都无法正常分词。
主要问题:
  同样的词在不同的句子中分词效果不一样;
  未登录词,也就是常见的专有名词,无法处理;
  歧义句子;
  现在语言多国语言混输;
  文言文这种,常人无法看懂的文章。

这些问题解决思路:通过Natural Language Understanding和Reinforcement Learning,应该还没人研究出来;

正文

  这里用maven,IK分词找不到单独实现的包,因为它实现在lucene所以需要借用lucene-core

		<!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-core -->
		<dependency>
			<groupId>org.apache.lucene</groupId>
			<artifactId>lucene-core</artifactId>
			<version>8.6.3</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.jianggujin/IKAnalyzer-lucene -->
		<dependency>
			<groupId>com.jianggujin</groupId>
			<artifactId>IKAnalyzer-lucene</artifactId>
			<version>8.0.0</version>
		</dependency>

  java代码,注意包名这里没添加


import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.wltea.analyzer.lucene.IKAnalyzer;
import static java.lang.System.out;

import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;

public class test4 {

    public static String ikwordSplit( String content) throws Exception {
        @SuppressWarnings("resource")
		IKAnalyzer analyzer=new IKAnalyzer(true);
    	TokenStream stream = analyzer.tokenStream(null, new StringReader(content));
        stream.reset();
        CharTermAttribute term = stream.addAttribute(CharTermAttribute.class);
        
        List<String> result = new ArrayList<String>();
        while(stream.incrementToken()) {
            result.add(term.toString());
        }
        stream.close();
        return String.join("|", result);
    }
	public static void main(String[] args) throws Exception {
		out.print(ikwordSplit("明天你好"));
	}
}

总结

  分词效果一般般,还没jieba好,这是个人认知,通常分词还是能胜任。见仁见智,目前文本分词还有很长的路要走,前面的问题亟待解决!像paoding,盘古这些分词方法,据网上发文好像火过一段时间,现已消沉。

  自然语言处理分词不仅仅是中文分词,还要考虑英文、古文。世界在发展,全球文字分词也需要考虑,所以,还得做语言识别,语言识别大体比较简单uncode编码可以做到。但是拼读文字可能会识别错误,而且每个字符都要做一次文字识别,计算量还是有些大。

本文地址:https://blog.csdn.net/LearnToPain/article/details/109620101

相关标签: 代码 IK分词