黑马程序员技术交流社区
标题:
多个txt文件合并,并清洗助词
[打印本页]
作者:
十七
时间:
2014-10-25 16:20
标题:
多个txt文件合并,并清洗助词
这段程序是把C:\\Documents and Settings\\admin\\桌面\\文件,这个文件夹下面的所有txt文件合并成一个txt文件C:\\Documents and Settings\\admin\\桌面\\文件\\output.txt。并去除其中的助词。但是程序没停下来,请高手指点指点{:2_32:}
package com.venus.txttest;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
/*
* 目的:
* 合并文件的同时,去除一些不要的字,并输出行数
*/
public class Merge {
public static final int BUFSIZE = 1024 * 1024 * 10;
private static String stopwords = "\\b(啊|阿|哎|哎呀|哎哟|唉|俺|俺们|按|按照|吧|吧哒|把|罢了|被|本|本着|" +
"比|比方|比如|鄙人|彼|彼此|边|别|别的|别说|并|并且|不比|不成|不单|不但|不独|不管|不光|不过|不仅|不拘|不论|不怕|" +
"不然|不如|不特|不惟|不问|不只|朝|朝着|趁|趁着|乘|冲|除|除此之外|除非|除了|此|此间|此外|从|从而|打|待|但|但是|当|当着|" +
"到|得|的|的话|等|等等|地|第|叮咚|对|对于|多|多少|而况|而且|而是|而外|而言|而已|尔后|反过来|反过来说|反之|非但|非徒|" +
"否则|嘎|嘎登|该|赶|个|各|各个|各位|各种|各自|给|根据|跟|故|故此|固然|关于|管|归|果然|果真|过|哈|哈哈|呵|和|何|何处|何况|何时" +
"|嘿|哼|哼唷|呼哧|乎|哗|还是|还有|换句话说|换言之|或|或是|或者|极了|及|及其|及至|即|即便|即或|即令|即若|即使|几|几时|己|既|既然|既是|" +
"继而|加之|假如|假若|假使|鉴于|将|较|较之|叫|接着|结果|借|紧接着|进而|尽|尽管|经|经过|就|就是|就是说|据|具体地说|具体说来|开始|开外|靠" +
"|咳|可|可见|可是|可以|况且|啦|来|来着|离|例如|哩|连|连同|两者|了|临|另|另外|另一方面|论|嘛|吗|慢说|漫说|冒|么|每|每当|们|莫若|某|某个" +
"|某些|拿|哪|哪边|哪儿|哪个|哪里|哪年|哪怕|哪天|哪些|哪样|那|那边|那儿|那个|那会儿|那里|那么|那么些|那么样|那时|那些|那样|乃|乃至|呢|能|" +
"你|你们|您|宁|宁可|宁肯|宁愿|哦|呕|啪达|旁人|呸|凭|凭借|其|其次|其二|其他|其它|其一|其余|其中|起|起见|起见|岂但|恰恰相反|前后|前者|且|然而|" +
"然后|然则|让|人家|任|任何|任凭|如|如此|如果|如何|如其|如若|如上所述|若|若非|若是|啥|上下|尚且|设若|设使|甚而|甚么|甚至|省得|时候|什么|什么样|" +
"使得|是|是的|首先|谁|谁知|顺|顺着|似的|虽|虽然|虽说|虽则|随|随着|所|所以|他|他们|他人|它|它们|她|她们|倘|倘或|倘然|倘若|倘使|腾|替|通过|同|同时|哇|" +
"万一|往|望|为|为何|为了|为什么|为着|喂|嗡嗡|我|我们|呜|呜呼|乌乎|无论|无宁|毋宁|嘻|吓|相对而言|像|向|向着|嘘|呀|焉|沿|沿着|要|要不|要不然|要不是|要么|" +
"要是|也|也罢|也好|一|一般|一旦|一方面|一来|一切|一样|一则|依|依照|矣|以|以便|以及|以免|以至|以至于|以致|抑或|因|因此|因而|因为|哟|用|由|由此可见|由于|有|" +
"有的|有关|有些|又|于|于是|于是乎|与|与此同时|与否|与其|越是|云云|哉|再说|再者|在|在下|咱|咱们|则|怎|怎么|怎么办|怎么样|怎样|咋|照|照着|者|这|这边|这儿|这个" +
"|这会儿|这就是说|这里|这么|这么点儿|这么些|这么样|这时|这些|这样|正如|吱|之|之类|之所以|之一|只是|只限|只要|只有|至|至于|诸位|着|着呢|自|自从|自个儿|" +
"自各儿|自己|自家|自身|综上所述|总的来看|总的来说|总的说来|总而言之|总之|纵|纵令|纵然|纵使|遵照|作为|兮|呃|呗|咚|咦||喏|啐|喔唷|嗬|嗯|嗳)\\b";
private static final Pattern reStopwords = Pattern.compile(stopwords,Pattern.CASE_INSENSITIVE);
private static final Pattern rePunctuation = Pattern.compile("[^\\p{L}\\p{N}]"); // L:Letter, N:Number
private static final Pattern reSpaceOrAnderscore = Pattern.compile("(_|\\s)+");
private static final Pattern Letters =Pattern.compile("[a-zA-Z]");
// private static final Pattern Letters =Pattern.compile("^soft tissue 2APE$");
private static final Pattern Digits =Pattern.compile("[0-9]");
public static String TransformString(String str) {
String first = null;
//remove stop words
String stopWdRemoved = reStopwords.matcher(str).replaceAll(" ");
//remove punctuation
String punctRemoved = rePunctuation.matcher(stopWdRemoved).replaceAll(" ");
//remove more spaces
String lettersRemoved = Letters.matcher(punctRemoved).replaceAll(" ");
String digitsRemoved = Digits.matcher(lettersRemoved).replaceAll(" ");
String moreSpaceRemoved=reSpaceOrAnderscore.matcher(digitsRemoved).replaceAll(" ");
return moreSpaceRemoved;
}
public static List<String> getFileNames(String direc){
try{
File file = new File(direc);
File files[] = file.listFiles();
List<String> list = new ArrayList<String>();
for (File f : files) {
list.add(f.getCanonicalPath());
}
return list;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
public static void mergeFiles(String outFile, String direc) {
List<String> fileNames = getFileNames(direc);
BufferedWriter bw = null;
BufferedReader br = null;
try {
bw = new BufferedWriter(new FileWriter(outFile));
int i = 0;
for (String f : fileNames) {
br = new BufferedReader(new InputStreamReader(new FileInputStream(f), "UTF-8"));
String line = null;
String result = new String();
while ((line = br.readLine())!=null) {
result = TransformString(line).trim();
if(result.length()!=0) {
bw.write(result);
bw.newLine();
bw.flush();
System.out.println(i++ +" " + result );
}
}
}
// out.println("Merged!! ");
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
try {
if (bw != null) {
bw.close();
}
} catch (IOException ignore) {
ignore.printStackTrace();
}
}
}
public static void main(String[] args) {
//调用此方法,只需要填写两个参数,第一个:输出至那个文件
// 第二个:被读取文件所在的目录
mergeFiles("C:\\Documents and Settings\\admin\\桌面\\文件\\output.txt", "C:\\Documents and Settings\\admin\\桌面\\文件");
}
}
复制代码
作者:
qinjingbo
时间:
2014-10-25 22:24
看到这么多代码,头都大了,菜鸟飘过。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2