public class WordCount {
static Directory directory;
// 创建分词器
static Analyzer analyzer = new IKAnalyzer();
static IndexWriterConfig config = new IndexWriterConfig(analyzer);
static IndexWriter writer;
static IndexReader reader;
static {
// 指定索引存放目录以及配置参数
try {
directory = FSDirectory.open(Paths.get("F:/luceneIndex"));
writer = new IndexWriter(directory, config);
} catch (IOException e) {
e.printStackTrace();
}
} public static void main(String[] args) {
indexCreate();
Map<String, Long> map = getTotalFreqMap();
Map<String, Long> sortMap = sortMapByValue(map);
Set<Entry<String, Long>> entrySet = sortMap.entrySet();
Iterator<Entry<String, Long>> iterator = entrySet.iterator();
while (iterator.hasNext()) {
Entry<String, Long> entry = iterator.next();
System.out.println(entry.getKey() + "----" + entry.getValue());
} } /**
* 创建索引
*/
public static void indexCreate() {
// 文件夹检测(创建索引前要保证目录是空的)
File file = new File("f:/luceneIndex");
if (!file.exists()) {
file.mkdirs();
} else {
try {
file.delete();
} catch (Exception e) {
e.printStackTrace();
}
} // 将采集的数据封装到Document中
Document doc = new Document();
FieldType ft = new FieldType();
ft.setIndexOptions(IndexOptions.DOCS_AND_FREQS);
ft.setStored(true);
ft.setStoreTermVectors(true);
ft.setTokenized(true);
// ft.setStoreTermVectorOffsets(true);
// ft.setStoreTermVectorPositions(true); // 读取文件内容(小文件,readFully)
File content = new File("f:/qz/twitter.txt");
try {
byte[] buffer = new byte[(int) content.length()];
IOUtils.readFully(new FileInputStream(content), buffer);
doc.add(new Field("twitter", new String(buffer), ft));
} catch (Exception e) {
e.printStackTrace();
} // 生成索引
try {
writer.addDocument(doc);
// 关闭
writer.close(); } catch (IOException e) {
e.printStackTrace();
}
} /**
* 获得词频map
*
* @throws ParseException
*/
public static Map<String, Long> getTotalFreqMap() {
Map<String, Long> map = new HashMap<String, Long>();
try {
reader = DirectoryReader.open(directory);
List<LeafReaderContext> leaves = reader.leaves();
for (LeafReaderContext leafReaderContext : leaves) {
LeafReader leafReader = leafReaderContext.reader(); Terms terms = leafReader.terms("twitter"); TermsEnum iterator = terms.iterator(); BytesRef term = null; while ((term = iterator.next()) != null) {
String text = term.utf8ToString();
map.put(text, iterator.totalTermFreq());
} }
reader.close();
return map;
} catch (IOException e) {
e.printStackTrace();
}
return null;
} /**
* 使用 Map按value进行排序
*
* @param map
* @return
*/
public static Map<String, Long> sortMapByValue(Map<String, Long> oriMap) {
if (oriMap == null || oriMap.isEmpty()) {
return null;
}
Map<String, Long> sortedMap = new LinkedHashMap<String, Long>(); List<Map.Entry<String, Long>> entryList = new ArrayList<Map.Entry<String, Long>>(oriMap.entrySet());
Collections.sort(entryList, new MapValueComparator()); Iterator<Map.Entry<String, Long>> iter = entryList.iterator();
Map.Entry<String, Long> tmpEntry = null;
while (iter.hasNext()) {
tmpEntry = iter.next();
sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());
}
return sortedMap;
}
} class MapValueComparator implements Comparator<Map.Entry<String, Long>> { @Override
public int compare(Entry<String, Long> me1, Entry<String, Long> me2) {
if (me1.getValue() == me2.getValue()) {
return ;
}
return me1.getValue() > me2.getValue() ? - : ;
// return me1.getValue().compareTo(me2.getValue());
}
}

map排序代码https://www.cnblogs.com/zhujiabin/p/6164826.html

lucene 统计单词次数(词频tf)并进行排序的更多相关文章

  1. Storm-wordcount实时统计单词次数

    一.本地模式 1.WordCountSpout类 package com.demo.wc; import java.util.Map; import org.apache.storm.spout.Sp ...

  2. C++读取文件统计单词个数及频率

    1.Github链接 GitHub链接地址https://github.com/Zzwenm/PersonProject-C2 2.PSP表格 PSP2.1 Personal Software Pro ...

  3. python 统计单词个数

    根据一篇英文文章统计其中单词出现最多的10个单词. # -*- coding: utf-8 -*-import urllib2import refrom collections import Coun ...

  4. 洛谷 P1308 统计单词数【字符串+模拟】

    P1308 统计单词数 题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定 ...

  5. 统计单词Java

    功能0:输出某个英文文本文件中 26 字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位. 功能1:输出文件中所有不重复的单词,按照出现次数由多到少排列,出现次数同样多的,以字 ...

  6. [luogu]P1026 统计单词个数[DP][字符串]

    [luogu]P1026 统计单词个数 题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1&l ...

  7. 第六章 第一个Linux驱动程序:统计单词个数

    现在进入了实战阶段,使用统计单词个数的实例让我们了解开发和测试Linux驱动程序的完整过程.第一个Linux驱动程序是统计单词个数. 这个Linux驱动程序没有访问硬件,而是利用设备文件作为介质与应用 ...

  8. 第六章第一个linux个程序:统计单词个数

    第六章第一个linux个程序:统计单词个数 从本章就开始激动人心的时刻——实战,去慢慢揭开linux神秘的面纱.本章的实例是统计一片文章或者一段文字中的单词个数.  第 1 步:建立 Linu x 驱 ...

  9. Java web--Filter过滤器分IP统计访问次数

    分IP统计访问次数即网站统计每个IP地址访问本网站的次数. 分析 因为一个网站可能有多个页面,无论哪个页面被访问,都要统计访问次数,所以使用过滤器最为方便. 因为需要分IP统计,所以可以在过滤器中创建 ...

随机推荐

  1. Android Material风格的应用(三)--DrawerLayout

    添加抽屉导航 Android Material风格的应用(一)--AppBar TabLayoutAndroid Material风格的应用(二)--RecyclerViewAndroid Mater ...

  2. angular material dialog应用

    1. 打开弹窗的点击事件 project.component.html <button mat-icon-button class="action-button" (clic ...

  3. 写给自己的TypeScript 入门小纲

    前几日,在知乎上写了一些技术类的文章,有人私信问我,是不是要找一份工作,有没有想过要跳槽,然后我回到,你们公司都是用的什么框架什么技术,他罗列了一堆,其中就包含了TypeScript,我甚至不知道有这 ...

  4. 就目前市面上的面试整理来说,最全的BAT大厂面试题整理在这

    原标题:就目前市面上的面试整理来说,最全的BAT大厂面试题整理在这 又到了面试求职高峰期,最近有很多网友都在求大厂面试题.正好我之前电脑里面有这方面的整理,于是就发上来分享给大家. 这些题目是网友去百 ...

  5. x=min(x, y)

    x = min(x, y); ⇒ 当然 y 会有多个值传递进来 minHeight = min(minHeight, h[i]); 置于循环之中,不断将当前得到的最小高度值和新加入进来的值进行比较: ...

  6. vue中的select框的值动态绑定

    <--这两种写法效果一样--> 1: <select v-model="wxStatus"> <option label="已添加" ...

  7. [Yarn] A JavaScript Package Manager

    Yarn is a new JavaScript package manager that aims to be speedy, deterministic, and secure. See how ...

  8. struts2漏洞原理及解决的方法

    1.原理 Struts2的核心是使用的webwork框架,处理 action时通过调用底层的getter/setter方法来处理http的參数,它将每一个http參数声明为一个ONGL(这里是ONGL ...

  9. 23、uevent/hotplug热拔插机制

    (class_device_create的目的是为了让mdev根据它注册的信息来创建设备节点) class_device_create class_device_register class_devi ...

  10. 12.1、USB驱动——描述符、URB、管道

    大家常说,一个设备通常有多个配置,配置通常有多个接口,接口通常有多个端点.接口代表逻辑上的设备,比如声卡分为 录音和播放.访问设备时,访问的是某个接口(逻辑设备).除了端点0之外,每个端点只支持一个传 ...