版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、. .自然語言處理在現(xiàn)實(shí)生活中運(yùn)用1 需求分析與描述: 首先談下這款軟件的來源和用途吧,本科至今沒有掛科記錄,很不幸第一次"英語學(xué)位英語考試<GET>"掛科了。于是,筆者開場瘋狂的做題和背單詞,對于GET真題很多單詞不認(rèn)識,抱著有道詞典,逐字翻譯耗時耗力。再說歷來10余年試題考試單詞范圍是一定的,把出現(xiàn)頻率高的單詞,所謂核心單詞掌握了不就事倍功半了?問題來了,不像四六級詞匯或者考研詞匯市場有專門賣的。當(dāng)時就開場設(shè)想,如果我收集10余年真題,然后去除所有非單詞構(gòu)造真題算是構(gòu)造化數(shù)據(jù),有一定規(guī)那么,比較容易處理。此過程其實(shí)就是數(shù)據(jù)清洗過程最后把所有單詞集中匯總,再去
2、除如:a/an/of/on/frist等停用詞中文文本處理也需要對停用詞處理,諸如:的,地,是等。處理好的單詞進(jìn)展去重和詞頻統(tǒng)計,最后再利用網(wǎng)絡(luò)工具對英語翻譯。然后根據(jù)詞頻排序。 基于以上思路,結(jié)合筆者前不久對數(shù)據(jù)挖掘中分類實(shí)現(xiàn)的經(jīng)歷和暑假學(xué)習(xí)的統(tǒng)計學(xué)知識最終上周末10.3111.1花了2天時間搞定,這些自然語言處理的根底方法在分類,聚類等數(shù)據(jù)挖掘和本體領(lǐng)域構(gòu)建中都有使用。最后我將其核心方法進(jìn)展梳理,下面咱們具體展開。2 自然語言處理結(jié)果預(yù)覽:前面提到本算法是對自然語言中常規(guī)英文試卷的處理,那么開場收集原始數(shù)據(jù)吧。1 歷年20022021年GET考試真題,文檔格式不一,包括txt/pdf/wo
3、rd等如以下圖:2 對所有格式不一的文檔進(jìn)展統(tǒng)計處理成txt文檔,格式化去除漢字/標(biāo)點(diǎn)/空格等非英文單詞和去除停用詞去除891個停用詞處理后結(jié)果如下:【17套試卷原始單詞含重復(fù)82158個,數(shù)據(jù)清洗處理后32021個】3 對清洗后的單詞進(jìn)展去重和詞頻統(tǒng)計:【去重后7895個單詞尺寸】4 顯示這10余年考試的詞匯量還是很大的,加上停用詞,考察詞匯量在9000左右,那么常考的應(yīng)該沒那么多。試想下17套試卷中,去除停用詞后出現(xiàn)頻率大于5的和小于25次【1674個單詞】的數(shù)據(jù)應(yīng)該是合理的,那么我就指定閾值提取。5 最后一步,中英文翻譯目前通過google工具快速查詢,然后合并。最終效果如下:處理的最終
4、txt結(jié)果和自己word整理的結(jié)果3 算法思想和解決方案:算法思想:1歷年20022021年GET考試真題,文檔格式不一。網(wǎng)上收集2 對所有格式不一的文檔進(jìn)展統(tǒng)計處理成txt文檔,格式化去除漢字/標(biāo)點(diǎn)/空格等非英文單詞和去除停用詞去除891個停用詞處理。利用正那么表達(dá)式去除非英文單詞的字符,通過規(guī)那么的空格別離,停用詞表網(wǎng)上一大堆,通過將其與單詞比對,不在停用詞表的追加存儲3 對清洗后的單詞進(jìn)展去重和詞頻統(tǒng)計通過Map統(tǒng)計詞頻,實(shí)體存儲:單詞-詞頻。數(shù)組也可以,只是面對特別大的數(shù)據(jù),數(shù)組存在越界問題。排序:根據(jù)詞頻或者字母4 提取核心詞匯,大于5的和小于25次的數(shù)據(jù),可以自己制定閾值。遍歷li
5、st<實(shí)體>列表時候,通過獲取實(shí)體的詞頻屬性控制選取詞匯表尺寸。5 最后一步,中英文翻譯。將批量單詞通過google翻譯,可以獲取常用意思,對于發(fā)音,詞義,詞性等沒有處理。這里也是可以改進(jìn)地方,其實(shí)也很簡單,后面詳解,最后自己講結(jié)果在word里面排版。4 Java語言對需*現(xiàn)詳解: 1 文件保存路徑定義復(fù)制代碼 public static final String stopWordTable ="./getFile/partStopWord.txt" /停用詞詞表文件地址 public static final String srcfilepath="
6、./srcFile" /待處理的源文件地址 public static final String stopfilepath="./getFile/temp.txt" /待處理的源文件地址 public static final String tarfilepath="./getFile/getcoreword.txt" /源文件和目標(biāo)文件地址復(fù)制代碼2 對原始文件數(shù)據(jù)清理以及停用詞處理復(fù)制代碼 /對文本文件預(yù)處理 public static void dataCleanFile(String srcfilepath,String stopfil
7、epath) String reg = "a-zA-Z" /去除噪音,獲取英文單詞開場的內(nèi)容 String sb=montMethod.readStrFiles(srcfilepath, " ").toLowerCase().replaceAll(reg, " ").replaceAll(" +"," ").trim(); /接收清洗后的數(shù)據(jù) String srcWordsList =sb.split(" "); /按照規(guī)那么,將單詞放在數(shù)組里面 System.out.pri
8、ntln("2002至2021年GET試卷原始單詞數(shù):【"+srcWordsList.length+"】個。"); System.out.println("正在對如:on,of,a等停用詞處理,大約需要30秒,請等候."); StringBuffer stopWordSb=new StringBuffer(); /存放去除停用詞后的 for(int i=0;i<srcWordsList.length;i+) if(IsStopWord(srcWordsListi)=false) stopWordSb.append(srcWord
9、sListi.toString().trim()+"n"); /不是停用詞,那么追加字符串 String stopWordsList =stopWordSb.toString().split("n"); System.out.println("對單詞集停用詞處理結(jié)束,核心單詞共計:【"+stopWordsList.length+"】個。已經(jīng)保存至./getFile/temp.txt下,請查閱!"); montMethod.writeStrFile(stopWordSb.toString(), stopfilepat
10、h, "n"); /將預(yù)處理后并標(biāo)注的數(shù)據(jù),指定位置保存 復(fù)制代碼3 處理后的數(shù)據(jù)進(jìn)展核心單詞匯總和詞頻統(tǒng)計復(fù)制代碼 /統(tǒng)計詞頻 public static void countWordNums(String stopfilepath,String tarfilepath) /統(tǒng)計GET試卷核心單詞以及詞頻 Map<String,Integer> shlMap=new HashMap<String,Integer>(); /去重計數(shù) /整個詞彙表 StringBuffer WordsTable=new StringBuffer(); List<
11、Word> wordsList = new ArrayList<Word>(); /統(tǒng)計詞頻排序 StringBuffer tarWordSb=new StringBuffer(); /存放去除停用詞后的,詞頻指定的單詞; List<Word> wordList = new ArrayList<Word>(); /統(tǒng)計詞頻排序 int sum=0;/計算非重複單詞個數(shù)。 int setnum=10; /設(shè)定保存詞頻條件 shlMap=montMethod.countWords(shlMap, stopfilepath.trim(), " &q
12、uot;); int count=0; for (Map.Entry<String, Integer> entry : shlMap.entrySet() if(entry.getValue()>0) wordsList.add(new Word(entry.getKey(), entry.getValue();/統(tǒng)計頻率詞彙表 count+; if(entry.getValue()>setnum) wordList.add(new Word(entry.getKey(), entry.getValue();/統(tǒng)計指定頻率詞彙表 sum+; /詞彙表大小 StringB
13、uffer EglChindSb=new StringBuffer(); /存放中英對照詞表; String freWords= montMethod.wordsFre(wordsList,WordsTable).split("n"); /根據(jù)詞頻結(jié)果排序,並進(jìn)行保存 String Tranlation=montMethod.readStrFile("./getFile/Translation.txt", "n").split("n");/中文翻譯 for(int i=0;i<Tranlation.lengt
14、h&&i<freWords.length;i+) EglChindSb.append(freWordsi+"t"+Tranlationi+"n"); montMethod.writeStrFile(EglChindSb.toString(),"./getFile/worstable.txt","n"); System.out.println("整個詞彙表為:【"+count+"】個。已經(jīng)保存至./getFile/wordstable.txt下,請查閱!"
15、); /根據(jù)詞頻結(jié)果排序,並進(jìn)行保存 String fWords= montMethod.wordsFre(wordList,tarWordSb); montMethod.writeStrFile(fWords.toString(), tarfilepath,"n"); System.out.println("篩選出現(xiàn)"+setnum+"次以上的單詞:【"+sum+"】個。已經(jīng)保存至./getFile/getcoreword.txt下,請查閱!"); /根據(jù)字母有序打印 /montMethod.init(shlMa
16、p); 復(fù)制代碼4 運(yùn)行結(jié)果分析1 程序處理核心代碼,其中第一個類存放公共方法小面小結(jié)有,第二個類主函數(shù),如上代碼。第三個方法實(shí)體類統(tǒng)計詞頻,這樣設(shè)計,應(yīng)對大數(shù)據(jù),數(shù)據(jù)小數(shù)組即可。2 處理后得到的結(jié)果,核心單詞,數(shù)據(jù)清洗結(jié)果,停用詞,翻譯,最終結(jié)果等。3 原始試卷共計82158個單詞4 數(shù)據(jù)清洗和停用詞處理后剩下32021個單詞5 去重后總共7895個單詞的考察范圍6 提取10次以上核心單詞623個,即便5次以上不過1500個單詞7 性能方面運(yùn)行25秒是穩(wěn)定的,這個主要是對7895個單詞排序問題耗時比較多5 自然語言常用方法小結(jié)JAVA實(shí)現(xiàn),C#類似:1 實(shí)體的根本使用 View Code2
17、批量讀取目錄下的文件復(fù)制代碼 /* * 對單個文件的讀取,并將整個以字符串形式返回 * param srcfilepath 讀取文件的地址 * param separ 逐行讀取的分隔符號,如:" ", "t", ","等 * return sb 字符串 */ public static String readStrFiles(String fileDirPath,String separ) StringBuffer sb=new StringBuffer(); BufferedReader srcFileBr=null; File d
18、ir=new File(fileDirPath); if(dir.exists()&&dir.isDirectory()File files=dir.listFiles(); /獲取所有文件 try for(File file:files)/遍歷訓(xùn)練集文件 srcFileBr = new BufferedReader(new InputStreamReader(new FileInputStream(new File(file.toString(),"UTF-8");/讀取原文件 String line = null; while(line=srcFileB
19、r.readLine()!=null) if(line.length()>0) sb.append(line.trim()+separ); srcFileBr.close(); catch(Exception ex) System.out.println(ex.getMessage(); else System.out.println("你選擇的不是目錄文件"); return sb.toString().trim(); 復(fù)制代碼3 讀取單個文件復(fù)制代碼 /* * 對單個文件的讀取,并將整個以字符串形式返回 * param srcfilepath 讀取文件的地址 *
20、param separ 逐行讀取的分隔符號,如:" ", "t", ","等 * return sb 字符串 */ public static String readStrFile(String srcfilepath,String separ) StringBuffer sb=new StringBuffer(); try BufferedReader srcFileBr = new BufferedReader(new InputStreamReader(new FileInputStream(new File(srcfilepa
21、th),"UTF-8");/讀取原文件 String line = null; while(line=srcFileBr.readLine()!=null) if(line.length()>0) sb.append(line.trim()+separ); srcFileBr.close(); catch(Exception ex) System.out.println(ex.getMessage(); return sb.toString().trim(); 復(fù)制代碼4 文件預(yù)處理,并以字符串結(jié)果返回復(fù)制代碼 /* * 對文件的讀取,并將整個以字符串形式返回 * p
22、aram shlMap 傳入的map集合 * param tarfilepath 讀取文件的地址 * param separ 逐行讀取的分隔符號,如:" ", "t", ","等 * return sb 字符串 */ public static Map<String,Integer> countWords(Map<String,Integer> tarMap,String tarfilepath,String separ) StringBuffer sb=new StringBuffer(); try /讀取原
23、文件 BufferedReader srcFileBr = new BufferedReader(new InputStreamReader(new FileInputStream(new File(tarfilepath),"UTF-8"); /對讀入的文本進(jìn)展預(yù)處理 String paragraph = null; while(paragraph=srcFileBr.readLine()!=null&¶graph.length()>0) String words = paragraph.split(separ); /遍歷所有單詞 for(S
24、tring word:words) if(tarMap.containsKey(word) tarMap.put(word, tarMap.get(word)+1); else tarMap.put(word, 1); srcFileBr.close(); catch(Exception ex) System.out.println(ex.getMessage(); return tarMap; 復(fù)制代碼5 指定保存文件復(fù)制代碼 /* * 將字符串寫到指定文件中 * param str 待寫入的字符串 * param tarfilepath 目標(biāo)文件路徑 * param separ 逐行讀取的
25、分隔符號,如:" ", "t", ","等 */ public static void writeStrFile(String str,String tarfilepath,String separ) try OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(new File(tarfilepath), "UTF-8");/ 構(gòu)建OutputStreamWriter對象,參數(shù)可以指定編碼,默認(rèn)為操作系統(tǒng)默認(rèn)編碼,windo
26、ws上是gbk writer.append(str+separ);/ 刷新緩存沖,寫入到文件,如果下面已經(jīng)沒有寫入的內(nèi)容了,直接close也會寫入 writer.close();/關(guān)閉寫入流,同時會把緩沖區(qū)內(nèi)容寫入文件,所以上面的注釋掉 catch(Exception ex) System.out.println(ex.getMessage(); 復(fù)制代碼6 詞頻排序中英文通用復(fù)制代碼 /* * 根據(jù)單詞詞頻排序 * param wordList 存放單詞和詞頻 * param tarWordSb 存放排序后的結(jié)果 * return */ public static String wordsF
27、re(List<Word> wordList,StringBuffer tarWordSb) Collections.sort(wordList, new parator<Word>() Override public int pare(Word word1, Word word2) if(word1.getFrequence()>word2.getFrequence() return -1; else if(word1.getFrequence()<word2.getFrequence() return 1; else return 0; ); for (
28、Word word : wordList) tarWordSb.append(word.print().append("n"); return tarWordSb.toString(); 復(fù)制代碼7 根據(jù)字符有序排列復(fù)制代碼 /* * 根據(jù)字符有序排列 * param shlMap */ public static void init(Map<String,Integer> shlMap) List<Map.Entry<String, Integer>> mHashMapEntryList=new ArrayList<Map.Ent
29、ry<String,Integer>>(shlMap.entrySet(); System.out.println("-> 排序前的順序"); for (int i = 0; i < mHashMapEntryList.size(); i+) System.out.println(mHashMapEntryList.get(i); Collections.sort(mHashMapEntryList, new parator<Map.Entry<String,Integer>>() Override publicintpare(Map.Entry<String,Integer>firstMapEntry, Map.Entry<Str
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鬧鐘課程設(shè)計VHDL實(shí)驗(yàn)報告
- 2025年中國鉸制孔用螺栓行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025年中國進(jìn)風(fēng)箱過渡風(fēng)管行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 網(wǎng)絡(luò)工程課程設(shè)計要求
- 課程設(shè)計和開發(fā) 版權(quán)課
- 2020-2025年中國電機(jī)制造行業(yè)市場調(diào)研分析及投資前景預(yù)測報告
- 2025年機(jī)電鑄件項目可行性研究報告
- 閱讀與記憶力課程設(shè)計
- 2024-2030年中國防潮包裝行業(yè)市場全景分析及投資前景展望報告
- 重鈣微粉課程設(shè)計
- 公司SWOT分析表模板
- 小學(xué)預(yù)防流行性感冒應(yīng)急預(yù)案
- 肺癌術(shù)后出血的觀察及護(hù)理
- 聲紋識別簡介
- 生物醫(yī)藥大數(shù)據(jù)分析平臺建設(shè)-第1篇
- 基于Android的天氣預(yù)報系統(tǒng)的設(shè)計與實(shí)現(xiàn)
- 沖鋒舟駕駛培訓(xùn)課件
- 美術(shù)家協(xié)會會員申請表
- 聚合收款服務(wù)流程
- 中石化浙江石油分公司中石化溫州靈昆油庫及配套工程項目環(huán)境影響報告書
- 搞笑朗誦我愛上班臺詞
評論
0/150
提交評論