利用Lucene对大文件进行预处理(可运行)

package comTwo;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.util.HashMap;

public class WanZheng {

public static String replace(String line){

//创建一个HashMap存储全角和半角字符之间的对应关系

HashMap map = new HashMap();

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;

}

public static File charactoProcess(File file, String destFile){

try{

//创建一个输出流,用于写新文件

BufferedWriter writer = new BufferedWriter(new FileWriter(destFile));

//创建一个输入流,用于读取文件

BufferedReader reader = new BufferedReader(new FileReader(file));

String line = reader.readLine();

while(line != null){

//调用replace方法替换所有的全角字符

String newline = replace(line);

//将替换后的String写入新的文件

writer.write(newline);

//写入行分隔符

writer.newLine();

line = reader.readLine();

}

reader.close();

writer.close();

}catch(IOException e){

e.printStackTrace();

}

return new File(destFile);

}

public static void splitToSmallFils(File file, String outputpath){

try{

//文件计数器,用于文件名

int filePointer = 0;

//定义文件的最大长度

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 + "切分后" + filePointer + ".txt"));

writer.write(buffer.toString());

writer.close();

//文件计数器加一

filePointer++;

//清空缓冲区数据

buffer = new StringBuffer();

}

//如果没有达到文件的最大长度

line = reader.readLine();

}

//如果大文件已经读取完毕,直接将缓冲区数据写入文件

writer = new BufferedWriter(new FileWriter(outputpath + "切分后" + filePointer + ".txt"));

writer.write(buffer.toString());

writer.close();

}catch(IOException e){

e.printStackTrace();

}

}

public static void preprocess(File file, String outputDir){

try{

splitToSmallFils(charactoProcess(file, outputDir +  "output.all"), outputDir);

}catch(Exception e){

e.printStackTrace();

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

//设置需要被预处理的原文件位置

String inputFile = "E:\\Lucene项目\\钢铁是怎样练成的.txt";

//设置预处理后的文件存放位置

String outputDir = "E:\\Lucene项目\\目标文件\\";

//判断处理后文件存放文件夹是否存在,如果不存在则创建文件加

if(!new File(outputDir).exists()){

new File(outputDir).mkdirs();

}

//创建一个FileProcess类,并要求调用preprocess

WanZheng filePreprocess = new WanZheng();

filePreprocess.preprocess(new File(inputFile), outputDir);

}

}

时间: 2024-10-05 04:09:19

利用Lucene对大文件进行预处理(可运行)的相关文章

利用Lucene将大文档切割成多个小文档,(可运行)

这段代码,具体用的时候,我是修改了括号里的参数的类型,我想写的方法就是一个源文件 ,一个目的文件,利用源文件调用方法,然后生成目标文件. 对原有的大文件进行切割,切割的大小是自己限定的最大的大小, 文件名字的序号就是: 从自然数的顺序,依次递增. 代码如下: 如需使用需要修改自己原文件的目录. package comOne; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; imp

linux下利用split分割大文件

使用split分割大文件 在我们的实际生产环境中,会产生许许多多的大文件,这些文件的大小不一,有的甚至会有好几十T的大小,那么我们对这些文件进行分析时,又该如何下手呢?这时我们便可以使用linux下自带的一个命令split来实现文件的分割. Split对文件的分割支持按照行数的分割,以及支持按照大小分割两种模式.要说明的是,在二进制文件中,没有'行'的概念,所以二进制文件无法使用行分割,而只能按照文件的大小来进行分割. 本次实验自行分割出一个500M大小的文件,如下图: 我们来对这个模拟文件进行

大文件,5亿整数,怎么排?

问题 给你1个文件bigdata,大小4663M,5亿个数,文件中的数据随机,如下一行一个整数: 6196302 3557681 6121580 2039345 2095006 1746773 7934312 2016371 7123302 8790171 2966901 ... 7005375 现在要对这个文件进行排序,怎么搞? 内部排序 先尝试内排,选2种排序方式: 3路快排: private final int cutoff = 8; public <T> void perform(Co

对大文件排序

设想你有一个20GB的文件,每行一个字符串,说明如何对这个文件进行排序. 内存肯定没有20GB大,所以不可能采用传统排序法.但是可以将文件分成许多块,每块xMB,针对每个快各自进行排序,存回文件系统. 然后将这些块逐一合并,最终得到全部排好序的文件. 外排序的一个例子是外归并排序(External merge sort),它读入一些能放在内存内的数据量,在内存中排序后输出为一个顺串(即是内部数据有序的临时文件),处理完所有的数据后再进行归并.[1][2]比如,要对900MB的数据进行排序,但机器

WCF利用Stream上传大文件

WCF利用Stream上传大文件 转自别人的文章,学习这个例子,基本上wcf也算入门了,接口用法.系统配置都有了 本文展示了在asp.net中利用wcf的stream方式传输大文件,解决了大文件上传问题.主要是存档方便以后遇到该问题是来查阅.贴出部分代码,如果有疑惑或需要完整代码的请留言 WebForm1.aspx.cs protected void Button1_Click(object sender, EventArgs e) {             FileData file = n

利用Lucene和 XPDF 来处理pdf文件

/*  * 利用Lucene和 XPDF 来处理pdf文件  * */ package pdfbox; import java.io.File; import java.io.IOException; public class Pdf2Test { //PDF文件名 private File pdffile; //转换器的存放位置,默认为E:\\xpdf下 ... www.songtaste.com/user/10320243/infowww.songtaste.com/user/1032024

[开源应用]利用HTML5+resumableJs拖拽上传大文件

前言: 大文件传输一直是技术上的一大难点.文件过大时,一些性提交所有的内容进内存是不现实的.大文件带来问题还有是否支持断点传输和多文件同时传输. 本文以resumableJs为例,介绍了如何在ASP.NET中实现大文件传输.同时本文利用了Html5的新特性:支持拖拽. 本文的主要技术点在于:如何接收resumableJs的传送内容(官网不太清楚)和如何合并文件,难度并不高. 注:原博客中,此文章为原站点个人代码备份所用,注释不多,如有不懂,请在评论中给出. 效果: ASPX File: <htm

利用文件打开方式with open(&#39;文件名&#39;,方式) as 变量名做一个简单的复制(排除大文件bug)

1 #!usr/bin/env python 2 #-*- coding=utf-8 -*- 3 4 with open('b.py','r') as obj1, open('c.py','w') as obj2: 5 for line in obj1.read(): 6 obj2.write(line) 将a.py的数据一行一行的进行复制 节省的了内存 另外 这种打开方式 免除了 之后需要的f.close() 对代码量上有细微的差距...(我自己想的...) 注意:第二个open不接with

算法初级面试题05——哈希函数/表、生成多个哈希函数、哈希扩容、利用哈希分流找出大文件的重复内容、设计RandomPool结构、布隆过滤器、一致性哈希、并查集、岛问题

今天主要讨论:哈希函数.哈希表.布隆过滤器.一致性哈希.并查集的介绍和应用. 题目一 认识哈希函数和哈希表 1.输入无限大 2.输出有限的S集合 3.输入什么就输出什么 4.会发生哈希碰撞 5.会均匀分布,哈希函数的离散性,打乱输入规律 public class Code_01_HashMap { public static void main(String[] args) { HashMap<String, String> map = new HashMap<>(); map.p