IK分词工具的使用(java)
说明
到目前为止,就中文分词工具和中文分词方法而言,分词模型大概有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
上一篇: 设计模式七大原则