要求:javascript
寫一個程序,分析一個文本文件中各個詞出現的頻率,而且把頻率最高的10個詞打印出來。文本文件大約是30KB~300KB大小。php
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>詞頻統計</title> <meta name="description" content=""> <meta name="keywords" content=""> <link href="" rel="stylesheet"> <script type="text/javascript"> window.onload = function() { var xmlhttp; if(window.XMLHttpRequest){ xmlhttp=new XMLHttpRequest(); }else{ xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function(){ if (xmlhttp.readyState==4 && xmlhttp.status==200){ var content = xmlhttp.responseText; var str = new Array(); var strs =null; var result = new Array(); var result1 = new Array(); var res = new Array(); var res3 = new Array(); var res1 = new Array(); var res2 = new Array(); str=content.split(" "); var reg=/,|\.|\?|!|:|;|\r\"\"/g; for(var i =0;i<str.length;i++){ strs=str[i].replace(reg,'').toLowerCase(); result.push(strs); } result1 = result; for(var e in result){ for(var i=0;i<result.length;i++){ res[result[e]]=1; } } for(var i=0;i<result.length;i++){ for(var j=0;j<result1.length;j++){ if(result[i]==result1[j]){ res[result[i]]++; } } } var j=0; for(var c in res){ res1[j] = res[c]; res2[j] = c; j++; } res1.sort(function(a,b){return b-a;}) for(var i=0;i<10;i++){ for(var j=0;j<res2.length;j++){ if(res1[i]==res[res2[j]]){ res3.push("Top"+(i+1)+" : "+res2[j]+ "-->"+res1[i]); } } //console.log(ed[i]); } var oDiv = document.getElementById('main'); var oUl = oDiv.getElementsByTagName('ul')[0]; for(var i=0;i<res3.length;i++){ var oLi = document.createElement('li'); oLi.innerHTML = res3[i]; oUl.appendChild(oLi); } } } xmlhttp.open("GET","./test.txt",true); xmlhttp.send(); } </script> <style> li{ list-style:none; } </style> </head> <body> <div id="main"> <ul> </ul> </div> </body> </html>
實驗心得: html
經過此次做業,感受仍是學到了不少的東西。由於以前一直在學習jsvascript 就嘗試着用這個弱類型語言來編寫,就是可能這個語言沒有像c++、java這樣的語言那麼強大,因此在作的過程當中存在不少的問題,特別是在數組的轉換和比較方面,最開始的時候想的就是運用一個關聯數組的形式,用鍵來保存詞,用值來保存單詞出現的頻率,可是作到最後發現比較的時候和循環的時候存在很大的弊端,因此後面就無可奈何把這個關聯數組拆分爲2個不一樣的數組,再對頻率的那個數組用javascript自帶的快排函數sort()進行排序,後面再把2個數組進行排序,並進行輸出。java