最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java編程實現(xiàn)提取文章中關(guān)鍵字的方法

 更新時間:2015年11月05日 15:08:30   作者:awj3584  
這篇文章主要介紹了Java編程實現(xiàn)提取文章中關(guān)鍵字的方法,較為詳細(xì)的分析了Java提取文章關(guān)鍵字的原理與具體實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了Java編程實現(xiàn)提取文章中關(guān)鍵字的方法。分享給大家供大家參考,具體如下:

實現(xiàn)代碼:

/**
 * 相關(guān)的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
 *
 * 截取一片文章中頻繁出現(xiàn)的關(guān)鍵字,并給予分組排序(倒敘),以數(shù)組格式返回n個關(guān)鍵字
 *
 * 并該類內(nèi)部含有一個List2Map方法,可將重復(fù)<String>集合轉(zhuǎn)換為Map<String, Integer>格式
 * 并算出該<String>重復(fù)次數(shù),放入相應(yīng)的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; 
/** 
 * 獲取文章關(guān)鍵字 
 * @author anwj 
 * 
 */ 
public class WordUtil { 
 /** 測試文章 */ 
 static String keyWord = "笑星潘長江當(dāng)上“男媒婆”了,但這回可不是演小品——由他自編自導(dǎo)自演的都市喜劇《男媒婆》將于1月13日在北" + 
   "京衛(wèi)視首播。劇中,潘長江變身成為能說會道、古道熱腸的“新時代男媒婆”丁二春,與“臺灣第一酒窩美女2”張庭上演了一出“屌絲逆襲”" + 
   "的浪漫追愛記。李明啟、李文啟、馮遠(yuǎn)征、任程偉、馬麗、徐等明星也齊齊上陣制造“笑料”《男媒婆》圍繞著丁二春和他所開" + 
   "辦的“全成熱戀”婚介所展開。人到中年的丁二春眼看來勢洶涌的“婚戀大潮”商機不斷,想憑借一張巧嘴開創(chuàng)事業(yè)和人生" + 
   "“第二春”?;榻樗_張大吉,顧客盈門,提出的要求卻也千奇百怪,拜金女、宅男、小老板粉墨登場,展開了一系列令人捧腹" + 
   "大笑又不失溫情的精彩故事。劇中的一大看點是美女搭配“丑男”的搭配,張庭與潘長江成了一對歡喜冤家。張庭表示,劇中兩人“" + 
   "身高有差距、年齡有距離,相貌不對等”。而潘長江談到這種主角設(shè)定時認(rèn)為:“張庭以往的角色都特別獨立、可愛,而‘大女人'和‘" + 
   "小男人'正是我倆這對情侶的設(shè)定,所以張庭是非常合適的人選。”此外,該劇也是潘長江繼《能人馮天貴》、《清凌凌的水藍(lán)瑩瑩的天》" + 
   "第一、第二部之后第四次自導(dǎo)自演的喜劇作品。潘長江表示,全劇通過“媒婆”這個特殊職業(yè)的視角,展示著當(dāng)代社會種種婚戀價值觀,涵蓋了" + 
   "黃昏戀、拜金女、鳳凰男等諸多引發(fā)熱議的時代話題。(記者 尹春芳)免責(zé)聲明:本文僅代表作者個人觀點,與環(huán)球網(wǎng)無關(guān)。其原創(chuàng)性以及文中" + 
   "陳述文字和內(nèi)容未經(jīng)本站證實,對本文以及其中全部或者部分內(nèi)容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考," + 
   "并請自行核實相關(guān)內(nèi)容。"; 
 /** 獲取關(guān)鍵字個數(shù) */ 
 private final static Integer NUM=5; 
 /** 截取關(guān)鍵字在幾個單詞以上的數(shù)量 */ 
 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設(shè)置成智能截取 
  TokenStream tokenStream= //調(diào)用tokenStream方法(讀取文章的字符流) 
    analyzer.tokenStream("", new StringReader(article)); 
  while (tokenStream.incrementToken()) { //循環(huán)獲得截取出來的單詞 
   CharTermAttribute charTermAttribute = //轉(zhuǎn)換為char類型 
     tokenStream.getAttribute(CharTermAttribute.class); 
   String keWord= charTermAttribute.toString(); //轉(zhuǎn)換為String類型 
   if (keWord.length()>a) { //判斷截取關(guān)鍵字在幾個單詞以上的數(shù)量(默認(rèn)為2個單詞以上) 
    list.add(keWord); //將最終獲得的單詞放入list集合中 
   } 
  } 
  return list; 
 } 
 /** 
  * 將list中的集合轉(zhuǎn)換成Map中的key,value為數(shù)量默認(rèn)為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){ //循環(huán)獲得的List集合 
   if (list.contains(key)) { //判斷這個集合中是否存在該字符串 
    map.put(key, map.get(key) == null ? 1 : map.get(key)+1); 
   } //將集中獲得的字符串放在map的key鍵上 
  } //并計算其value是否有值,如有則+1操作 
  return map; 
 } 
 /** 
  * 提取關(guā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); //調(diào)用提取單詞方法 
  Map<String, Integer> map=list2Map(keyWordsList); //list轉(zhuǎn)map并計次數(shù) 
  //使用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]; //設(shè)置將要輸出的關(guān)鍵字?jǐn)?shù)組空間 
  for(int i=0; i< list.size(); i++) { //循環(huán)排序后的數(shù)組 
   if (i<n) { //判斷個數(shù) 
    keyWords[i]=list.get(i).getKey(); //設(shè)置關(guān)鍵字進入數(shù)組 
   } 
  } 
  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程序設(shè)計有所幫助。

相關(guān)文章

  • ssm開發(fā)使用redis作為緩存的使用步驟

    ssm開發(fā)使用redis作為緩存的使用步驟

    在開發(fā)中經(jīng)常遇到大量的重復(fù)的,高并發(fā)的查詢,此時可以使用redis緩存。這篇文章主要介紹了ssm開發(fā)使用redis作為緩存的使用步驟,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Java 如何調(diào)用long的最大值和最小值

    Java 如何調(diào)用long的最大值和最小值

    這篇文章主要介紹了Java 如何調(diào)用long的最大值和最小值的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 詳解為什么阿里巴巴禁止使用BigDecimal的equals方法做等值比較

    詳解為什么阿里巴巴禁止使用BigDecimal的equals方法做等值比較

    這篇文章主要介紹了詳解為什么阿里巴巴禁止使用BigDecimal的equals方法做等值比較,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 詳解SpringBoot定時任務(wù)功能

    詳解SpringBoot定時任務(wù)功能

    這篇文章主要介紹了SpringBoot定時任務(wù)功能詳細(xì)解析,這次的功能開發(fā)過程中也算是對其內(nèi)涵的進一步了解,以后遇到定時任務(wù)的處理也更清晰,更有效率了,對SpringBoot定時任務(wù)相關(guān)知識感興趣的朋友一起看看吧
    2022-05-05
  • java Person,Student,GoodStudent 三個類的繼承、構(gòu)造函數(shù)的執(zhí)行

    java Person,Student,GoodStudent 三個類的繼承、構(gòu)造函數(shù)的執(zhí)行

    這篇文章主要介紹了java Person,Student,GoodStudent 三個類的繼承、構(gòu)造函數(shù)的執(zhí)行,需要的朋友可以參考下
    2017-02-02
  • Java創(chuàng)建可執(zhí)行的Jar文件的方法實踐

    Java創(chuàng)建可執(zhí)行的Jar文件的方法實踐

    創(chuàng)建的可執(zhí)行Jar文件實際就是在原始Jar的清單文件中添加了Main-Class的配置,本文主要介紹了Java創(chuàng)建可執(zhí)行的Jar文件的方法實踐,感興趣的可以了解一下
    2023-12-12
  • java并發(fā)學(xué)習(xí)之Executor源碼解析

    java并發(fā)學(xué)習(xí)之Executor源碼解析

    這篇文章主要為大家介紹了java并發(fā)學(xué)習(xí)之Executor源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Java如何高效使用OpenCV圖像處理庫

    Java如何高效使用OpenCV圖像處理庫

    OpenCV是一個開源的計算機視覺庫,它提供了一系列豐富的圖像處理和計算機視覺算法,包括圖像讀取、顯示、濾波、特征檢測、目標(biāo)跟蹤等功能,這篇文章主要給大家介紹了關(guān)于Java如何高效使用OpenCV圖像處理庫的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • java中volatile關(guān)鍵字的作用詳解

    java中volatile關(guān)鍵字的作用詳解

    這篇文章主要介紹了java中volatile關(guān)鍵字的作用詳解,volatile可以保證,若一個線程改變了某塊內(nèi)存的值,其他線程是可見的,以至于其他線程能及時更新這塊內(nèi)存,需要的朋友可以參考下
    2023-09-09
  • SpringCloud Netfilx Ribbon負(fù)載均衡工具使用方法介紹

    SpringCloud Netfilx Ribbon負(fù)載均衡工具使用方法介紹

    Ribbon是Netflix的組件之一,負(fù)責(zé)注冊中心的負(fù)載均衡,有助于控制HTTP和TCP客戶端行為。Spring Cloud Netflix Ribbon一般配合Ribbon進行使用,利用在Eureka中讀取的服務(wù)信息,在調(diào)用服務(wù)節(jié)點時合理進行負(fù)載
    2022-12-12

最新評論

马尔康县| 英德市| 新邵县| 汾西县| 绥芬河市| 儋州市| 万安县| 宁南县| 潞西市| 大石桥市| 乌拉特后旗| 敦煌市| 盐边县| 息烽县| 宁德市| 张家港市| 天镇县| 岳池县| 黄冈市| 高尔夫| 景谷| 城口县| 郁南县| 手游| 建昌县| 景德镇市| 康平县| 盐边县| 大港区| 奈曼旗| 全椒县| 辉县市| 弋阳县| 拉萨市| 巴楚县| 唐河县| 揭阳市| 平远县| 济阳县| 九江市| 夏邑县|