要求: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