擷取文章中的關鍵字,擷取文章關鍵字

來源:互聯網
上載者:User

擷取文章中的關鍵字,擷取文章關鍵字


最近在做關於搜尋方面的程式,查閱了許多資料,寫下了下面的代碼,已做後備

jar包:http://download.csdn.net/detail/zwdsmileface/8678353


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 = "丟失一條紅色的狗";/** 擷取關鍵字個數 */private final static Integer NUM=30;/** 截取關鍵字在幾個單詞以上的數量 */private final static Integer QUANTITY=2;/** * 傳入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();             //初始化IKAnalyzeranalyzer.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 blocke.printStackTrace();}}}





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.