文本分类实验中用java实现取名词和去除停用词

这点小程序我调了一整天啊啊啊啊啊

本来打算用C语言写一个  可是弄了半天总是出错  上午几乎就在用C语言写了 

写的是:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void get_n(FILE* word_result,FILE* n_result);
int enterchange(FILE *fp);

void main()
{
for(int i=0;i<=9;i++)
{
for(int j=0;j<=1999;j++)
{
FILE *word_result,*n_result;
char name_i[20],name_j[20];
sprintf(name_i,"%d",i);
sprintf(name_j,"%d",j);
char file_path[100];
char file_path_n[100];
//file_path=strcat(strcat(strcat(strcat("E:\\datamining\\ICTCLAS50_Windows_32_JNI\\Sample\\Windows_32_jni_Demo\\file"\\,name_i),"\\"),"result_"),name_j);
sprintf(file_path,"%s%d%s%d%s","E:\\datamining\\ICTCLAS50_Windows_32_JNI\\Sample\\Windows_32_jni_Demo\\file",i,"\\",j,".txt");
sprintf(file_path_n,"%s%d%s%d%s","E:\\datamining\\ICTCLAS50_Windows_32_JNI\\Sample\\Windows_32_jni_Demo\\file",i,"\\",j,"result_n.txt");

word_result = fopen(file_path,"r");
n_result = fopen(file_path_n,"w");



get_n(word_result, n_result);

}//j

}//i



}

void get_n(FILE* word_result,FILE* n_result)
{
enterchange(word_result);
char line[1024];
while(fgets(line,1024,word_result))
{
for(int i=0;i<(int)strlen(line);i++)
{
	if(line[i]=='n'){fprintf(n_result,"%s",line);}
}

}//while


}//get_n


int enterchange(FILE *fp)
{
int c;
if(fp==NULL)
return 1; 
while((c=fgetc(fp))!=EOF)
if(c==' '){
fseek(fp,-1L,1);
fputc('\n',fp);
fseek(fp,0L,1); 
}
fclose(fp);
return 0;
}
也不知道是哪里出错了 

我的想法是把要检察的表中空格都换成回车 然后可以用fgets函数 获取一行 然后查找是不是存在n这个字符 存在就说明是名词 就存到一个新文件中 如果没有 就不存到新文件中

总之没达到效果 希望大神帮我看看怎么回事

然后同学给我传过来他的一段java代码:

//*************************取名词和去除停用词****************************************
	public static void refineNoun() throws IOException{
		String filestopwords = "E:/datamining/ICTCLAS50_Windows_32_JNI/Sample/Windows_32_jni_Demo/file/stop_words_ch.txt";//停用詞表
		File fsw = new File(filestopwords);
		BufferedReader stopreader = new BufferedReader(new FileReader(fsw));
		Set <String> setor = new HashSet <String>();
		String tempt = null;
		while((tempt = stopreader.readLine()) != null){
			setor.add(tempt);
		}
		System.out.println("set over!");
		for(int j=0;j<=9;j++){
            for(int i=10;i<=1999;i++){

				String Outputfilename = "E:/datamining/ICTCLAS50_Windows_32_JNI/Sample/Windows_32_jni_Demo/file/"+j+"/"+"result_"+i+".txt";
				File file = new File(Outputfilename);
				
				
				if(!file.exists()) continue;
				
				
				
				BufferedReader reader = new BufferedReader(new FileReader(file));
				
				String filenewname = "E:/datamining/ICTCLAS50_Windows_32_JNI/Sample/Windows_32_jni_Demo/file/"+j+"/"+"result_data_"+i+".txt";
				File fileout = new File(filenewname);
				FileWriter fw = new FileWriter(fileout);   				
					
				String tmp = null;
				try {
					while((tmp = reader.readLine()) !=null){
						String t = tmp.trim();
						if(t.equals("") ){
							continue;
						}else{
							tmp = " "+tmp;
						}
						//System.out.println(tmpString);
					    String[] str = tmp.split(" ");
					    for(int k=0;k<str.length;k++){
					    	int  m = str[k].indexOf("/");
					    	
					    	if(m != -1){
						    	String x = str[k].substring(m, str[k].length());
						    	String o = str[k].substring(0, m).replaceAll("[a-zA-Z0-9\\pP‘’“”]*", "");
						    	if(x.indexOf('n') != -1 && !(setor.equals(o))){
						    		fw.write(o+" ");
						    		fw.flush();
					    	}else{
					    		k++;
					    	}

					    	}
					    }							
					}
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

				fw.close();	
				//System.out.println(i+"once over!");
				
            }
		}
		
	}



//******************************取名词和去除停用词***********************************	
	

然后我出现的错误是  泛型什么的  使用了未经检察或不安全的操作

然后我加了一个<String>

就搞定啦

后来又出现的错误是我本来有10-19个文件 但是我的循环写的是i=10;i<=199;i++

总是出错 因为我根本不存在这么多文件 这属于异常

然后我就加了一个判断语句

判断文件是不是存在,如果不存在就continue

哇咔咔 好机智的我

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值