程序主函数如下:
public static void main(String[] args) throws Exception
{
HashSet dict=new HashSet();
HashMap docMap=new HashMap();
HashMap contTerms=new HashMap();
dict=readdict("E:\\dict.txt",dict);//词典读入
int count=0;
StringBuffer cont=new StringBuffer();
docMap=fileList("E:\\2006",docMap);
writeConfig(docMap);
StringBuffer sb=new StringBuffer("");
StringBuffer content=new StringBuffer("");
String did=new String("");
String filename=new String("");
Iterator dit=docMap.keySet().iterator();
long startTime=System.currentTimeMillis();
while(dit.hasNext())
{
did=dit.next().toString();
filename=docMap.get(did).toString();
content=readFile(filename);//读入文件内容
sb=delTag("script",content);//去除文件某些内容
content=readHtml(cont,sb);//提取某些内容
contTerms=parserWord(did,content,dict,contTerms);//对正文进行分词统计
System.out.println("prossing:"+count);
count++;
}
long endTime=System.currentTimeMillis();
writeIndex(contTerms);
System.out.println("alltime:"+(endTime-startTime));
System.out.println("total:"+count);
System.out.println("indexNum:"+contTerms.size());
}
}我在做循环时,处理前100个文件速度还可以,但是到后面速度就很慢了,不知道如何提高效率呢?
有什么方法呢?初学ing望大虾们指导下。。
public static void main(String[] args) throws Exception
{
HashSet dict=new HashSet();
HashMap docMap=new HashMap();
HashMap contTerms=new HashMap();
dict=readdict("E:\\dict.txt",dict);//词典读入
int count=0;
StringBuffer cont=new StringBuffer();
docMap=fileList("E:\\2006",docMap);
writeConfig(docMap);
StringBuffer sb=new StringBuffer("");
StringBuffer content=new StringBuffer("");
String did=new String("");
String filename=new String("");
Iterator dit=docMap.keySet().iterator();
long startTime=System.currentTimeMillis();
while(dit.hasNext())
{
did=dit.next().toString();
filename=docMap.get(did).toString();
content=readFile(filename);//读入文件内容
sb=delTag("script",content);//去除文件某些内容
content=readHtml(cont,sb);//提取某些内容
contTerms=parserWord(did,content,dict,contTerms);//对正文进行分词统计
System.out.println("prossing:"+count);
count++;
}
long endTime=System.currentTimeMillis();
writeIndex(contTerms);
System.out.println("alltime:"+(endTime-startTime));
System.out.println("total:"+count);
System.out.println("indexNum:"+contTerms.size());
}
}我在做循环时,处理前100个文件速度还可以,但是到后面速度就很慢了,不知道如何提高效率呢?
有什么方法呢?初学ing望大虾们指导下。。
content=readFile(filename);//读入文件内容
sb=delTag("script",content);//去除文件某些内容
content=readHtml(cont,sb);//提取某些内容
contTerms=parserWord(did,content,dict,contTerms);//对正文进行分词统计
最多时间是它了这还可以优化??public static StringBuffer readFile(String szFileName )//文件读入函数
{
int i=0;
try {
BufferedReader bis = new BufferedReader(new InputStreamReader(new FileInputStream( new File(szFileName)), ENCODE) );
StringBuffer szContent=new StringBuffer();
String szTemp;
while ( (szTemp = bis.readLine()) != null) {
i++;
if(i>=8)//去掉文件里开头9行内容
{
szContent.append(szTemp);
}
}
bis.close();
return szContent;
}
catch( Exception e ) {
System.out.println("read text error!- -!");
return null;
}
}
你每处理一个文件,对这个map的内容清空了吗?
我要全部都要记下来的。
did=dit.next().toString();
filename=docMap.get(did).toString();
content=readFile(filename);//读入文件内容
sb=delTag("script",content);//去除文件某些内容
content=readHtml(cont,sb);//提取某些内容
contTerms=parserWord(did,content,dict,contTerms);//对正文进行分词统计
System.out.println("prossing:"+count);
count++;
}这一段可以优化。
比如,did=dit.next().toString(),每一次循环,都把did原来所指向的串丢掉交给了垃圾回收机,而垃圾回收机不到万不得已不会回收垃圾,即使回收也是要花cpu时间的。所以这句改为did.append(docMap.get(did).toString()),而在contTerms=parserWord(did,content,dict,contTerms);之后再执行did.delete(0,did.length())清空did中的字符。对content,和sb也应该做类似的改进。而deltag(),readFile(),parseWord()三个方法中估计也有类似的问题。另外,stringBuilder和stringBuffer功能一样,但stringBuilder更快一些。