Java版中文分词 IKAnalyzer
程序员文章站
2024-02-22 11:34:11
...
效果:中文分词统计出现次数并排序
直接看代码:
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;
import java.io.IOException;
import java.io.StringReader;
import java.util.*;
/**
* Created by YYL on 2017/4/21.
*/
public class Test{
public static void main(String args[]) throws IOException {
String text=" 《射雕英雄传》是由郭靖宇监制,蒋家骏执导的古装武侠剧。" +
"该剧讲述了郭靖背负着家恨国仇闯入江湖,通过无数历程和在黄蓉的帮助下," +
"最终成长成一位“侠之大者”的武林民族英雄故事。南宋时期,惨遭灭门横祸的" +
"郭靖、杨康分别在江南七怪与全真教道士丘处机的教养下成人。18年后," +
"郭靖奉师命南下。杨康却贪恋富贵,认贼作父。郭靖与黄蓉一见如故,彼此倾心," +
"但因华筝之婚约在先,以及江南七怪的反对等多种因素,两人情感可谓一波三折。" +
"五位师父被害于桃花岛,郭靖愤而离开黄蓉。这一对两情相悦的青年,经历了坎坷磨难," +
"才修成正果。恶言恶行的杨康,也难逃惨死在嘉兴铁枪庙中的命运。" +
"郭靖随黄蓉故国万里行,遍识天下武林高人,武功日见提升,终于得以报杀父深仇," +
"消师门积怨,夺《武穆遗书》,率大军西征,承亡母之教,上华山论剑,救襄阳国难。" +
"、木讷愚钝的射雕英雄,变成一个为国为民、悲天悯人的侠之大者。";
int topWordsCount=3;
Map<String,Integer> wordsFrenMaps=getTextDef(text);
sortSegmentResult(wordsFrenMaps,topWordsCount);
}
public static void sortSegmentResult(Map<String,Integer> wordsFrenMaps, int topWordsCount){
System.out.println("排序前:================");
Iterator<Map.Entry<String,Integer>> wordsFrenMapsIterator=wordsFrenMaps.entrySet().iterator();
while (wordsFrenMapsIterator.hasNext()){
Map.Entry<String,Integer> wordsFrenEntry=wordsFrenMapsIterator.next();
System.out.println(wordsFrenEntry.getKey()+" 的次数为"+wordsFrenEntry.getValue());
}
List<Map.Entry<String, Integer>> wordFrenList = new ArrayList<>(wordsFrenMaps.entrySet());
Collections.sort(wordFrenList, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> obj1, Map.Entry<String, Integer> obj2) {
return obj2.getValue() - obj1.getValue();
}
});
System.out.println("排序后:================");
for(int i=0;i<wordFrenList.size();i++){
Map.Entry<String,Integer> wordFrenEntry=wordFrenList.get(i);
System.out.println(wordFrenEntry.getKey()+" 的次数为"+wordFrenEntry.getValue());
}
}
public static Map getTextDef(String text) throws IOException {
Map<String, Integer> wordsFren=new HashMap<String, Integer>();
IKSegmenter ikSegmenter = new IKSegmenter(new StringReader(text), true);
Lexeme lexeme;
while ((lexeme = ikSegmenter.next()) != null) {
if(lexeme.getLexemeText().length()>1){
if(wordsFren.containsKey(lexeme.getLexemeText())){
wordsFren.put(lexeme.getLexemeText(),wordsFren.get(lexeme.getLexemeText())+1);
}else {
wordsFren.put(lexeme.getLexemeText(),1);
}
}
}
return wordsFren;
}
}
只需添加一个jar包即可,下载链接见:
http://download.csdn.net/detail/yyl424525/9838646
中文分词统计并排序后输出如下:
排序前:================
一见如故 的次数为1
一波三折 的次数为1
可谓 的次数为1
年后 的次数为1
灭门 的次数为1
和在 的次数为1
积怨 的次数为1
难逃 的次数为1
桃花岛 的次数为1
郭靖 的次数为6
南宋 的次数为1
两人 的次数为1
一个 的次数为1
师父 的次数为1
得以 的次数为1
18 的次数为1
在先 的次数为1
武侠剧 的次数为1
帮助 的次数为1
五位 的次数为1
变成 的次数为1
该剧 的次数为1
背负着 的次数为1
杨康 的次数为3
闯入 的次数为1
一位 的次数为1
亡母 的次数为1
恶言 的次数为1
因素 的次数为1
教养 的次数为1
历程 的次数为1
倾心 的次数为1
但因 的次数为1
故国 的次数为1
这一 的次数为1
别在 的次数为1
射雕 的次数为1
大军 的次数为1
国仇 的次数为1
长成 的次数为1
彼此 的次数为1
原本 的次数为1
国难 的次数为1
纯朴 的次数为1
古装 的次数为1
讲述 的次数为1
贪恋 的次数为1
两情相悦 的次数为1
青年 的次数为1
万里行 的次数为1
日见 的次数为1
被害 的次数为1
执导 的次数为1
对等 的次数为1
提升 的次数为1
师命 的次数为1
襄阳 的次数为1
嘉兴 的次数为1
木讷 的次数为1
横祸 的次数为1
这位 的次数为1
为国为民 的次数为1
婚约 的次数为1
惨遭 的次数为1
监制 的次数为1
以及 的次数为1
正果 的次数为1
黄蓉 的次数为4
经历 的次数为1
恶行 的次数为1
蒋家 的次数为1
无数 的次数为1
南下 的次数为1
惨死 的次数为1
射雕英雄传 的次数为1
成人 的次数为1
离开 的次数为1
悲天悯人 的次数为1
华山论剑 的次数为1
全真教 的次数为1
最终 的次数为1
华筝 的次数为1
天下武林 的次数为1
终于 的次数为1
侠之大者 的次数为2
愚钝 的次数为1
磨难 的次数为1
江湖 的次数为1
江南七怪 的次数为2
富贵 的次数为1
靖宇 的次数为1
坎坷 的次数为1
英雄 的次数为1
认贼作父 的次数为1
时期 的次数为1
修成 的次数为1
道士 的次数为1
故事 的次数为1
师门 的次数为1
高人 的次数为1
西征 的次数为1
武功 的次数为1
情感 的次数为1
多种 的次数为1
命运 的次数为1
深仇 的次数为1
武林 的次数为1
丘处机 的次数为1
遗书 的次数为1
憨厚 的次数为1
通过 的次数为1
民族英雄 的次数为1
排序后:================
郭靖 的次数为6
黄蓉 的次数为4
杨康 的次数为3
侠之大者 的次数为2
江南七怪 的次数为2
一见如故 的次数为1
一波三折 的次数为1
可谓 的次数为1
年后 的次数为1
灭门 的次数为1
和在 的次数为1
积怨 的次数为1
难逃 的次数为1
桃花岛 的次数为1
南宋 的次数为1
两人 的次数为1
一个 的次数为1
师父 的次数为1
得以 的次数为1
18 的次数为1
在先 的次数为1
武侠剧 的次数为1
帮助 的次数为1
五位 的次数为1
变成 的次数为1
该剧 的次数为1
背负着 的次数为1
闯入 的次数为1
一位 的次数为1
亡母 的次数为1
恶言 的次数为1
因素 的次数为1
教养 的次数为1
历程 的次数为1
倾心 的次数为1
但因 的次数为1
故国 的次数为1
这一 的次数为1
别在 的次数为1
射雕 的次数为1
大军 的次数为1
国仇 的次数为1
长成 的次数为1
彼此 的次数为1
原本 的次数为1
国难 的次数为1
纯朴 的次数为1
古装 的次数为1
讲述 的次数为1
贪恋 的次数为1
两情相悦 的次数为1
青年 的次数为1
万里行 的次数为1
日见 的次数为1
被害 的次数为1
执导 的次数为1
对等 的次数为1
提升 的次数为1
师命 的次数为1
襄阳 的次数为1
嘉兴 的次数为1
木讷 的次数为1
横祸 的次数为1
这位 的次数为1
为国为民 的次数为1
婚约 的次数为1
惨遭 的次数为1
监制 的次数为1
以及 的次数为1
正果 的次数为1
经历 的次数为1
恶行 的次数为1
蒋家 的次数为1
无数 的次数为1
南下 的次数为1
惨死 的次数为1
射雕英雄传 的次数为1
成人 的次数为1
离开 的次数为1
悲天悯人 的次数为1
华山论剑 的次数为1
全真教 的次数为1
最终 的次数为1
华筝 的次数为1
天下武林 的次数为1
终于 的次数为1
愚钝 的次数为1
磨难 的次数为1
江湖 的次数为1
富贵 的次数为1
靖宇 的次数为1
坎坷 的次数为1
英雄 的次数为1
认贼作父 的次数为1
时期 的次数为1
修成 的次数为1
道士 的次数为1
故事 的次数为1
师门 的次数为1
高人 的次数为1
西征 的次数为1
武功 的次数为1
情感 的次数为1
多种 的次数为1
命运 的次数为1
深仇 的次数为1
武林 的次数为1
丘处机 的次数为1
遗书 的次数为1
憨厚 的次数为1
通过 的次数为1
民族英雄 的次数为1
上一篇: Mysql IO 内存方面的优化
下一篇: Java常用数字工具类 数字转汉字(1)