生成關鍵字

須要這5個jarjava

IKAnalyzer2012_u6.jarapache

lucene-analyzers-3.6.2.jar數組

lucene-core-3.6.2.jaride

lucene-highlighter-3.6.2.jarspa

lucene-memory-3.6.2.jar.net

關鍵字的顯示
orm


package com.zte.common.util;排序


import java.awt.event.ActionEvent;token

import java.awt.event.ActionListener;rem

import java.io.IOException;

import java.io.StringReader;

import java.util.ArrayList;

import java.util.Arrays;

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 javax.swing.BoxLayout;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;


import org.apache.lucene.analysis.TokenStream;

import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;

import org.wltea.analyzer.lucene.IKAnalyzer;


/**

 * 獲取文章關鍵字

 * @author anwj

 *

 */

public class WordUtil {


/** 獲取關鍵字個數 */

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) {

final JTextArea articleTextArea = new JTextArea(40, 20);

JScrollPane articleScroll = new JScrollPane(articleTextArea); 

articleScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 

articleScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);

final JTextArea keyTextArea = new JTextArea(10, 10);

JScrollPane keyScroll = new JScrollPane(keyTextArea); 

keyScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 

keyScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);

JButton getKeyBtn = new JButton("生成關鍵字");

getKeyBtn.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

String articleText = articleTextArea.getText();

try {

String[] keywords = getKeyWords(articleText);

keyTextArea.setText(Arrays.toString(keywords));

} catch (IOException e1) {

e1.printStackTrace();

}

}

});

JPanel mainPanel = new JPanel();

mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

mainPanel.add(articleScroll);

mainPanel.add(getKeyBtn);

mainPanel.add(keyScroll);

JFrame frame = new JFrame("提取文章關鍵字");

frame.add(mainPanel);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(600, 300);

frame.setVisible(true);

}

}

相關文章
相關標籤/搜索