JAVA xml 流方式读取。数据挖掘大文件预处理。
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;
import java.util.Iterator;
import java.util.Map; /**
* @author gjf
*db_pre.arff存储的是从xml文件中读取的xml信息
*/
public class ElmAuth {
Map<String, Integer> map = new HashMap<String, Integer>(); //第一步
//从xml文件中提取 读取xml文件中的author信息,写到db_pre.arff,并且替换特殊字符
public void settleXml(String src, String dst){//src=dblp.xml dst=db_pre.arff
File file = new File(src);
File fl = new File(dst);
FileReader fr;
try {
fr = new FileReader(file);
FileWriter fw = new FileWriter(fl);
BufferedReader br = new BufferedReader(fr);
BufferedWriter bw = new BufferedWriter(fw);
String line = null;
boolean flag = true;
int loc_st;
int loc_end;
int len = 0, max = 0;
while((line = br.readLine()) != null){
if(line == null)
break;
loc_st = line.indexOf("<author>");
if(loc_st != -1){
loc_end = line.indexOf("</author>");
line = line.substring(loc_st + 8, loc_end);//在<author></author>之间的数据,一个作者的名字
line=line.replace('&', ' ');
line=line.replace('$', ' ');
line=line.replace("' "," ");
line=line.replace("'", " ");
/*flag以文章为界限,在同一篇文章内,flag=false,写入在同一行*/
if(flag){
bw.write("\n");
bw.write(line);
} else {
bw.write(",");
bw.write(line);
}
len++;//每写一个作者,计数加 +1
flag = false;
} else {
flag = true;
if(max < len) max = len;//选择最大的len;
len = 0;
bw.flush();
}
}
System.out.println("第一步 论文中具有最大的作者数:" + max);
} catch (IOException e) {
e.printStackTrace();
}
} //消除只有单个作item
//第二步:将作者的信息db_pre.arff中只有一个作者的数据删除
public void elimate_one(String src, String dst){//src=db_pre.arff dst=db_elone.arff
try {
File file = new File(src);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
File filew = new File(dst);
FileWriter fw = new FileWriter(filew);
BufferedWriter bw = new BufferedWriter(fw);
Map<String, Integer> map = new HashMap<String, Integer>();
String line = null;
int k = 1;
int res = 0;
while((line = br.readLine()) != null){
String[] arrLine = line.split(",");
//作者之间用","隔离,","的数量表示作者的个数,数量比一少,则不写入.
if(arrLine.length > 1){
bw.write(line);
bw.write("\n");
res ++;
}
}
bw.flush();
br.close();
bw.close();
fr.close();
//System.out.println("The Row of the file is:" + res);
System.out.println("这篇论文中去除单个作者后的行数:" + res);
}catch (IOException e) {
e.printStackTrace();
}
} //将剩余的作储再hashMap中,key值为人名,value为出现的次数,支持度数
public void createMap(String src){//srr=db_elone.arff
try {
File file = new File(src);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr); String line = null;
while((line = br.readLine()) != null){
if(line == null)
break;
String[] arrLine = line.split(",");
for(int i = 0; i < arrLine.length; ++i){
if(map.get(arrLine[i]) == null){
map.put(arrLine[i], 1);
} else {
map.put(arrLine[i], map.get(arrLine[i]) + 1);
}
}
}
fr.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
} //从hashMap中删除小于支持度minsup的作者,本次的支持度数为100;
public void settleMap(int minsup){
Iterator it = map.keySet().iterator();
while(it.hasNext()){
String str = (String) it.next();
if(map.get(str) < minsup){
it.remove();
}
}
System.out.println("Map的大小,支持度大于100的作者个数:" + map.size());
} //将大于minsup的作者存储到文件 db_minsup.arff,存储的是符合筛选的作者
public void updateMap(String src, String dst){//src=db_elone.arff dst=db_minsup.arff
try {
File filer = new File(src);
FileReader fr = new FileReader(filer);
BufferedReader br = new BufferedReader(fr); File filew = new File(dst);
FileWriter fw = new FileWriter(filew);
BufferedWriter bw = new BufferedWriter(fw); String line = null;
int res = 0;
boolean flag = true;
while((line = br.readLine()) != null){
if(line == null)break;
String[] arrLine = line.split(",");
if(flag == false)res++;
flag = true;
for(int i = 0; i < arrLine.length; ++i){
if(map.get(arrLine[i]) != null){
if(flag == true){
bw.write("\n" + arrLine[i]);
flag = false;
} else {
bw.write("," + arrLine[i]);
}
}
}
}
bw.flush();
System.out.println("符合筛选的作者合作写的论文篇数:" + res);
fw.close();
bw.close();
fr.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
} //生成weka识别的文 dst=db
public void createWekaFile(String src, String dst){//src=db_minsup.arff dst=db
try {
File filer = new File(src);
FileReader fr = new FileReader(filer);
BufferedReader br = new BufferedReader(fr); File filew = new File(dst);
FileWriter fw = new FileWriter(filew);
BufferedWriter bw = new BufferedWriter(fw);
bw.write("@relation db" + "\n");
Iterator it = map.keySet().iterator();
while(it.hasNext()){
String str = (String) it.next();
str.replace("'", "\'");
bw.write("@attribute '" + str + "' { t}\n");
}
bw.write("@data" + "\n"); String line = null;
boolean flag = true;
while((line = br.readLine()) != null){
if(line == null)break;
flag = true;
char ch;
it = map.keySet().iterator();
while(it.hasNext()){
String str = (String)it.next();
if(line.indexOf(str) >= 0){
ch = 't';
} else {
ch = '?';
}
if(flag == true){
bw.write(ch);
} else {
bw.write("," + ch);
}
flag = false;
}
bw.write("\n");
}
bw.flush();
fw.close();
bw.close();
fr.close();
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public void clearMap(){
map.clear();
} public static void main(String args[]){
ElmAuth elmauth = new ElmAuth();
elmauth.settleXml("dblp.xml", "db_pre.arff");
elmauth.elimate_one("db_pre.arff", "db_elone.arff");
elmauth.createMap("db_elone.arff");
elmauth.settleMap(100);//确定最小支持度数
elmauth.updateMap("db_elone.arff", "db_minsup.arff"); for(int i = 0; i < 20; ++i){
System.out.println();
elmauth.elimate_one("db_minsup.arff", "db_minsup_elone.arff");
elmauth.clearMap();
elmauth.createMap("db_minsup_elone.arff");
elmauth.settleMap(100);
elmauth.updateMap("db_minsup_elone.arff", "db_minsup.arff");
} elmauth.createWekaFile("db_minsup.arff", "db.arff");
}
}
JAVA xml 流方式读取。数据挖掘大文件预处理。的更多相关文章
- Java中用内存映射处理大文件
在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如 ...
- Java使用内存映射实现大文件的上传
在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如 ...
- php读取操作大文件
在php中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能 很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的 ...
- PHP读取CSV大文件导入数据库的示例
对于数百万条数据量的CSV文件,文件大小可能达到数百M,如果简单读取的话很可能出现超时或者卡死的现象. 为了成功将CSV文件里的数据导入数据库,分批处理是非常必要的. 下面这个函数是读取CSV文件中指 ...
- PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
CSV大文件的读取已经在前面讲述过了(PHP按行读取.处理较大CSV文件的代码实例),但是如何快速完整的操作大文件仍然还存在一些问题. 1.如何快速获取CSV大文件的总行数? 办法一:直接获取文件内容 ...
- java通过CLASSPATH读取包内文件
读取包内文件,使用的路径一定是相对的classpath路径,比如a,位于包内,此时可以创建读取a的字节流:InputStream in = ReadFile.class.getResourceAsSt ...
- World Wind Java开发之七——读取本地栅格文件(影像+高程)构建三维场景(转)
http://blog.csdn.net/giser_whu/article/details/41679515 首先,看下本篇博客要达到的效果图: 下面逐步分析如何加载影像及高程文件. 1.World ...
- JAVA用geotools读取shape格式文件
Shapefile属于一种矢量图形格式,它能够保存几何图形的位置及相关属性.但这种格式没法存储地理数据的拓扑信息. 其中,要组成一个Shapefile,有三个文件是必不可少的,它们分别是". ...
- [转]World Wind Java开发之五——读取本地shp文件
World Wind Java 使用IconLayer图层类表现点和多点数据,使用RenderableLayer图层表现线和面数据,一个图层只能对应一组shape文件.World Wind Java首 ...
随机推荐
- jquery的clone方法bug的修复
最近发现jquery的clone的bug,textarea和select的jquery的clone方法有问题,textarea和select的值clone的时候会丢掉,在网上发现一个插件,下载地址如下 ...
- JDBC 常用驱动类及url格式
1. oracle <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</ ...
- Server-U_详细配置
1.首先绿化 Server-U,运行 2.打开Server-U自动弹出如下图:如果不自动弹出,那点击界面上的 新建域 ------ 先有域再有用户,用户在域里面 4. 输入“名称”和“说明”,其中“ ...
- 无责任Windows Azure SDK .NET开发入门篇二[使用Azure AD 进行身份验证-2.2身份验证开发]
2.2身份验证开发 在我们的案例中,我们是用户通过Web应用程序进行身份识别. 上面的图示说明了如下的一些概念 l Azure AD 是标识提供程序,负责对组织的目录中存在的用户和应用程序的标识进行验 ...
- Python单步调试
运行 运行python -m pdb test.py (Pdb) 会自动停在第一行,等待调试,这时你可以看看帮助 (Pdb) h 几个关键命令 断点设置 (Pdb)b 10 #断点设置在本py的第10 ...
- wchar_t 和 char 之间转换
vc++2005以后,Visual studio 编译器默认的字符集为Unicode.VC中很多字符处理默认为宽字符wchar_t,如CString的getBuffer(),而一些具体操作函数的输入却 ...
- 检测一个DOM对象是否为空
我们时常要检测一个DOM对象是否为空. var $jObject = $('#btn'); alert($jObject ); 我们会发现,$jObject 永远不会为空.为什么呢?$ 方法查找对象, ...
- 转载:rebar和erlang
使用rebar生成erlang release 并进行热代码升级 http://blog.sina.com.cn/s/blog_6530ad590100wmkn.html 使用rebar工具开发erl ...
- NHibernate分页
转载:http://www.cnblogs.com/tenghoo/archive/2011/02/14/1954393.html NHibernate专题:http://kb.cnblogs.com ...
- cocos2dx libcurl
转自:http://www.himigame.com/curl-libcurl/878.html 本篇介绍使用libcurl编程的一般原则和一些基本方法.本文主要是介绍 c 语言的调用接口,同时也可能 ...