lucene 统计单词次数(词频tf)并进行排序
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)并进行排序的更多相关文章
- Storm-wordcount实时统计单词次数
一.本地模式 1.WordCountSpout类 package com.demo.wc; import java.util.Map; import org.apache.storm.spout.Sp ...
- C++读取文件统计单词个数及频率
1.Github链接 GitHub链接地址https://github.com/Zzwenm/PersonProject-C2 2.PSP表格 PSP2.1 Personal Software Pro ...
- python 统计单词个数
根据一篇英文文章统计其中单词出现最多的10个单词. # -*- coding: utf-8 -*-import urllib2import refrom collections import Coun ...
- 洛谷 P1308 统计单词数【字符串+模拟】
P1308 统计单词数 题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定 ...
- 统计单词Java
功能0:输出某个英文文本文件中 26 字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位. 功能1:输出文件中所有不重复的单词,按照出现次数由多到少排列,出现次数同样多的,以字 ...
- [luogu]P1026 统计单词个数[DP][字符串]
[luogu]P1026 统计单词个数 题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1&l ...
- 第六章 第一个Linux驱动程序:统计单词个数
现在进入了实战阶段,使用统计单词个数的实例让我们了解开发和测试Linux驱动程序的完整过程.第一个Linux驱动程序是统计单词个数. 这个Linux驱动程序没有访问硬件,而是利用设备文件作为介质与应用 ...
- 第六章第一个linux个程序:统计单词个数
第六章第一个linux个程序:统计单词个数 从本章就开始激动人心的时刻——实战,去慢慢揭开linux神秘的面纱.本章的实例是统计一片文章或者一段文字中的单词个数. 第 1 步:建立 Linu x 驱 ...
- Java web--Filter过滤器分IP统计访问次数
分IP统计访问次数即网站统计每个IP地址访问本网站的次数. 分析 因为一个网站可能有多个页面,无论哪个页面被访问,都要统计访问次数,所以使用过滤器最为方便. 因为需要分IP统计,所以可以在过滤器中创建 ...
随机推荐
- Windows Forms 对话框篇
1,标准对话框 Windows内置的对话框,又叫公用对话框,它们作为组件提供的,并且存在于System.Windows.Forms命名空间中. 手工方式: private void button1_C ...
- 加固linux
http://linoxide.com/linux-command/password-aging-secure-linux-access/
- Android开发系列(二十):AutoCompleteTextView(自己主动完毕文本框)的功能和使用方法
当用户输入一定的字符之后,自己主动完毕文本框可以显示一个下拉菜单,供用户从中选择,当用户选择某个菜单项之后,AutoCompleteTextView可以依照用户的选择自己主动填写该文本框 AutoCo ...
- IIS FTP匿名登录不成功
FTP网站没有开启匿名登录的权限,对你没有看错.可能你的虚拟目录已经设置了如下所示的内容: 但是,单击上右图时,在其功能视图中的FTP身份验证中,可能并未启用"匿名身份验证",如下右图所示.启动 ...
- android请求
//请求 HttpURLConnection conn = (HttpURLConnection)new URL(path).openConnection(); conn.setConnecTimeo ...
- POJ 2014 Flow Layout 模拟
http://poj.org/problem?id=2014 嘻嘻2014要到啦,于是去做Prob.ID 为2014的题~~~~祝大家新年快乐~~ 题目大意: 给你一个最大宽度的矩形,要求把小矩形排放 ...
- 25、写一个USB摄像头驱动程序(有ioctrl分析)
videobuf2-core.h中的vb2_buffer,记录了v4l2_buffer ,驱动可以对vb2_buffer的v4l2_buffer进行操控, vb2_buffer是v4l2框架层的代码, ...
- 我的MFC/C++学习笔记 http://blog.bccn.net/CrystalFan/6909
2009.07.31 ------------------------------------------------------------------------------------ No.1 ...
- 【20.23%】【codeforces 740A】Alyona and copybooks
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- jQuery 中 is() 函数常见使用方法
依据选择器.DOM元素或 jQuery 对象来检測匹配元素集合.假设当中至少有一个元素符合这个给定的表达式就返回true. 假设没有元素符合,或者表达式无效.都返回'false'. '''注意:''' ...