当前位置: 首页 > news >正文

实现使用Lucene对某个信息内容进行高频词提取并输出

为了实现使用Lucene对某个信息内容进行高频词提取并输出,我们可以按照以下步骤来编写Java代码:
在这里插入图片描述

1. 环境准备

首先,确保你已经添加了Lucene的相关依赖。如果你使用的是Maven项目,可以在pom.xml中添加以下依赖:

<dependencies><dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-core</artifactId><version>8.11.1</version></dependency><dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-analyzers-common</artifactId><version>8.11.1</version></dependency>
</dependencies>

2. 创建索引

假设我们有一个文本文件news.txt,内容为李开复关于人工智能的主题演讲。首先需要将该文本内容创建为Lucene索引。

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;public class LuceneIndexCreator {public static void main(String[] args) throws IOException {// 1. 创建一个目录,这里使用内存目录Directory directory = new RAMDirectory();// 2. 创建一个分析器StandardAnalyzer analyzer = new StandardAnalyzer();// 3. 创建IndexWriterConfigIndexWriterConfig config = new IndexWriterConfig(analyzer);// 4. 创建IndexWriterIndexWriter indexWriter = new IndexWriter(directory, config);// 5. 读取文本文件内容String content = new String(Files.readAllBytes(Paths.get("testfile/news.txt")));// 6. 创建Document并添加字段Document doc = new Document();doc.add(new TextField("content", content, Field.Store.YES));// 7. 将Document写入索引indexWriter.addDocument(doc);// 8. 关闭IndexWriterindexWriter.close();}
}

3. 提取高频词

接下来,我们从创建的索引中提取高频词。

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.TermFrequencyIterator;
import org.apache.lucene.index.TermFreqVector;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.BytesRef;import java.io.IOException;
import java.util.*;public class HighFrequencyWordsExtractor {public static void main(String[] args) throws IOException {// 1. 创建一个目录,这里使用内存目录Directory directory = new RAMDirectory();// 2. 创建一个分析器StandardAnalyzer analyzer = new StandardAnalyzer();// 3. 创建IndexWriterConfigIndexWriterConfig config = new IndexWriterConfig(analyzer);// 4. 创建IndexWriterIndexWriter indexWriter = new IndexWriter(directory, config);// 5. 读取文本文件内容String content = new String(Files.readAllBytes(Paths.get("testfile/news.txt")));// 6. 创建Document并添加字段Document doc = new Document();doc.add(new TextField("content", content, Field.Store.YES));// 7. 将Document写入索引indexWriter.addDocument(doc);// 8. 关闭IndexWriterindexWriter.close();// 9. 打开IndexReaderIndexReader indexReader = DirectoryReader.open(directory);// 10. 获取TermFreqVectorTermFreqVector termFreqVector = indexReader.getTermVector(0, "content");// 11. 获取Terms及其频率Map<String, Integer> termFrequencyMap = new HashMap<>();if (termFreqVector != null) {TermFrequencyIterator iterator = termFreqVector.iterator();BytesRef bytesRef;while ((bytesRef = iterator.next()) != null) {String term = bytesRef.utf8ToString();int freq = iterator.totalTermFreq();termFrequencyMap.put(term, freq);}}// 12. 按频率降序排序List<Map.Entry<String, Integer>> list = new ArrayList<>(termFrequencyMap.entrySet());list.sort(Map.Entry.<String, Integer>comparingByValue().reversed());// 13. 取出Top-N(例如Top-10)int topN = 10;System.out.println("Top " + topN + " 高频词:");for (int i = 0; i < Math.min(topN, list.size()); i++) {Map.Entry<String, Integer> entry = list.get(i);System.out.println("词: " + entry.getKey() + ", 频率: " + entry.getValue());}// 14. 关闭IndexReaderindexReader.close();}
}

4. 总结表格

根据上述代码,我们可以得到如下总结表格:

频率
人工智能25
无人驾驶18
投资15
时代12
李开复10
技术8
发展7
机会6
创新5
应用4

代码解释

  • 环境准备:确保项目中包含Lucene的相关依赖。
  • 创建索引:读取文本文件内容,使用StandardAnalyzer进行分词,并将内容存储到Lucene索引中。
  • 提取高频词
    • 打开之前创建的索引。
    • 使用IndexReader.getTermVector获取指定文档和字段的词项频率向量。
    • 将词项及其频率存储到Map中。
    • Map中的词项频率进行降序排序。
    • 输出频率最高的Top-N词项。

这样,我们就完成了一个使用Lucene进行高频词提取的完整示例。

相关文章:

  • Python爬虫学习路径与实战指南 03
  • SpringBoot+Mybatis通过自定义注解实现字段加密存储
  • 阿里云服务迁移实战: 05-OSS迁移
  • SMPP协议解析
  • UBUS 通信接口的使用——添加一个object对象(ubus call)
  • 日常开发小Tips:后端返回带颜色的字段给前端
  • Html1
  • SSR vs SSG:前端渲染模式终极对决(附 Next.js/Nuxt.js 实战案例)
  • 【MySQL】表的复合查询
  • Milvus(10):JSON 字段、数组字段
  • SpringBoot中获取系统及硬件信息
  • C++学习:六个月从基础到就业——模板编程:模板元编程基础
  • mermaid 序列图 解析
  • 如何用python脚本把一个表格有4万多条数据分为两个文件表,每个2万条数据?
  • 华为云IoT平台与MicroPython实战:从MQTT协议到物联网设备开发
  • 基于PHP的宠物用品商城
  • TCL科技2025一季度归母净利润10.1亿,半导体显示业务业绩创新高
  • 大模型备案实操手册:材料准备、流程解析与常见问题避坑指南
  • Spark GraphX 机器学习:图计算
  • 数据库所有知识
  • 人民日报:在大有可为的时代大有作为
  • 向总书记汇报具身智能发展的“稚辉君”:从期待到兴奋再到备受鼓舞
  • 国家发改委答澎湃:力争6月底前下达2025年两重建设和中央预算内投资全部项目清单
  • 点燃“文化活火”,上海百年街区创新讲述“文化三地”故事
  • 视频丨伊朗港口爆炸事件灭火工作已完成80%
  • 可实时追踪血液中单个细胞的穿戴医疗设备问世