須要這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);
}
}