代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
按文章词频提取关键字
作者:
/ 发布于
2016/11/8
/
487
代码来自:http://blog.csdn.net/awj3584/article/details/17996493 jar包: lucene-core-3.6.2.jar,lucene-memory-3.6.2.jar, lucene-highlighter-3.6.2.jar,lucene-analyzers-3.6.2.jar IKAnalyzer2012.jar
package blog; import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; import org.wltea.analyzer.lucene.IKAnalyzer; /** * 获取文章关键字 * @author lpd * */ public class WordUtil { /** 测试文章 */ static String keyWord = "党的十八大以来,中央先后开展了党的群众路" + "线教育实践活动、“三严三实”专题教育,重点解决“关键少数”存在的突" + "出问题。而近期在全党开展的“两学一做”学习教育,则是推动全面从严治党向" + "基层延伸,使党内教育从“关键少数”向广大党员拓展,从集中性教育向经常" + "性教育延伸。习近平就此作出重要指示强调,开展“两学一做”学习教育,要把" + "全面从严治党落实到每个支部、每名党员。基层是党的执政之基、力量之源。净" + "化基层组织,激发基层力量,才能更好地协调推进整个“四个全面”战略布局。“两" + "学一做”着眼于基层,成为全面从严治党的关键一着。"; /** 获取关键字个数 */ private final static Integer NUM=6; /** 截取关键字在几个单词以上的数量 */ private final static Integer QUANTITY=1; /** * 传入String类型的文章,智能提取单词放入list中 * @param article * @param a * @return * @throws IOException */ private static List<String> extract(String article,Integer a) throws IOException { List<String> list =new ArrayList<String>(); //定义一个list来接收将要截取出来单词 IKAnalyzer analyzer = new IKAnalyzer(); //初始化IKAnalyzer analyzer.setUseSmart(true); //将IKAnalyzer设置成智能截取 TokenStream tokenStream= //调用tokenStream方法(读取文章的字符流) analyzer.tokenStream("", new StringReader(article)); while (tokenStream.incrementToken()) { //循环获得截取出来的单词 CharTermAttribute charTermAttribute = //转换为char类型 tokenStream.getAttribute(CharTermAttribute.class); String keWord= charTermAttribute.toString(); //转换为String类型 if (keWord.length()>a) { //判断截取关键字在几个单词以上的数量(默认为2个单词以上) list.add(keWord); //将最终获得的单词放入list集合中 } } return list; } /** * 将list中的集合转换成Map中的key,value为数量默认为1,值为词频 * @param list * @return */ private static Map<String, Integer> list2Map(List<String> list){ Map<String, Integer> map=new HashMap<String, Integer>(); for(String key:list){ //循环获得的List集合 if (list.contains(key)) { //判断这个集合中是否存在该字符串 map.put(key, map.get(key) == null ? 1 : map.get(key)+1); } //将集中获得的字符串放在map的key键上 } //并计算其value是否有值,如有则+1操作 return map; } /** * 提取关键字方法,获取词频高的Top-n个关键字, * @param article * @param a * @param n * @return * @throws IOException */ public static String[] getKeyWords(String article,Integer a,Integer n) throws IOException { List<String> keyWordsList= extract(article,a); //调用提取单词方法 Map<String, Integer> map=list2Map(keyWordsList); //list转map并计次数 //使用Collections的比较方法进行对map中value的排序 ArrayList<Entry<String, Integer>> list = new ArrayList<Entry<String,Integer>>(map.entrySet()); Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() { public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { return (o2.getValue() - o1.getValue()); } }); if (list.size()<n) n=list.size(); //排序后的长度,以免获得到null的字符 String[] keyWords=new String[n]; //设置将要输出的关键字数组空间 for(int i=0; i< list.size(); i++) { //循环排序后的数组 if (i<n) { //判断个数 keyWords[i]=list.get(i).getKey(); //设置关键字进入数组 } } return keyWords; } /** * * @param article * @return * @throws IOException */ public static String[] getKeyWords(String article) throws IOException{ return getKeyWords(article,QUANTITY,NUM); } public static void main(String[] args) { try { String [] keywords = getKeyWords(keyWord); for(int i=0; i<keywords.length; i++){ System.out.println(keywords[i]); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
试试其它关键字
关键字
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
贡献的其它代码
Label
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3