




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
自然語言處理在現(xiàn)實生活中運用1需求分析與描述:首先談下這款軟件的來源和用途吧,本科至今沒有掛科記錄,很不幸第一次《英語學位英語考試<GET>》掛科了。于是,筆者開始瘋狂的做題和背單詞,對于GET真題很多單詞不認識,抱著有道詞典,逐字翻譯耗時耗力。再說歷來10余年試題考試單詞范圍是一定的,把出現(xiàn)頻率高的單詞,所謂核心單詞掌握了不就事倍功半了?問題來了,不像四六級詞匯或者考研詞匯市場有專門賣的。當時就開始設想,如果我收集10余年真題,然后去除所有非單詞結構(真題算是結構化數(shù)據(jù),有一定規(guī)則,比較容易處理。此過程其實就是數(shù)據(jù)清洗過程)最后把所有單詞集中匯總,再去除如:a/an/of/on/frist等停用詞(中文文本處理也需要對停用詞處理,諸如:的,地,是等)。處理好的單詞進行去重和詞頻統(tǒng)計,最后再利用網(wǎng)絡工具對英語翻譯。然后根據(jù)詞頻排序?;谝陨纤悸罚Y合筆者前不久對數(shù)據(jù)挖掘中分類實現(xiàn)的經(jīng)驗和暑假學習的統(tǒng)計學知識最終上周末(10.31—11.1)花了2天時間搞定,這些自然語言處理的基礎方法在分類,聚類等數(shù)據(jù)挖掘和本體領域構建中都有使用。最后我將其核心方法進行梳理,下面咱們具體展開。2自然語言處理結果預覽:前面提到本算法是對自然語言中常規(guī)英文試卷的處理,那么開始收集原始數(shù)據(jù)吧。1歷年(2002—2010年)GET考試真題,文檔格式不一,包括txt/pdf/word等如下圖:2對所有格式不一的文檔進行統(tǒng)計處理成txt文檔,格式化(去除漢字/標點/空格等非英文單詞)和去除停用詞(去除891個停用詞)處理后結果如下:【17套試卷原始單詞(含重復)82158個,數(shù)據(jù)清洗處理后32011個】3對清洗后的單詞進行去重和詞頻統(tǒng)計:【去重后7895個單詞尺寸】4顯示這10余年考試的詞匯量還是很人的,加上停用詞,考查詞匯量在9000左右,那么??嫉膽摏]那么多。試想下17套試卷中,去除停用詞后出現(xiàn)頻率人于5的和小于25次【1674個單詞】的數(shù)據(jù)應該是合理的,那么我就指定閾值提取。5最后一步,中英文翻譯(目前通過google工具快速查詢,然后合并)。最終效果如卞:(處理的最終txt結果和自己word整理的結果)3算法思想和解決方案:算法思想:1歷年(2002—2010年)GET考試真題,文檔格式不一。網(wǎng)上收集2對所有格式不一的文檔進行統(tǒng)計處理成txt文檔,格式化(去除漢字/標點/空格等非英文單詞)和去除停用詞(去除891個停用詞)處理。利用正則表達式去除非英文單詞的字符,通過規(guī)則的空格分離,停用詞表網(wǎng)上一大堆,通過將其與單詞比對,不在停用詞表的追加存儲3對清洗后的單詞進行去重和詞頻統(tǒng)計通過Map統(tǒng)計詞頻,實體存儲:單詞-詞頻。(數(shù)組也可以,只是面對特別大的數(shù)據(jù),數(shù)組存在越界問題)。排序:根據(jù)詞頻或者字母4提取核心詞匯,大于5的和小于25次的數(shù)據(jù),可以自己制定閾值。遍歷list<實體〉列表時候,通過獲取實體的詞頻屬性控制選取詞匯表尺寸。5最后一步,中英文翻譯。將批量單詞通過google翻譯,可以獲取常用意思,對于發(fā)音,詞義,詞性等沒有處理。這里也是可以改進地方,其實也很簡單,后面詳解,最后自己講結果在word里面排版。4Java語言對需求實現(xiàn)詳解:1文件保存路徑定義復制代碼publicstaticfinalStringstopWordTable=,,./getFile/partStopWord.txt";〃停用詞詞表文件地址publicstaticfinalStringsrcfilepath=,,./srcFileH;〃待處理的源文件地址publicstaticfinalStringstopfilepath=,,./getFile/temp.txtH;〃待處理的源文件地址publicstaticfinalStringtarfilepath="?/getFile/getcoreword?txt”;〃源文件和目標文件地址復制代碼2對原始文件數(shù)據(jù)清理以及停用詞處理復制代碼〃對文本文件預處理publicstaticvoiddataCleanFilefStringsrcfilepath,Stringstopfilepath){
Stringreg=H[Aa-zA-Z]"; 〃去除噪音,獲取英文單詞開始的內容Stringsb=CommontMethod.readStrFiles(srcfilepath,11"J.toLowerCaseO.replaceAlKreg,““).replaceAII(“”).trim(); 〃接收清洗后的數(shù)據(jù)String[]srcWordsList=sb.split(""); 〃按照規(guī)則,將單詞放在數(shù)組里面System.out.println(H2002至2010年GET試卷原始單詞數(shù):[,,+srcWordsList.length+"]個?!?;System.out.println("正在對如:on,of,a等停用詞處理,大約需要30秒,請等候StringBufferstopWordSb=newStringBuffer(); 〃存放去除停用詞后的for(inti=0;i<srcWordsList.length;i++){if(lsStopWord(srcWordsList[i])==false)stopWordSb?append(srcWordsList[i]?toString()?trim()+"\n");//不是停用詞,則追加字符串}String[]stopWordsList=stopWordSb.toString().split(,,\n,');System.out.println("對單詞集停用詞處理結束,核心單詞共計:["+stopWordsList.length+"]個。已經(jīng)保存至./getFile/temp.txtF,請査閱!");CommontMethod.writeStrFilefstopWordSb.toStringO,stopfilepath,,,\nH);〃將預處理后并標注的數(shù)據(jù),指定位置保存}復制代碼3處理后的數(shù)據(jù)進行核心單詞匯總和詞頻統(tǒng)計復制代碼〃統(tǒng)計詞頻publicstaticvoidcountWordNums(Stringstopfilepath,Stringtarfilepath){〃統(tǒng)計GET試卷核心單詞以及詞頻Map<String,Integer>shlMap=newHashMap<StringJnteger>();//去重計數(shù)〃整個詞彙表〃統(tǒng)計詞頻排序〃存放去除停用詞后〃統(tǒng)計詞頻排序〃統(tǒng)計詞頻排序〃存放去除停用詞后〃統(tǒng)計詞頻排序StringBuffertarWordSb=newStringBuffer();的,詞頻指定的單詞;List<Word>wordList=newArrayList<Word>();intsum=0;〃計算非重複單詞個數(shù)。intsetnum=10;〃設定保存詞頻條件shlMap=CommontMethod.countWords(shlMap/stopfilepath.trim(),M");intcount=0;for(Map.Entry<String,Integer〉entry:shlMap.entrySet()){if(entry.getValue()>0){wordsList.add(newWord(entry.getKey()zentry.getValue()));//統(tǒng)計頻率詞彙表count++;if(entry.getValue()>setnum){wordUst.add(newWord(entry.getKey(),entry.getValue()));//統(tǒng)計指定頻率詞彙表sum++;}}}〃詞彙表大小StringBufferEglChindSb=newStringBuffer(); //存放中英對照詞表;String[]freWords=CommontMethod.wordsFre(wordsList/WordsTable).split("\n");//根據(jù)詞頻結果排序,並進行保存Stringf] Tranlation=CommontMethod.readStrFile("./getFile/Translation.txt",”\n”).split(”\n“);〃中文翻譯for(inti=0;i<Tranlation.length&&i<freWords.length;i++){EglChindSb.append(freWords[i]+"\t"+Tranlation[i]+"\n");}CommontMethod.writeStrFile(EglChindSb.toString()/"./getFile/worstable.txt,,/,,\n");System.out.println("整個詞彙表為:【"+count+"】個。已經(jīng)保存至./getFile/wordstable.txt下,請查閱!”);〃根據(jù)詞頻結果排序,並進行保存StringfWords=CommontMethod.wordsFre(wordList,tarWordSb);CommontMethod.writeStrFile(fWords.toString(),tarfilepath,"\n");System.out.println("篩選出現(xiàn)"+setnum+"次以上的單詞:【"+sum+"]個。已經(jīng)保存至./getFiIe/getcoreword.txtF,請查閱!”);〃根據(jù)字母有序打印//CommontMethod.init(shlMap);}復制代碼4運行結果分析1程序處理核心代碼,其中第一個類存放公共方法(小面小結有),第二個類主函數(shù),如上代碼。第三個方法實體類統(tǒng)計詞頻,這樣設計,應對人數(shù)據(jù),數(shù)據(jù)小數(shù)組即可。2處理后得到的結果,核心單詞,數(shù)據(jù)清洗結果,停用詞,翻譯,最終結果等。3原始試卷共計82158個單詞4數(shù)據(jù)清洗和停用詞處理后剩F32011個單詞5去重后總共7895個單詞的考察范I韋16提取10次以上核心單詞623個,即便5次以上不過1500個單詞7性能方面運行25秒是穩(wěn)定的,這個主要是對7895個單詞排序問題耗時比較多5自然語言常用方法小結(JAVA實現(xiàn),C#類似人1實體的基本使用ViewCode2批量讀取目錄下的文件復制代碼/*?*對單個文件的讀取,并將整個以字符串形式返回@paramsrcfilepath讀取文件的地址@paramsepar 逐行讀取的分隔符號,如:"“,”\t“,等(?returnsb字符串*/publicstaticStringreadStrFiles(StringfileDirPath,Stringsepar){StringBuffersb二newStringBuffer();BufferedReadersrcFileBr二null;Filedir=newFile(fileDirPath);if(dir.exists()&&dir.isDirectory()){File[]files=dir.listFiles();//獲取所有文件try{for(Filefile:files){//遍歷訓練集文件srcFileBr=newBufferedReaderfnewInputStreamReader(newFilelnputStream(newFile(file?toString()))/UTF-8"));〃讀取原文件Stringline=null;while((line=srcFileBr.readLine())!=null){if(line.length()>0)sb.append(line?trim()+separ);}}srcFileBr.close();}catch(Exceptionex){System.out.println(ex.get!Vlessage());elseSystem.out.printin("你選擇的不是目錄文件”);returnsb.toString().trim();}復制代碼3讀取單個文件復制代碼*對單個文件的讀取,并將整個以字符串形式返回@paramsrcfilepath讀取文件的地址@paramsepar 逐行讀取的分隔符號,如:"“,”\t“,等(?returnsb字符串*/publicstaticStringreadStrFile(Stringsrcfilepath,Stringsepar){StringBuffersb二newStringBuffer();try{BufferedReadersrcFileBr=newBufferedReader(newInputStreamReader(newFilelnputStream(newFile(srcfilepath))「UTF?8"));〃讀取原文件Stringline=null;while((line=srcFileBr.readLine())!=null){if(line.length()>0)sb.append(line?trim()+separ);}srcFileBr.close();}catch(Exceptionex){System.out.println(ex?getMessage());}returnsb.toString().trim();}復制代碼4文件預處理,并以字符串結果返回復制代碼*對文件的讀取,并將整個以字符串形式返回@paramshlMap傳入的map集合@paramtarfilepath讀取文件的地址@paramsepar 逐行讀取的分隔符號,如:"“,”\t“,等(?returnsb字符串*/publicstatic Map<String,lnteger> countWords(Map<String」nteger> tarMap,Stringtarfilepath,Stringsepar){StringBuffersb二newStringBuffer();try{〃讀取原文件BufferedReadersrcFileBr=newBufferedReader(newlnputStreamReader(newFilelnputStream(newFile(tarfilepath))/,,UTF-8H));〃對讀入的文本進行預處理Stringparagraph=null;while((paragraph=srcFileBr.readLine())!二null&¶graph」ength()>0){String[]words=paragraph.split(separ);〃遍歷所有單詞for(Stringword:words){if(tarMap.containsKey(word))tarMap.put(word,tarMap.get(word)+l);elsetarMap.put(word,1);}}srcFileBr.close();}catch(Exceptionex){System.out.println(ex.getMessage());}returntarMap;}復制代碼5指定保存文件復制代碼/*?*將字符串寫到指定文件中@paramstr@paramtarfilepath@paramsepar*/待寫入的字符串目標文件路徑逐行讀取的分隔符號,如:"”,”等publicstaticvoidwriteStrFile(Stringstr,Stringtarfilepath,Stringsepar){try{OutputStreamWriterwriter=new OutputStreamWriter(newFileOutputStream(newFile(tarfilepath))z,,UTF-8H);//構建OutputStreamWriter對象,參數(shù)可以指定編碼,默認為操作系統(tǒng)默認編碼‘windows上是gbkwriter.append(str+separ);//刷新緩存沖,寫入到文件,如果下面已經(jīng)沒有寫入的內容了,直接close也會寫入writer.closeO;//關閉寫入流嗣時會把緩沖區(qū)內容寫入文件,所以上面的注釋掉catch(Exceptionex){System.out.println(ex.geth/lessage());}}復制代碼6詞頻排序(中英文通用)復制代碼*根據(jù)單詞詞頻排序@paramwordList存放單詞和詞頻@paramtarWordSb存放排序后的結果@return*/publicstaticStringwordsFre(List<Word>wordList,StringBuffertarWordSb){Collections.sort(wordList,newComparator<Word>(){(?Overridepublicintcompare(Wordwordl,Wordword2){if(wordl.getFrequence()>word2?getFrequence())return-1;elseif(wordl.getFrequence()<word2.getFrequence())return1;elsereturn0;}});for(Wordword:wordList){tarWordSb.append(word.print()).append(H\nJ;}returntarWordSb.toString();}復制代碼7根據(jù)字符有序排列復制代碼*根據(jù)字符有序排列@paramshlMap*/publicstaticvoidinit(Map<String」nteger>shlMap){List<Map.EntryvString, Integer? mHashMapEntryList二newArrayList<Map.Entry<StringJnteger?(shlMap.entrySet());System.out.println(H——>排序前的順序");for(inti=0;i<mHashMapEntryList.size();i++){System.out.println(mHashMapEntryList.get(i));}Collections.sort(mHashMapEntryList,newComparator<Map.EntryvString」nteger?(){(?Overridepublicintcompare(Map.Entry<String」nteger>firstMapEntr%Map.Entry<String,lnteger>secondMapEntry){returnfirstMapEntry.getKey().c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025上海市安全員考試題庫及答案
- 2025-2030年中國金鹵燈行業(yè)十三五規(guī)劃與發(fā)展前景分析報告
- 2025-2030年中國辣椒紅色素市場運營狀況及發(fā)展前景預測報告
- 2025-2030年中國軟包裝復合膜行業(yè)運行動態(tài)及發(fā)展前景預測報告
- 2025-2030年中國超高頻RFID市場發(fā)展現(xiàn)狀規(guī)劃研究報告
- 2025-2030年中國船用液壓舵機行業(yè)運行狀況及發(fā)展趨勢分析報告
- 2025-2030年中國聚氯乙烯用阻燃劑行業(yè)運行態(tài)勢及投資戰(zhàn)略研究報告
- 2025-2030年中國納米二氧化鈦市場運行現(xiàn)狀及投資發(fā)展前景預測報告
- 2025-2030年中國男士化妝品市場規(guī)模分析及發(fā)展建議研究報告
- 《工程勘察設計收費標準》(2002年修訂本)
- 《電腦的組成》課件
- 《債權法教學》課件
- 太傻天書(完整版)
- SZSD01 0012-2024智能交通大數(shù)據(jù)底座數(shù)據(jù)采集規(guī)范
- 醫(yī)療服務價格政策培訓
- 經(jīng)典廣告歌曲大全(109首)
- 2024-2025學年北京市豐臺某中學九年級(上)開學數(shù)學試卷(含答案)
- 環(huán)保儀器培訓
- 餐飲服務電子教案 學習任務4 擺臺技能(2)-中餐宴會擺臺
- 2024湖南省水利廳直屬事業(yè)單位招聘擬聘用人員歷年高頻難、易錯點500題模擬試題附帶答案詳解
評論
0/150
提交評論