对复旦语料库的预处理

在感谢复旦语料库整理人员辛勤劳动的同时,也要指出其工作上的瑕疵。

  1. 采用了gbk编码而不是UTF-8,这导致大多Linux用户不能直接使用。
  2. 语料库包含训练集和测试集,分别包含9000多个文档,却分别有近1500个文档是重复的。
  3. 训练集和测试集中的C35-Law中的部分文件是已经经过分词处理了的(分词结果很差),且部分又不是采用的GBK编码(这给编码转换工作带来麻烦)。
  4. 有些文章只有文章头部,而没有实际的内容。

step1.下载复旦语料库的训练集测试集。解压。

step2.分别删除train和answer文件夹下的C35-Law文件夹。

step3.使用FindDupFile工具分别找到train和answer文件夹的重复文件,删除之。

step4.使用iconv.exe工具把文件从gbk编码转换到utf-8编码。

step5.为提高文本分类精度,删除所有长度小于500的文档。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

public class DelSmallText {
	public void delSmallText(File srcFile){
		if(srcFile.isDirectory()){
			File[] childFiles=srcFile.listFiles();
			for(File child:childFiles){
				delSmallText(child);
			}
		}
		else if(srcFile.isFile()){
			StringBuffer content=new StringBuffer();
			try{
				FileReader fr=new FileReader(srcFile);
				BufferedReader br=new BufferedReader(fr);
				String line;
				while((line=br.readLine())!=null){		//readLine()并不读取末尾的换行符
					content.append(line.trim());	//只去除行首尾的空格,因为去除空格的话连续的英文单词合并到了一起
				}
				br.close();
				if(content.toString().length()<500){
					srcFile.delete();
				}
			}catch (Exception e){
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args){
		DelSmallText inst=new DelSmallText();
		File file=new File("/home/orisun/master/fudan_corpus/train");
		inst.delSmallText(file);
	}
}

step6.删除文档中每行开头和结尾的空格,把文档合并为一行。同时给每个文档赋予一个全局编号,该编号除要写入文件名中外,还要写入文档内容的开头。用Java实现非常简单:

/**
 * Author: Orisun
 * Date: Sep 5, 2011
 * FileName: RemoveSpaceAndWrap.java
 * Function: 去除正文每行末的换行符,去除每行首尾的空格,把整个文档合并为一行.同时给每个文档赋予一个全局编号,该编号除要写入文件名中外,还要写入文档内容的开头。
 */

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

public class RemoveSpaceAndWrap {
	int rank=0;
	//把文件名写入文档开头,用一个制表符与正文内容隔开。去除正文每行末的换行符,把整个文档合并为一行,去除正文行间的空格.
	public void delWrapAndSpace(File srcFile){
		
		if(srcFile.isDirectory()){
			File[] childFiles=srcFile.listFiles();
			for(File child:childFiles){
				delWrapAndSpace(child);
			}
		}
		else if(srcFile.isFile()){
			//把文档编号写入文档开头
			StringBuffer content=new StringBuffer(String.valueOf(rank)+"\t");
			try{
				FileReader fr=new FileReader(srcFile);
				BufferedReader br=new BufferedReader(fr);
				String line;
				while((line=br.readLine())!=null){		//readLine()并不读取末尾的换行符
					content.append(line.trim());	//只去除行首尾的空格,因为去除空格的话连续的英文单词合并到了一起
				}
				br.close();
				FileWriter fw=new FileWriter(srcFile);
				BufferedWriter bw=new BufferedWriter(fw);
				bw.write(content.toString());
				bw.flush();
				bw.close();
				//重命名文件,把文件编号写入文件名
				String fileName=srcFile.getName();
				String cat=fileName.split("-")[0];
				String newName=cat+"-"+String.valueOf(rank);
				srcFile.renameTo(new File(srcFile.getParent(),newName));
				rank++;
			}catch (Exception e){
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args){
		RemoveSpaceAndWrap rsw=new RemoveSpaceAndWrap();
		File file=new File("/home/orisun/master/fudan_corpus/train");
		rsw.delWrapAndSpace(file);
	}
}

step7.最后删除文档数小于100的分类。

最后剩余的语料情况是:

训练集trainbeginend测试集answerbeginend
C39-Sports107001069C39-Sports106601065
C7-History44010701509C7-History44710661512
C3-Art51315102022C3-Art50815132020
C32-Agriculture81620232838C32-Agriculture82220212842
C31-Enviornment75028393588C31-Enviornment74128433583
C38-Politics75635894344C38-Politics75835844341
C34-Economy139243455736C34-Economy140443425745
C11-Space47357376209C11-Space46357466208
C19-Computer98662107195C19-Computer98462097192
Total7196  Total7193  



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值