获取文章中的关键字

最近在做关于搜索方面的程序,查阅了许多资料,写下了下面的代码,已做后备

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();             //初始化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();
		}
	}
}

				
时间: 2024-10-16 06:08:35

获取文章中的关键字的相关文章

ASP.NET/C#获取文章中图片的地址

前几天修改一个网站的布局的时候需要把简单的新闻列表修改为图文结合+新闻列表,不过这新闻的数据库非常简单,图片是在编辑器里面和HTML一起存入数据库中的content字段的,所以工作简化到从一个字符串里面获取图片的地址并输出.在HTML的图片标签一般如下格式所示:<img src="" alt="" title="" width="" height="" />,这就相当于编程中的一个结构体啊,里面

dedecms获取文章中的图片代码

1.在 /include/common.func.php 文件底部加入以下代码 /** * getArcImages 获取文章中的图片 * $id 文章ID * $num 要获取的图片数量 默认为4张 */ function getArcImages($id,$num=4){ global $dsql; $row = $dsql->GetOne("SELECT * FROM dede_addonarticle WHERE aid= $id"); $content = $row['

也谈WordPress获取文章中首张图片

从第一次接触WordPress开始,在前台首页需要调用文章中的图片以实现在首页显示图片文章,就看到网络上流传甚广的一个函数: 1 function catch_that_image() { 2 global $post, $posts; 3 $first_img = ''; 4 ob_start(); 5 ob_end_clean(); 6 $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i'

获取文章中图片路径的正则表达式

String content = "<p><img src="http://xxx.com/image/635.png" alt="bg" style="max-width:100%;"><img src="http://ssss.com/image/d17c.jpg" alt="spe-03" style="max-width: 100%;"&g

PHP正则获取文章中第一张图片为封面

话不多说直接上代码 1 $pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg|\.png]))[\'|\"].*?[\/]?>/"; 2 preg_match_all($pattern,$data['content'],$matchContent); 3 if(isset($matchContent[1][0])){ 4 $data['cover']=$matchContent[1][0]; 5 }

再谈WordPress获取文章图片——制作文章图片集

有一次接到一个项目,客户要求:如果一篇文章中存在多幅图片,要能把这些图片在当前文章页面制作成一个图片集. 仔细分析这个要求,前端设计无悬念,无非就是如何获取当前文章中所有图片的 src 值的问题. 联想到几乎每个网站都必备的获取文章首张图片的那个函数: function catch_that_image()   (前文已有相关描述:也谈WordPress获取文章中首张图片),在这个函数中,仅仅使用了首张图片,而那里获得的 $matches 是一个二维数组啊. 先将该变量dump出来看一下,插入:

如何获取别人微信文章中的图片

有时我们看到别人微信文章中的图片很好看,想保存下来,又或者是我们本身是微信运营者,想"借用"一下别人的图,简单点的做法是在手机微信文章中点击图片,会出现微信图片浏览器,然后点击右上角的三个点点,点击保存到手机.如果电脑要用,就用手机发送给电脑就行,如下图: 但是,如果仅仅这么简单我就不用写这篇文章了!! 关键在于,这样得到的图是经过微信处理过的小图,放大后会失真,那怎么获得大图呢? 试过的人可能知道,将微信文章链接发送到电脑端,然后在电脑浏览器打开文章,右键另存,下载下来的是一个名为&

c#多线程中Lock()关键字的用法小结

本篇文章主要是对c#多线程中Lock()关键字的用法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待. 每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数.这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生.

java 获取局域网中的所有主机名和IP地址

DOS命令 命令 意义 net view 获取局域网中的所有主机名 ipconfig -all 获取本地IP,主机名,MAC地址 arp -a 获取本局域网中的所有IP地址和物理地址 ping -a x.x.x.x 获取x.x.x.x的主机名 nbtstat -a 主机名 获取MAC地址 java exec 执行外部命令 String command = "net view" Runtime r = Runtime.getRuntime(); Process p = r.exec(co