Java编程实现提取文章中关键字的方法
程序员文章站
2024-03-06 18:09:32
本文实例讲述了java编程实现提取文章中关键字的方法。分享给大家供大家参考,具体如下:
实现代码:
/**
* 相关的jar包
* lucene-cor...
本文实例讲述了java编程实现提取文章中关键字的方法。分享给大家供大家参考,具体如下:
实现代码:
/** * 相关的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 * * 截取一片文章中频繁出现的关键字,并给予分组排序(倒叙),以数组格式返回n个关键字 * * 并该类内部含有一个list2map方法,可将重复<string>集合转换为map<string, integer>格式 * 并算出该<string>重复次数,放入相应的value中 */ package com.lifeix.api.util; 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 anwj * */ public class wordutil { /** 测试文章 */ static string keyword = "笑星潘长江当上“男媒婆”了,但这回可不是演小品——由他自编自导自演的都市喜剧《男媒婆》将于1月13日在北" + "京卫视首播。剧中,潘长江变身成为能说会道、古道热肠的“新时代男媒婆”丁二春,与“*第一酒窝美女2”张庭上演了一出“屌丝逆袭”" + "的浪漫追爱记。李明启、李文启、冯远征、任程伟、马丽、徐等明星也齐齐上阵制造“笑料”《男媒婆》围绕着丁二春和他所开" + "办的“全成热恋”婚介所展开。人到中年的丁二春眼看来势汹涌的“婚恋大潮”商机不断,想凭借一张巧嘴开创事业和人生" + "“第二春”。婚介所开张大吉,顾客盈门,提出的要求却也千奇百怪,拜金女、宅男、小老板粉墨登场,展开了一系列令人捧腹" + "大笑又不失温情的精彩故事。剧中的一大看点是美女搭配“丑男”的搭配,张庭与潘长江成了一对欢喜冤家。张庭表示,剧中两人“" + "身高有差距、年龄有距离,相貌不对等”。而潘长江谈到这种主角设定时认为:“张庭以往的角色都特别独立、可爱,而‘大女人'和‘" + "小男人'正是我俩这对情侣的设定,所以张庭是非常合适的人选。”此外,该剧也是潘长江继《能人冯天贵》、《清凌凌的水蓝莹莹的天》" + "第一、第二部之后第四次自导自演的喜剧作品。潘长江表示,全剧通过“媒婆”这个特殊职业的视角,展示着当代社会种种婚恋价值观,涵盖了" + "黄昏恋、拜金女、凤凰男等诸多引发热议的时代话题。(记者 尹春芳)免责声明:本文仅代表作者个人观点,与环球网无关。其原创性以及文中" + "陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考," + "并请自行核实相关内容。"; /** 获取关键字个数 */ private final static integer num=5; /** 截取关键字在几个单词以上的数量 */ 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; } /** * 提取关键字方法 * @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(); } } }
希望本文所述对大家java程序设计有所帮助。