版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
河北科技大學(xué)課程設(shè)計(jì)報(bào)告學(xué)生姓名:祝冬冬學(xué)號(hào):080702102專業(yè)班級(jí):計(jì)算機(jī)科學(xué)與技術(shù)課程名稱:基于classifier4j的文本分類學(xué)年學(xué)期:2010—2011學(xué)年第2學(xué)期指導(dǎo)教師:許云峰2011年6月課程設(shè)計(jì)成績?cè)u(píng)定表學(xué)生姓名祝冬冬學(xué)號(hào)080702102成績專業(yè)班級(jí)計(jì)算機(jī)科學(xué)與技術(shù)起止時(shí)間2011/6/6至設(shè)計(jì)題目基于classifier4j的文本分類指導(dǎo)教師評(píng)語指導(dǎo)教師:年月日目錄(示例)TOC\o"1-2"\h\z\u一、 設(shè)計(jì)題目 1二、 設(shè)計(jì)目的 1三、 設(shè)計(jì)原理及方案 11 使用的軟件工具和環(huán)境 12 需求分析與概要設(shè)計(jì) 13 數(shù)據(jù)庫設(shè)計(jì)(無) 14 詳細(xì)設(shè)計(jì)和關(guān)鍵問題 3四、 實(shí)現(xiàn)效果 3五、 設(shè)計(jì)體會(huì) 4PAGE23設(shè)計(jì)題目基于classifier4j的文本分類設(shè)計(jì)目的進(jìn)一步鞏固Java基礎(chǔ)理論和知識(shí),加深Java面向?qū)ο筇匦缘睦斫?,鍛煉利用開發(fā)工具實(shí)現(xiàn)Java應(yīng)用軟件的基本技能,提高利用面向?qū)ο蟪绦蛟O(shè)計(jì)方法解決實(shí)際問題的能力。并運(yùn)用課外知識(shí),利用classfiler4j包來實(shí)現(xiàn)文本分類,對(duì)于給出的文本打分分類。設(shè)計(jì)原理及方案使用的軟件工具和環(huán)境MyEclipse、win7系統(tǒng)。該課程設(shè)計(jì)以MyEclipse作為開發(fā)工具。java作為開發(fā)語言,并基于開源程序代碼classifier4j。MyEclipse是企業(yè)級(jí)工作平臺(tái)(MyEclipseEnterpriseWorkbench,簡(jiǎn)稱MyEclipse)是對(duì)EclipseIDE的擴(kuò)展,利用它我們可以在數(shù)據(jù)庫和JavaEE的開發(fā)、發(fā)布,以及應(yīng)用程序服務(wù)器的整合方面極大的提高工作效率。它是功能豐富的JavaEE集成開發(fā),包括了完備的編碼、調(diào)試、測(cè)試和發(fā)布功能,完整支持HTML,Struts,JSF,CSS,Javascript,SQL,Hibernate。在結(jié)構(gòu)上,MyEclipse的特征可以被分為7類:1.J2EE模型2.WEB開發(fā)工具3.EJB開發(fā)工具4.應(yīng)用程序服務(wù)器的連接器5.J2EE項(xiàng)目部署服務(wù)6.數(shù)據(jù)庫服務(wù)7.MyEclipse整合幫助對(duì)于以上每一種功能上的類別,在Eclipse中都有相應(yīng)的功能部件,并通過一系列的插件來實(shí)現(xiàn)它們。MyEclipse結(jié)構(gòu)上的這種模塊化,可以讓我們?cè)诓挥绊懫渌K的情況下,對(duì)任一模塊進(jìn)行單獨(dú)的擴(kuò)展和升級(jí)。簡(jiǎn)單而言,MyEclipse是Eclipse的插件,也是一款功能強(qiáng)大的J2EE集成開發(fā)環(huán)境,支持代碼編寫、配置、測(cè)試以及除錯(cuò)。需求分析與概要設(shè)計(jì)本課程設(shè)計(jì)的目的是利用classifier4j類對(duì)文本進(jìn)行分類,實(shí)現(xiàn)文本自動(dòng)分類。文本分類一般包括了文本的表達(dá)、分類器的選擇與訓(xùn)練、分類結(jié)果的評(píng)價(jià)與反饋等過程,其中文本的表達(dá)又可細(xì)分為文本預(yù)處理、索引和統(tǒng)計(jì)、特征抽取等步驟。文本分類系統(tǒng)的總體功能模塊為:(1)預(yù)處理:將原始語料格式化為同一格式,便于后續(xù)的統(tǒng)一處理;(2)索引:將文檔分解為基本處理單元,同時(shí)降低后續(xù)處理的開銷;(3)統(tǒng)計(jì):詞頻統(tǒng)計(jì),項(xiàng)(單詞、概念)與分類的相關(guān)概率;(4)特征抽?。簭奈臋n中抽取出反映文檔主題的特征;(5)分類器:分類器的訓(xùn)練;(6)評(píng)價(jià):分類器的測(cè)試結(jié)果分析。結(jié)構(gòu)圖:classmyhashmaptermvectorsttomyhashmaptermvectorsttoPackagemyClassfiler4jmytokenizermyClassfiler4jmytokenizermyutilitesmyutilitesrunrunjavaprojectmyvectorclassifiertestfilerjavaprojectjavaprojectjavaprojectJava.i0javaprojectjavaprojectjavaprojectJava.i0Classifier4jClassifier4jMyclassfiler4jJava.utilMyclassfiler4jJava.utilLLucene.analysersImportJava.utilJava.util ImportrunrunOOrg.junit圖1各個(gè)包之間的調(diào)用如圖1所示3詳細(xì)設(shè)計(jì)和關(guān)鍵問題本課程設(shè)計(jì)的關(guān)鍵問題是怎樣使用java調(diào)用各種類包以實(shí)現(xiàn)文本分類作用。因此無論是我們現(xiàn)實(shí)生活中還是從網(wǎng)絡(luò)中,有關(guān)文本分類的應(yīng)用程序很廣泛。但是java調(diào)用各個(gè)實(shí)用類以及classifier4J的各種JAR包還是有一定難度。因此通過查閱、整合大量資料,我們找到了一些可以實(shí)現(xiàn)分類的java類和jar包。同時(shí)經(jīng)過認(rèn)真的修改,將其改為適合我們使用的java類。而這些類和接口則是實(shí)現(xiàn)classifier4J的文本分類調(diào)用的關(guān)鍵。通過多次實(shí)驗(yàn)和修改,我們已將其改成能夠?qū)崿F(xiàn)對(duì)文本類文件進(jìn)行分類的java接口層和類包。4實(shí)現(xiàn)效果四.設(shè)計(jì)體會(huì)通過這幾天的java課程設(shè)計(jì),基本上達(dá)到了預(yù)定的目標(biāo)這次課程設(shè)計(jì)我做的是章節(jié)自測(cè)系統(tǒng),通過這次課程設(shè)計(jì),我從中學(xué)會(huì)了認(rèn)真思考和不屈不撓的精神,遇到困難要冷靜思考,認(rèn)真分析才能解決問題,基本上掌握了classifier4j的使用和包之間的調(diào)用,對(duì)于老師上課講的一些內(nèi)容,又進(jìn)行了復(fù)習(xí),加強(qiáng)了記憶和了解。在這次設(shè)計(jì)過程中,體現(xiàn)出自己?jiǎn)为?dú)設(shè)計(jì)模具的能力以及綜合運(yùn)用知識(shí)的能力,體會(huì)了學(xué)以致用、突出自己勞動(dòng)成果的喜悅心情,從中發(fā)現(xiàn)自己平時(shí)學(xué)習(xí)的不足和薄弱環(huán)節(jié),從而加以彌補(bǔ)。程設(shè)計(jì)是我們專業(yè)課程知識(shí)綜合應(yīng)用的實(shí)踐訓(xùn)練,是我們邁向社會(huì),從事職業(yè)工作前一個(gè)必不少的過程.”千里之行始于足下”,通過這次課程設(shè)計(jì),我深深體會(huì)到這句千古名言的真正含義.我今天認(rèn)真的進(jìn)行課程設(shè)計(jì),學(xué)會(huì)腳踏實(shí)地邁開這一步,就是為明天能穩(wěn)健地在社會(huì)大潮中奔跑打下堅(jiān)實(shí)的基礎(chǔ).通過和同學(xué)之間的合作,終于把課程設(shè)計(jì)弄好,我懂得了團(tuán)隊(duì)寫作的重要性,這對(duì)我以后工作有著非常重要的作用。由于本設(shè)計(jì)能力有限,在設(shè)計(jì)過程中難免出現(xiàn)錯(cuò)誤,懇請(qǐng)老師們多多指教,我十分樂意接受你們的批評(píng)與指正。附錄試驗(yàn)程序文件1packagemyClassfiler4j;importjava.util.HashMap;importjava.util.Map;importnet.sf.classifier4J.vector.TermVector;importnet.sf.classifier4J.vector.TermVectorStorage;publicclassMyHashMapTermVectorStorageimplementsTermVectorStorage{ privateMapstorage=newHashMap(); publicMapgetStorage(){ returnstorage; } publicvoidsetStorage(Mapstorage){ this.storage=storage; } /** *@seenet.sf.classifier4J.vector.TermVectorStorage#addTermVector(java.lang.String,net.sf.classifier4J.vector.TermVector) */ publicvoidaddTermVector(Stringcategory,TermVectortermVector){ storage.put(category,termVector); } /** *@seenet.sf.classifier4J.vector.TermVectorStorage#getTermVector(java.lang.String) */ publicTermVectorgetTermVector(Stringcategory){ return(TermVector)storage.get(category); } }文件2packagemyClassfiler4j;importjava.io.IOException;importjava.io.StringReader;importjava.util.ArrayList;importjava.util.List;importnet.sf.classifier4J.ITokenizer;importorg.apache.lucene.analysis.tokenattributes.TermAttribute;importorg.wltea.analyzer.lucene.IKTokenizer;publicclassMyTokenizerimplementsITokenizer{ privateListlist; privateString[]strArray; publicString[]tokenize(Stringinput){ list=newArrayList<String>(); IKTokenizertokenizer=newIKTokenizer(newStringReader(input),true); try{ while(tokenizer.incrementToken()){ TermAttributetermAtt=(TermAttribute)tokenizer.getAttribute(TermAttribute.class);// strArray[i]=termAtt.toString();// Stringstr=termAtt.toString();// System.out.println(str);// str=str.substring(str.indexOf("=")+1); Stringstr=termAtt.term(); // System.out.println(str); //TODO優(yōu)化中文分詞 list.add(str); } }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } strArray=newString[list.size()]; for(inti=0;i<list.size();i++){ strArray[i]=(String)list.get(i); } returnstrArray; } }文件3packagemyClassfiler4j;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Collections;importjava.util.HashMap;importjava.util.Iterator;importjava.util.LinkedHashSet;importjava.util.List;importjava.util.Map;importjava.util.Set;importjava.util.TreeSet;importnet.sf.classifier4J.DefaultStopWordsProvider;importnet.sf.classifier4J.DefaultTokenizer;importnet.sf.classifier4J.IStopWordProvider;importnet.sf.classifier4J.ITokenizer;publicclassMyUtilities{ publicstaticMapgetWordFrequency(Stringinput){ returngetWordFrequency(input,false); } publicstaticMapgetWordFrequency(Stringinput,booleancaseSensitive){ returngetWordFrequency(input,caseSensitive,newMyTokenizer(),newDefaultStopWordsProvider()); } /** *GetaMapofwordsandIntegerrepresentingthenumberofeachword * *@paraminputTheStringtogetthewordfrequencyof *@paramcaseSensitivetrueifwordsshouldbetreatedasseparateiftheyhavedifferentcase *@paramtokenizerajunit.framework.TestCase#run() *@paramstopWordsProvider *@return */ publicstaticMapgetWordFrequency(Stringinput,booleancaseSensitive,ITokenizertokenizer,IStopWordProviderstopWordsProvider){ StringconvertedInput=input; if(!caseSensitive){ convertedInput=input.toLowerCase(); } //tokenizeintoanarrayofwords String[]words=tokenizer.tokenize(convertedInput); Arrays.sort(words); String[]uniqueWords=getUniqueWords(words); Mapresult=newHashMap(); for(inti=0;i<uniqueWords.length;i++){ if(stopWordsProvider==null){ //nostopwordprovider,soaddallwords result.put(uniqueWords[i],newInteger(countWords(uniqueWords[i],words))); }elseif(isWord(uniqueWords[i])&&!stopWordsProvider.isStopWord(uniqueWords[i])){ //addonlywordsthatarenotstopwords result.put(uniqueWords[i],newInteger(countWords(uniqueWords[i],words))); } } returnresult; } privatestaticString[]findWordsWithFrequency(MapwordFrequencies,Integerfrequency){ if(wordFrequencies==null||frequency==null){ returnnewString[0]; }else{ Listresults=newArrayList(); Iteratorit=wordFrequencies.keySet().iterator(); while(it.hasNext()){ Stringword=(String)it.next(); if(frequency.equals(wordFrequencies.get(word))){ results.add(word); } } return(String[])results.toArray(newString[results.size()]); } } publicstaticSetgetMostFrequentWords(intcount,MapwordFrequencies){ Setresult=newLinkedHashSet(); Integermax=(Integer)Collections.max(wordFrequencies.values()); intfreq=Value(); while(result.size()<count&&freq>0){ //thisisveryicky Stringwords[]=findWordsWithFrequency(wordFrequencies,newInteger(freq)); result.addAll(Arrays.asList(words)); freq--; } returnresult; } privatestaticbooleanisWord(Stringword){ if(word!=null&&!word.trim().equals("")){ returntrue; }else{ returnfalse; } } /** *Findalluniquewordsinanarrayofwords * *@paraminputanarrayofStrings *@returnanarrayofalluniquestrings.Orderisnotguarenteed */ publicstaticString[]getUniqueWords(String[]input){ if(input==null){ returnnewString[0]; }else{ Setresult=newTreeSet(); for(inti=0;i<input.length;i++){ result.add(input[i]); } return(String[])result.toArray(newString[result.size()]); } } /** *Counthowmanytimesawordappearsinanarrayofwords * *@paramwordThewordtocount *@paramwordsnon-nullarrayofwords */ publicstaticintcountWords(Stringword,String[]words){ //findtheindexofoneoftheitemsinthearray. //FromtheJDKdocsonbinarySearch: //Ifthearraycontainsmultipleelementsequaltothespecifiedobject,thereisnoguaranteewhichonewillbefound. intitemIndex=Arrays.binarySearch(words,word); //iteratebackwardsuntilwefindthefirstmatch if(itemIndex>0){ while(itemIndex>0&&words[itemIndex].equals(word)){ itemIndex--; } } //nowitemIndexisoneitembeforethestartofthewords intcount=0; while(itemIndex<words.length&&itemIndex>=0){ if(words[itemIndex].equals(word)){ count++; } itemIndex++; if(itemIndex<words.length){ if(!words[itemIndex].equals(word)){ break; } } } returncount; } /** * *@paraminputaStringwhichmaycontainmanysentences *@returnanarrayofStrings,eachelementcontainingasentence */ publicstaticString[]getSentences(Stringinput){ if(input==null){ returnnewString[0]; }else{ //splitona".",a"!",a"?"followedbyaspaceorEOL// returninput.split("(\\.|!|\\?)+(\\s|\\z)"); //中文分隔符regex=“[。?!]+(\\s)*[^”](\\s|\\z)*” returninput.split("[。?!]+(\\s)*[^”](\\s|\\z)*"); } } /** *GivenaninputStream,thismethodreturnsaString.Newlinesare *replacedwith"" */ publicstaticStringgetString(InputStreamis)throwsIOException{ BufferedReaderreader=newBufferedReader(newInputStreamReader(is)); Stringline=""; StringBufferstringBuffer=newStringBuffer(); while((line=reader.readLine())!=null){ stringBuffer.append(line); stringBuffer.append(""); } reader.close(); returnstringBuffer.toString().trim(); }}文件4packagemyClassfiler4j;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;importjava.io.StringWriter;importjava.io.UnsupportedEncodingException;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importjava.util.Set;importnet.sf.classifier4J.AbstractCategorizedTrainableClassifier;importnet.sf.classifier4J.ClassifierException;importnet.sf.classifier4J.DefaultStopWordsProvider;importnet.sf.classifier4J.IStopWordProvider;importnet.sf.classifier4J.Utilities;importnet.sf.classifier4J.vector.TermVector;importnet.sf.classifier4J.vector.TermVectorStorage;importnet.sf.classifier4J.vector.VectorUtils;//importTrainingSample.PropertyGlobal;/***此類根據(jù)VecotrClasifier實(shí)現(xiàn)的的。*@authorlemon**/publicclassMyVectorClassifierextendsAbstractCategorizedTrainableClassifier{ publicstaticdoubleDEFAULT_VECTORCLASSIFIER_CUTOFF=0.80d; publicstaticfinalStringMODELPATH="c:/model0"; publicstaticfinalStringMODELNAME="model0.dwl"; publicstaticfinalintNUM_WORD=100; privateintnumTermsInVector=25; //將文本切分成單詞集合// privateITokenizertokenizer; MyTokenizertokenizer;// IKTokenizertokenizer=newIKTokenizer(newStringReader(t),false);// try{// while(tokenizer.incrementToken()){// TermAttributetermAtt=tokenizer.getAttribute(TermAttribute.class);// System.out.println(termAtt.term()); // }// }catch(IOExceptione){// //Auto-generatedcatchblock// e.printStackTrace();// } //stopword列表 privateIStopWordProviderstopWordsProvider; privateTermVectorStoragestorage; publicTermVectorStoragegetStorage(){ returnstorage; } publicvoidsetStorage(TermVectorStoragestorage){ this.storage=storage; } privateStringpathname; publicMyVectorClassifier(){ tokenizer=newMyTokenizer(); stopWordsProvider=newDefaultStopWordsProvider(); storage=newMyHashMapTermVectorStorage(); setMatchCutoff(DEFAULT_VECTORCLASSIFIER_CUTOFF); } publicMyVectorClassifier(TermVectorStoragestorage){ this(); this.storage=storage; } publicdoubleclassify(Stringcategory,Stringinput) throwsClassifierException{ /** *//首先由tokenizer將文本input切分成單詞集合words,不接收stopword集合中的單詞 *//然后通過Utilities的getWordFrequency方法獲取單詞頻率 *//Createamapofthewordfrequencyfromtheinput *MapwordFrequencies=Utilities.getWordFrequency(input,false,tokenizer,stopWordsProvider); *//獲取欲匹配類別的特征向量TermVectortv=storage.getTermVector(category); *if(tv==null){return0;}else{ *//按照類別特征向量中的單詞獲取輸入單詞集合中的詞頻 *//如果沒有匹配記錄,返回0(參見generateTermValuesVector方法) *int[]inputValues=generateTermValuesVector(tv.getTerms(),wordFrequencies); *//計(jì)算類別特征向量與輸入特征向量的cosine距離,作為input對(duì)category類的匹配程度 *returnVectorUtils.cosineOfVectors(inputValues,tv.getValues());} */ //這個(gè)Map存放的是input中詞的頻率單詞 MapwordFrequencies=MyUtilities.getWordFrequency(input); TermVectortv=storage.getTermVector(category); if(tv==null){ return0; }else{ int[]inputValues=generateTermValuesVector(tv.getTerms(),wordFrequencies); returnVectorUtils.cosineOfVectors(inputValues,tv.getValues()); } } //得到fatherclass的名稱 privateStringfilename(Stringfilename){ intstart=filename.lastIndexOf("\\"); if(start<=0) start=filename.lastIndexOf("/"); returnfilename.substring(start+1); } /** *讀取訓(xùn)練 */ publicvoidsetTrainSet(StringpathTrain){ Stringfatherclass=null; //得到訓(xùn)練文件所在的位置 Filedir=newFile(pathTrain); //得到在訓(xùn)練文件下的所有的文件 File[]files=dir.listFiles(); for(inti=0;i<files.length;i++){ Filef=files[i]; if(f.isDirectory()){ System.out.println(f.getAbsolutePath()); fatherclass=filename(f.getAbsolutePath()); System.out.println(fatherclass); StringsubTrain=pathTrain+"/"+f.getAbsoluteFile().getName(); //得到子訓(xùn)練文件的文件對(duì)象 FileFile_subTrain=newFile(subTrain); //得到訓(xùn)練文件的文件對(duì)象txt文件。 File[]files_txt=File_subTrain.listFiles(); for(intj=0;j<files_txt.length;j++){ Stringfile_txt_path=subTrain+"/"+files_txt[j].getAbsoluteFile().getName(); train(file_txt_path,fatherclass); } } else{//當(dāng)不是二級(jí)分類時(shí) train(f.toString(),null);// System.out.println(f.toString()); } } setModel(storage,null); } /** *訓(xùn)練方法,主要負(fù)責(zé),訓(xùn)練穿過來的文本,并且加入到Map中,并寫入model文件。 *@paramfilepath */ privatevoidtrain(Stringfilepath,Stringfatherclass){// MySummariserms=newMySummariser(); StringWritersw=newStringWriter(); Filefile=newFile(filepath);// Stringcategory=filepath.substring(filepath.lastIndexOf("/"),filepath.lastIndexOf("."));// System.out.println(filepath.lastIndexOf("\\"));// System.out.println(filepath.lastIndexOf("."));// System.out.println(filepath); intstart=filepath.lastIndexOf("\\")+1; if(start<=0) start=filepath.lastIndexOf("/")+1; intend=filepath.lastIndexOf("."); // System.out.println(start+""+end); Stringcategory=filepath.substring(start,end); //下面的到分類的父親類// Stringfatherclass=null;// start=filepath.indexOf("/");// if(start<=0){// start=filepath.indexOf("\\");// }// if(start>0){// fatherclass=filepath.substring(start);// }// // // if(fatherclass.indexOf("/")>0||fatherclass.indexOf("\\")>0){// fatherclass=// // } Stringinput=null; try{ FileReaderfread=newFileReader(file); BufferedReaderbr=newBufferedReader(fread,512); do{ input=br.readLine(); sw.append(input); }while(input==null); }catch(FileNotFoundExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } try{ input=newString(sw.toString().getBytes(),"utf-8"); }catch(UnsupportedEncodingExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } //上面的代碼是讀取文件內(nèi)容,下面代碼是提取出現(xiàn)頻率最大的詞放入到TermVector //getthefrequencyofeachwordintheinputMapwordFrequencies=MyUtilities.getWordFrequency(input);//nowcreateasetoftheXmostfrequentwordsSetmostFrequentWords=MyUtilities.getMostFrequentWords(NUM_WORD,wordFrequencies); Object[]array=mostFrequentWords.toArray();//tv=newTermVector(mostFrequentWords.),mostFrequentWords.size());String[]terms=(String[])mostFrequentWords.toArray(newString[mostFrequentWords.size()]);Arrays.sort(terms);int[]values=generateTermValuesVector(terms,wordFrequencies);TermVectortv=newTermVector(terms,values);if(fatherclass==null)storage.addTermVector(category,tv);else storage.addTermVector(fatherclass+"/"+category,tv);System.out.println(category);// System.out.println(ms.summarise(input,3)); } /** *設(shè)置類模式,實(shí)現(xiàn)的功能的:寫入模式到硬盤,其中包括:創(chuàng)建文件,寫入文件。 */ publicvoidsetModel(TermVectorStoragetvs,StringstarinPath){// publicvoidsetModel(Stringclasspath)原先的定義// Stringmodelname=null;// //得到Model路徑// intstart=pathModel.indexOf("\\")+1;// if(start<=0)// start=pathModel.indexOf("/")+1;// pathModel=pathModel.substring(start);//// System.out.println(pathModel);// // start=pathModel.indexOf("\\");// if(start<=0)// start=pathModel.indexOf("/");// pathModel=pathModel.substring(start);//// System.out.println(pathModel);// // pathModel="c:/model"+pathModel;//// System.out.println(pathModel);// // intend=pathModel.lastIndexOf("\\");// if(end<=0)// end=pathModel.lastIndexOf("/");//// System.out.println(end);// modelname=pathModel.substring(end+1);// pathModel=pathModel.substring(0,end);// // // System.out.println(modelname);//// System.out.println(pathModel);// // MyHashMapTermVectorStoragemyStorage=(MyHashMapTermVectorStorage)tvs; intsize=myStorage.getStorage().size(); SetkeySet=myStorage.getStorage().keySet(); Iteratorit=keySet.iterator(); Stringclasspath=null; if(starinPath==null){ classpath=MODELPATH; }else{ classpath=starinPath; } Filefile_txt=newFile(classpath+"/"+MODELNAME); FileWriterfw=null; try{ fw=newFileWriter(file_txt); }catch(IOExceptione1){ //TODOAuto-generatedcatchblock e1.printStackTrace(); } while(it.hasNext()){ Stringmodelclass=(String)it.next(); Filefile=newFile(classpath); if(!file.isDirectory()){ System.out.println(file.mkdirs()); } if(!file_txt.isFile()){ try{ if(file_txt.createNewFile()){ BufferedWriterwb=newBufferedWriter(fw); wb.newLine(); wb.write(modelclass+"="+myStorage.toString()); wb.close(); } }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } else{ try{// fw=newFileWriter(file_txt); BufferedWriterwb=newBufferedWriter(fw); wb.append(modelclass+"="+myStorage.getTermVector(modelclass).toString()); wb.newLine(); wb.flush(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } } } publicTermVectorStoragegetModel(Stringmodelpath){ TermVectortv=null; if(modelpath==null){ modelpath=MODELPATH+"/"+MODELNAME; } Filefile=newFile(modelpath); FileReaderfread; try{ fread=newFileReader(file); BufferedReaderbr=newBufferedReader(fread,512); Stringline=null; Stringkeyword=null; Stringvalue=null; do{ line=br.readLine(); if(line==null) break; intstart=line.indexOf("=");// System.out.println("start:"+start); if(start>0) { keyword=line.substring(0,start); line=line.substring(start+1); List<String>list_String=newArrayList<String>(); List<Integer>list_Integer=newArrayList<Integer>(); while(line.indexOf("[")>0){ Stringkey=line.substring(line.indexOf("[")+1,line.indexOf(",")); key=key.trim(); line=line.substring(line.indexOf(",")+1); Stringvalue1=line.substring(0,line.indexOf("]")); value1=value1.trim(); Integervalue_int=newInteger(value1); list_String.add(key); list_Integer.add(value_int); } String[]array_str=newString[list_String.size()]; for(inti=0;i<list_String.size();i++){ array_str[i]=list_String.get(i); } int[]array_int=newint[list_Integer.size()]; for(inti=0;i<list_Integer.size();i++){ array_int[i]=list_Integer.get(i); } tv=newTermVector((String[])array_str,array_int); storage.addTermVector(keyword,tv); } }while(line!=null); }catch(FileNotFoundExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } // System.out.println(storage.getTermVector("電氣機(jī)械及器材制造業(yè)").toString()); returnstorage; } publicTermVectorStoragegetModel(){ returngetModel(null); } // privatevoidwriteFile(Stringpath,Stringmodelname,Stringkey,MapStoreMap){// // Filefile=newFile(path);// if(!file.isFile()){// System.out.println(file.mkdirs());// }// Filefile_txt=newFile(path+"/"+modelname);// if(!file_txt.isFile()){// try{// // if(file_txt.createNewFile()){// FileWriterfw=newFileWriter(file_txt);// BufferedWriterwb=newBufferedWriter(fw);// // // }// }catch(IOExceptione){// //TODOAuto-generatedcatchblock// e.printStackTrace();// }// // }// } /***@seenet.sf.classifier4J.ICategorisedClassifier#isMatch(java.lang.String,java.lang.String)*/publicbooleanisMatch(Stringcategory,Stringinput)throwsClassifierException{return(getMatchCutoff()<classify(category,input));}/***@seenet.sf.classifier4J.ITrainable#teachMatch(java.lang.String,java.lang.String)*/publicvoidteachMatch(Stringcategory,Stringinput)thro
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 特高壓線路施工方案
- 華南理工大學(xué)《面向?qū)ο蟪绦蛟O(shè)計(jì)》2021-2022學(xué)年期末試卷
- 華南理工大學(xué)《金屬材料科學(xué)與工程導(dǎo)論》2021-2022學(xué)年第一學(xué)期期末試卷
- 華南理工大學(xué)《建筑結(jié)構(gòu)概論》2022-2023學(xué)年第一學(xué)期期末試卷
- 華南理工大學(xué)《機(jī)械設(shè)計(jì)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 公共服務(wù)輿情應(yīng)急預(yù)案
- 2024至2030年中國線路板端子線數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024至2030年中國氨基環(huán)氧基改性硅油微乳液行業(yè)投資前景及策略咨詢研究報(bào)告
- 焦?fàn)t砌筑施工方案
- 2024至2030年波紋管成型機(jī)項(xiàng)目投資價(jià)值分析報(bào)告
- 超聲引導(dǎo)下腰方肌阻滯PPT
- 綠色食品、有機(jī)食品和無公害食品課件
- 擴(kuò)張型心肌病診斷和治療指南
- 電子小報(bào)社團(tuán)教案
- 八大特殊作業(yè)安全試題題庫
- 標(biāo)簽打印管理辦法及流程
- 五四制青島版2022-2023五年級(jí)科學(xué)上冊(cè)第五單元第19課《生物的棲息地》課件(定稿)
- 四年級(jí)上冊(cè)美術(shù)教案15《有創(chuàng)意的書》人教版
- 否定詞否定句課件(PPT 38頁)
- 水力學(xué)第12章 相似理論-2015
- 第7章國際資本流動(dòng)與國際金融危機(jī)
評(píng)論
0/150
提交評(píng)論