import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.util.HashMap; /** * 类名:FilePreprocess 方法: 功能:完成使用lucene进行索引前的预处理,即:半角全角转化、大文件切分; * */ public class FilePreprocess { /** * 参数:File file被处理的源文件 String outputDir处理后的文件输出路径 */ public static void preprocess(File file, String outputDir) { try { splitToSmallFiles(charactorProcess(file, outputDir + "output.all"), outputDir); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static File charactorProcess(File file, String destFile) throws Exception { // 创建一个输出流,用于写新文件 BufferedWriter writer = new BufferedWriter(new FileWriter(destFile)); // 创建一个输入流,用于读取文件 BufferedReader reader = new BufferedReader(new FileReader(file)); String line = reader.readLine(); while (line != null) { if (!line.equals("\r\n")) { // 调用replace方法替换所有全角字符 String newline = replace(line); // 将替换后的String写入新文件 writer.write(newline); // 写入行分隔符 writer.newLine(); } line = reader.readLine(); } // 关闭输入输出流,将缓冲区数据写入文件 reader.close(); writer.close(); return new File(destFile); } /** * 方法名:replace 参数:String line传入需要处理的行字符串 功能: 全角半角转换 * * @author MzyAiLqq * */ private static String replace(String line) { // 创建一个HashMap用来存储全角字符和半角字符的对应关系 // 每个entry中的key为全角字符,value为半角字符 HashMap<String, String> map = new HashMap<String, String>(); map.put(",", ","); map.put("。", "."); map.put("〈", "<"); map.put("〉", ">"); map.put("|", "|"); map.put("《", "<"); map.put("》", ">"); map.put("[", "["); map.put("]", "]"); map.put("?", "?"); map.put(""", "\""); map.put(":", ":"); map.put("﹑", ","); map.put("(", "("); map.put(")", ")"); map.put("【", "["); map.put("】", "]"); map.put("-", "-"); map.put(" ̄", "~"); map.put("!", "!"); map.put("`", "`"); map.put("1", "1"); map.put("2", "2"); map.put("3", "3"); map.put("4", "4"); map.put("5", "5"); map.put("6", "6"); map.put("7", "7"); map.put("8", "8"); map.put("9", "9"); int length = line.length(); for (int i = 0; i < length; i++) { // 每次截取一个字符进行判断 String charat = line.substring(i, i + 1); if (map.get(charat) != null) { line = line.replace(charat, (String) map.get(charat)); } } // 返回转换后的字符行 return line; } /** * 方法名:splitToSmallFiles 参数:File file,String outputpath 功能:把文件拆分成小文件 * */ public static void splitToSmallFiles(File file, String outputpath) throws Exception { // 文件计数器,用来产生文件名 int filePointer = 0; // 定义单个文件的最大长度 final int MAX_SIZE = 10240; // 创建文件输出、输入流 BufferedWriter writer = null; BufferedReader reader = new BufferedReader(new FileReader(file)); // 建立字符串缓冲区,存储大文件中读取的数据 StringBuffer buffer = new StringBuffer(); String line = reader.readLine(); // 循环遍历读取的每行字符串 while (line != null) { // 如果读取的字符串不为空,则将字符串加入缓冲区并在末尾加上回车换行 buffer.append(line).append("\r\n"); // 判断缓冲区长度是否达到定义的单个文件最大长度 if (buffer.toString().getBytes().length >= MAX_SIZE) { // 如果打到最大长度,则将缓冲区的数据写入文件 // filePointer是文件名前缀的一部分 writer = new BufferedWriter(new FileWriter(outputpath + "output" + filePointer + ".txt")); writer.write(buffer.toString()); writer.close(); // 文件计数器自加1 filePointer++; // 清空StringBuffer中的数据 buffer = new StringBuffer(); } // 如果没有达到最大长度,则继续读取下一行 line = reader.readLine(); System.out.println(filePointer); } // 如果大文件已经读取完毕,直接将缓冲区的数据写入文件 writer = new BufferedWriter(new FileWriter(outputpath + "output" + filePointer + ".txt")); writer.write(buffer.toString()); reader.close(); writer.close(); } /** * 测试主方法 * */ public static void main(String args[]) { String inputFile = "E:\\办公\\Java 开发\\" + "电子书_学习资源\\java电子书\\[JAVA学习手册].handbook.chm"; String outputDir = "E:\\testFolder\\"; if (!new File(outputDir).exists()) new File(outputDir).mkdirs(); FilePreprocess filePreprocess = new FilePreprocess(); filePreprocess.preprocess(new File(inputFile), outputDir); } }
相关推荐
在本示例中,我们讨论的是如何使用Lucene对Word2007文档进行全文检索。 **Lucene核心概念** 1. **索引**:Lucene首先需要创建一个索引,这是一个预处理步骤,将文档内容转换为可搜索的结构。索引包括词项(tokens...
1. **多字段搜索**:Lucene允许对多个字段进行搜索,只需在查询构造时指定字段名和查询条件。 2. **评分与排序**:Lucene使用TF-IDF算法计算文档的相关性分数,搜索结果默认按分数排序。 3. **模糊搜索**:支持...
在给定的压缩包中,`src` 文件夹可能包含了Lucene的Java源代码示例,`WebRoot` 可能是Web应用程序的根目录,这表明示例可能是如何在Web环境下集成Lucene进行全文检索的。`.classpath`、`.project` 和 `.settings` ...
本文将详细介绍如何使用Spring MVC框架结合Apache Lucene库来构建一个强大的全文检索系统。首先,让我们了解这两个核心组件。 **1. Spring MVC** Spring MVC是Spring框架的一部分,它是一个用于构建Web应用程序的...
3. **索引(Index)**: 索引是 Lucene 对文档内容进行预处理后的结果,通过倒排索引结构,可以快速定位到包含特定词汇的文档。 4. **分析器(Analyzer)**: 分析器负责将输入的文本进行分词、去除停用词、词形还原...
2. **强大的文本分析**:Lucene内置了多种分词器,可以根据不同语言进行文本预处理,如分词、去除停用词、词形还原等。 3. **倒排索引**:Lucene采用倒排索引结构,使得查询性能显著提升,能够在极短的时间内返回...
以上内容只是Lucene全文检索的基础知识,实际使用中还需要根据具体需求进行调整和优化。在深入学习Lucene的过程中,阅读《全文检索Lucene》这本书将是十分有益的,它将帮助你更好地理解和掌握Lucene的核心概念及其...
【标题】"lucene检索新闻数据演示"涉及的是利用Apache Lucene这个开源全文搜索引擎库,对新闻数据进行索引和搜索的实践操作。Lucene是一个高性能、可伸缩的信息检索库,它提供了一个简单但功能强大的API,可以用于在...
Analyzer是Lucene中处理文本的核心组件,它可以对文本进行预处理,如去除停用词、词干提取等。接着,这些分词被转化为Term对象,作为索引的基础。每个Term包含一个词和一个文档ID,表明这个词在哪个文档中出现过。多...
在建立索引后,"lucene检索小例子"中的搜索部分使用Analyzer、Query和IndexSearcher等组件来执行查询。Analyzer用于对查询字符串进行相同的预处理,Query对象代表了用户的查询意图,而IndexSearcher则负责在索引中...
这篇博文将深入探讨如何使用Lucene来实现全文检索。 **一、Lucene的基本概念** 1. **索引(Indexing)**:Lucene的核心工作流程之一是创建索引。索引是一个结构化的数据存储,类似于图书馆的目录,能够快速定位到...
### 一种基于Lucene检索引擎的全文数据库的研究与实现 #### 1. 引言 随着信息技术的飞速发展和互联网的普及,大量的文本信息被数字化存储,这为信息检索带来了前所未有的挑战和机遇。传统的数据库管理系统(DBMS)...
**Lucene 全文检索系统:Java 源码与信息检索技术详解** Lucene 是一个高度可定制的全文检索库,由 Apache 软件基金会维护,它为开发人员提供了一个强大的工具来构建搜索功能。这个压缩包包含了 Lucene 的 Java ...
作者提出对Lucene的数据源进行预处理,以提升检索效率,并对检索结果的处理进行了改进,如引入相关性排序,使得检索结果更加符合用户的期望。 最后,论文作者设计了一个基于改进Lucene的Web全文检索系统,并详细...
- **分析文本**: 使用Analyzer对文档内容进行预处理,生成词元。 - **创建Term**: 对每个词元生成一个Term对象,包含词元文本和字段名。 - **建立Posting**: Term与包含它的文档位置(Posting)关联,形成倒排...
在Lucene中,被检索的文档首先需要被解析和预处理。这个过程包括分词(Tokenization)、去除停用词(Stopword Removal)、词干提取(Stemming)等步骤,以减少噪音和提高查询效果。此外,每个文档会被赋予一个唯一的...
基于Lucene的Oracle...此外,需要对Oracle数据库的数据进行预处理,以便于Lucene的索引建立和检索。 基于Lucene的Oracle数据库全文检索可以为企业提供快速、准确、可靠的全文检索功能,满足企业对数据检索的需求。
搜索器同样使用Paoding进行预处理,将用户的输入转换为分词后的关键词,然后使用Lucene的QueryParser或自定义查询构造器生成查询对象。查询执行后,Lucene会返回匹配的文档,你可以进一步处理这些结果,例如进行高亮...
在这个使用案例中,我们将深入探讨如何利用Lucene实现对Word文档中的关键字检索并高亮显示结果。 首先,我们需要理解Lucene的基本工作原理。Lucene通过建立倒排索引(Inverted Index)来加速查询。倒排索引是一种...
在本场景中,我们探讨的是基于Lucene 4.8版本的空间检索功能,这是一种允许用户根据地理位置信息进行搜索的技术。下面我们将深入理解这个主题,包括Lucene的空间检索原理、实现步骤以及如何处理给定的CSV文件。 一...