版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、. .自然語言處理在現(xiàn)實(shí)生活中運(yùn)用1 需求分析與描述: 首先談下這款軟件的來源和用途吧,本科至今沒有掛科記錄,很不幸第一次"英語學(xué)位英語考試<GET>"掛科了。于是,筆者開場(chǎng)瘋狂的做題和背單詞,對(duì)于GET真題很多單詞不認(rèn)識(shí),抱著有道詞典,逐字翻譯耗時(shí)耗力。再說歷來10余年試題考試單詞范圍是一定的,把出現(xiàn)頻率高的單詞,所謂核心單詞掌握了不就事倍功半了?問題來了,不像四六級(jí)詞匯或者考研詞匯市場(chǎng)有專門賣的。當(dāng)時(shí)就開場(chǎng)設(shè)想,如果我收集10余年真題,然后去除所有非單詞構(gòu)造真題算是構(gòu)造化數(shù)據(jù),有一定規(guī)那么,比較容易處理。此過程其實(shí)就是數(shù)據(jù)清洗過程最后把所有單詞集中匯總,再去
2、除如:a/an/of/on/frist等停用詞中文文本處理也需要對(duì)停用詞處理,諸如:的,地,是等。處理好的單詞進(jìn)展去重和詞頻統(tǒng)計(jì),最后再利用網(wǎng)絡(luò)工具對(duì)英語翻譯。然后根據(jù)詞頻排序。 基于以上思路,結(jié)合筆者前不久對(duì)數(shù)據(jù)挖掘中分類實(shí)現(xiàn)的經(jīng)歷和暑假學(xué)習(xí)的統(tǒng)計(jì)學(xué)知識(shí)最終上周末10.3111.1花了2天時(shí)間搞定,這些自然語言處理的根底方法在分類,聚類等數(shù)據(jù)挖掘和本體領(lǐng)域構(gòu)建中都有使用。最后我將其核心方法進(jìn)展梳理,下面咱們具體展開。2 自然語言處理結(jié)果預(yù)覽:前面提到本算法是對(duì)自然語言中常規(guī)英文試卷的處理,那么開場(chǎng)收集原始數(shù)據(jù)吧。1 歷年20022021年GET考試真題,文檔格式不一,包括txt/pdf/wo
3、rd等如以下圖:2 對(duì)所有格式不一的文檔進(jìn)展統(tǒng)計(jì)處理成txt文檔,格式化去除漢字/標(biāo)點(diǎn)/空格等非英文單詞和去除停用詞去除891個(gè)停用詞處理后結(jié)果如下:【17套試卷原始單詞含重復(fù)82158個(gè),數(shù)據(jù)清洗處理后32021個(gè)】3 對(duì)清洗后的單詞進(jìn)展去重和詞頻統(tǒng)計(jì):【去重后7895個(gè)單詞尺寸】4 顯示這10余年考試的詞匯量還是很大的,加上停用詞,考察詞匯量在9000左右,那么??嫉膽?yīng)該沒那么多。試想下17套試卷中,去除停用詞后出現(xiàn)頻率大于5的和小于25次【1674個(gè)單詞】的數(shù)據(jù)應(yīng)該是合理的,那么我就指定閾值提取。5 最后一步,中英文翻譯目前通過google工具快速查詢,然后合并。最終效果如下:處理的最終
4、txt結(jié)果和自己word整理的結(jié)果3 算法思想和解決方案:算法思想:1歷年20022021年GET考試真題,文檔格式不一。網(wǎng)上收集2 對(duì)所有格式不一的文檔進(jìn)展統(tǒng)計(jì)處理成txt文檔,格式化去除漢字/標(biāo)點(diǎn)/空格等非英文單詞和去除停用詞去除891個(gè)停用詞處理。利用正那么表達(dá)式去除非英文單詞的字符,通過規(guī)那么的空格別離,停用詞表網(wǎng)上一大堆,通過將其與單詞比對(duì),不在停用詞表的追加存儲(chǔ)3 對(duì)清洗后的單詞進(jìn)展去重和詞頻統(tǒng)計(jì)通過Map統(tǒng)計(jì)詞頻,實(shí)體存儲(chǔ):?jiǎn)卧~-詞頻。數(shù)組也可以,只是面對(duì)特別大的數(shù)據(jù),數(shù)組存在越界問題。排序:根據(jù)詞頻或者字母4 提取核心詞匯,大于5的和小于25次的數(shù)據(jù),可以自己制定閾值。遍歷li
5、st<實(shí)體>列表時(shí)候,通過獲取實(shí)體的詞頻屬性控制選取詞匯表尺寸。5 最后一步,中英文翻譯。將批量單詞通過google翻譯,可以獲取常用意思,對(duì)于發(fā)音,詞義,詞性等沒有處理。這里也是可以改進(jìn)地方,其實(shí)也很簡(jiǎn)單,后面詳解,最后自己講結(jié)果在word里面排版。4 Java語言對(duì)需*現(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 對(duì)原始文件數(shù)據(jù)清理以及停用詞處理復(fù)制代碼 /對(duì)文本文件預(yù)處理 public static void dataCleanFile(String srcfilepath,String stopfil
7、epath) String reg = "a-zA-Z" /去除噪音,獲取英文單詞開場(chǎng)的內(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+"】個(gè)。"); System.out.println("正在對(duì)如:on,of,a等停用詞處理,大約需要30秒,請(qǐng)等候."); 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("對(duì)單詞集停用詞處理結(jié)束,核心單詞共計(jì):【"+stopWordsList.length+"】個(gè)。已經(jīng)保存至./getFile/temp.txt下,請(qǐng)查閱!"); montMethod.writeStrFile(stopWordSb.toString(), stopfilepat
10、h, "n"); /將預(yù)處理后并標(biāo)注的數(shù)據(jù),指定位置保存 復(fù)制代碼3 處理后的數(shù)據(jù)進(jìn)展核心單詞匯總和詞頻統(tǒng)計(jì)復(fù)制代碼 /統(tǒng)計(jì)詞頻 public static void countWordNums(String stopfilepath,String tarfilepath) /統(tǒng)計(jì)GET試卷核心單詞以及詞頻 Map<String,Integer> shlMap=new HashMap<String,Integer>(); /去重計(jì)數(shù) /整個(gè)詞彙表 StringBuffer WordsTable=new StringBuffer(); List<
11、Word> wordsList = new ArrayList<Word>(); /統(tǒng)計(jì)詞頻排序 StringBuffer tarWordSb=new StringBuffer(); /存放去除停用詞后的,詞頻指定的單詞; List<Word> wordList = new ArrayList<Word>(); /統(tǒng)計(jì)詞頻排序 int sum=0;/計(jì)算非重複單詞個(gè)數(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)計(jì)頻率詞彙表 count+; if(entry.getValue()>setnum) wordList.add(new Word(entry.getKey(), entry.getValue();/統(tǒng)計(jì)指定頻率詞彙表 sum+; /詞彙表大小 StringB
13、uffer EglChindSb=new StringBuffer(); /存放中英對(duì)照詞表; 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("整個(gè)詞彙表為:【"+count+"】個(gè)。已經(jīng)保存至./getFile/wordstable.txt下,請(qǐng)查閱!"
15、); /根據(jù)詞頻結(jié)果排序,並進(jìn)行保存 String fWords= montMethod.wordsFre(wordList,tarWordSb); montMethod.writeStrFile(fWords.toString(), tarfilepath,"n"); System.out.println("篩選出現(xiàn)"+setnum+"次以上的單詞:【"+sum+"】個(gè)。已經(jīng)保存至./getFile/getcoreword.txt下,請(qǐng)查閱!"); /根據(jù)字母有序打印 /montMethod.init(shlMa
16、p); 復(fù)制代碼4 運(yùn)行結(jié)果分析1 程序處理核心代碼,其中第一個(gè)類存放公共方法小面小結(jié)有,第二個(gè)類主函數(shù),如上代碼。第三個(gè)方法實(shí)體類統(tǒng)計(jì)詞頻,這樣設(shè)計(jì),應(yīng)對(duì)大數(shù)據(jù),數(shù)據(jù)小數(shù)組即可。2 處理后得到的結(jié)果,核心單詞,數(shù)據(jù)清洗結(jié)果,停用詞,翻譯,最終結(jié)果等。3 原始試卷共計(jì)82158個(gè)單詞4 數(shù)據(jù)清洗和停用詞處理后剩下32021個(gè)單詞5 去重后總共7895個(gè)單詞的考察范圍6 提取10次以上核心單詞623個(gè),即便5次以上不過1500個(gè)單詞7 性能方面運(yùn)行25秒是穩(wěn)定的,這個(gè)主要是對(duì)7895個(gè)單詞排序問題耗時(shí)比較多5 自然語言常用方法小結(jié)JAVA實(shí)現(xiàn),C#類似:1 實(shí)體的根本使用 View Code2
17、批量讀取目錄下的文件復(fù)制代碼 /* * 對(duì)單個(gè)文件的讀取,并將整個(gè)以字符串形式返回 * param srcfilepath 讀取文件的地址 * param separ 逐行讀取的分隔符號(hào),如:" ", "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 讀取單個(gè)文件復(fù)制代碼 /* * 對(duì)單個(gè)文件的讀取,并將整個(gè)以字符串形式返回 * param srcfilepath 讀取文件的地址 *
20、param separ 逐行讀取的分隔符號(hào),如:" ", "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ù)制代碼 /* * 對(duì)文件的讀取,并將整個(gè)以字符串形式返回 * p
22、aram shlMap 傳入的map集合 * param tarfilepath 讀取文件的地址 * param separ 逐行讀取的分隔符號(hào),如:" ", "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"); /對(duì)讀入的文本進(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、分隔符號(hào),如:" ", "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對(duì)象,參數(shù)可以指定編碼,默認(rèn)為操作系統(tǒng)默認(rèn)編碼,windo
26、ws上是gbk writer.append(str+separ);/ 刷新緩存沖,寫入到文件,如果下面已經(jīng)沒有寫入的內(nèi)容了,直接close也會(huì)寫入 writer.close();/關(guān)閉寫入流,同時(shí)會(huì)把緩沖區(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等.壓縮文件請(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東外語外貿(mào)大學(xué)《大數(shù)據(jù)運(yùn)維實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東食品藥品職業(yè)學(xué)院《藝術(shù)作品朗誦》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東石油化工學(xué)院《傳統(tǒng)建筑與園林營(yíng)造》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東汕頭幼兒師范高等??茖W(xué)校《公關(guān)理論與實(shí)務(wù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東培正學(xué)院《會(huì)計(jì)信息系統(tǒng)》2023-2024學(xué)年第一學(xué)期期末試卷
- 七年級(jí)上冊(cè)《6.1.1 立體圖形與平面圖形》課件與作業(yè)
- 七年級(jí)上冊(cè)《2.2.1 第2課時(shí) 有理數(shù)乘法的運(yùn)算律》課件與作業(yè)
- 廣東南方職業(yè)學(xué)院《教育研究概論》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東茂名農(nóng)林科技職業(yè)學(xué)院《播音主持》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東理工職業(yè)學(xué)院《實(shí)驗(yàn)核醫(yī)學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 大型活動(dòng)車輛調(diào)度管理方案
- 醫(yī)生幫扶計(jì)劃和幫扶措施
- 房屋永久居住權(quán)合同范本
- 浙江省寧波市慈溪市2023-2024學(xué)年高二上學(xué)期期末考試 歷史 含解析
- 《新聞傳播倫理與法規(guī)》習(xí)題與答案
- 上海市市轄區(qū)(2024年-2025年小學(xué)五年級(jí)語文)人教版期末考試(下學(xué)期)試卷及答案
- 電信業(yè)務(wù)運(yùn)營(yíng)與服務(wù)規(guī)范
- 信息安全技術(shù)測(cè)試題與答案
- 安保工作考核表
- 收費(fèi)站突發(fā)事件應(yīng)急預(yù)案(10篇)
- 2024年-2025年公路養(yǎng)護(hù)工理論知識(shí)考試題及答案
評(píng)論
0/150
提交評(píng)論