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 流方式读取。数据挖掘大文件预处理。的更多相关文章

  1. Java中用内存映射处理大文件

    在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如 ...

  2. Java使用内存映射实现大文件的上传

    在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如 ...

  3. php读取操作大文件

    在php中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能 很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的 ...

  4. PHP读取CSV大文件导入数据库的示例

    对于数百万条数据量的CSV文件,文件大小可能达到数百M,如果简单读取的话很可能出现超时或者卡死的现象. 为了成功将CSV文件里的数据导入数据库,分批处理是非常必要的. 下面这个函数是读取CSV文件中指 ...

  5. PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)

    CSV大文件的读取已经在前面讲述过了(PHP按行读取.处理较大CSV文件的代码实例),但是如何快速完整的操作大文件仍然还存在一些问题. 1.如何快速获取CSV大文件的总行数? 办法一:直接获取文件内容 ...

  6. java通过CLASSPATH读取包内文件

    读取包内文件,使用的路径一定是相对的classpath路径,比如a,位于包内,此时可以创建读取a的字节流:InputStream in = ReadFile.class.getResourceAsSt ...

  7. World Wind Java开发之七——读取本地栅格文件(影像+高程)构建三维场景(转)

    http://blog.csdn.net/giser_whu/article/details/41679515 首先,看下本篇博客要达到的效果图: 下面逐步分析如何加载影像及高程文件. 1.World ...

  8. JAVA用geotools读取shape格式文件

    Shapefile属于一种矢量图形格式,它能够保存几何图形的位置及相关属性.但这种格式没法存储地理数据的拓扑信息. 其中,要组成一个Shapefile,有三个文件是必不可少的,它们分别是". ...

  9. [转]World Wind Java开发之五——读取本地shp文件

    World Wind Java 使用IconLayer图层类表现点和多点数据,使用RenderableLayer图层表现线和面数据,一个图层只能对应一组shape文件.World Wind Java首 ...

随机推荐

  1. POJ1837 Balance(DP)

    POJ1837http://poj.org/problem?id=1837 题目大意就是说有一个称上有C个挂钩,告诉你每个挂钩的位置,现在有G个重物,求是之平衡的方法数. 转化一下:DP[i][j]表 ...

  2. URAL 2068 Game of Nuts (博弈)

    题意:给定 n 堆石子,每次一个人把它们分成三堆都是奇数的,谁先不能分,谁输. 析:因为每堆都是奇数,那么最后肯定都是要分成1的,那么就把不是1的全加和,然后判断奇偶就OK了. 代码如下: #prag ...

  3. 使用JAP(基类)父类注解

    -----------------基类------------------------------- /** * @className:com.jubangit.ebusiness.database. ...

  4. 转载:你可能没注意的CSS单位

    出自:http://www.cnblogs.com/dolphinX/p/4097693.html 扶今追昔 CSS中的单位我们经常用到px.pt.em.百分比,px和pt不用多说 em em是相对单 ...

  5. Android Studio 错误 Duplicate files copied in APK META-INF/LICENSE.txt

    1 .Duplicate files copied in APK META-INF/LICENSE.txt   android { packagingOptions { exclude 'META-I ...

  6. VPW Communication Protocol

    http://www.fastfieros.com/tech/vpw_communication_protocol.htm Breakdown of the j1850 3 byte Header f ...

  7. 部署应用程序QQ

    部署QQ: 1.在模板机上安装.Netframework4.0,然后再安装库中的ApplicationFramework下 SAV_x64_zh-CN 目录下的SeqSetup.exe程序 2.安装完 ...

  8. java 计算一个方法的返回执行时间

    开始时间   long startTime = System.currentTimeMillis(); 程序业务逻辑代码() 结束时间  long endTime = System.currentTi ...

  9. eclipse内存溢出报错:java.lang.OutOfMemoryError:Java heap space

    今天执行了一个比較大的程序,处理的数据达到126MB数据,将数据导入数据库中,用eclipse 来訪问时候,总是出现java.lang.OutOfMemoryError:Java heap space ...

  10. iOS开发——实战OC篇&环境搭建之StoryBoard(玩转UINavigationController与UITabBarController)

      环境搭建之StoryBoard(玩转UINavigationController与UITabBarController)   研究了这么就IOS开发,都没有所处一个像样或者自己忙一点的项目.最近自 ...