需求概要:

1.把程序迁移到web平台,通过用户上传TXT的方式接收文件。

2.用户直接输入要统计的文本,服务器返回结果

3.在页面上给出链接 (如果有封皮、作者、字数、页数等信息更佳)或表格,展示经典英文小说词频统计结果;

4.支持用户自定义单词分隔符;

5.词汇范围对比(额外项)。

分析和设计:

1.创建web工程,利用servlet上传文件的技术实现用户向服务器上传文件。页面设置表单类型为enctype="multipart/form-data",创建文件上传文本框<input type="file" id="upfilename" name="upfilename" value="" />,服务器端使用Part p = request.getPart("upfilename");获取上传的文件,然后写入到指定地址即可。

2.直接分析用户post到服务器的内容,为了使用原有的api,可以将输入内容写到文件中,再进行分析。

3.页面展示统计结果

4.用户可以输入自定义的分隔符和设置显示统计结果前10行(可修改)。需要修改原词频统计的有效字符函数。

5.暂时不考虑

部分代码实现:

表单实现

     <div align="center" id="txtform">
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" id="upfilename" name="upfilename" value="" /> 自定义分隔符<input
type="text" id="splitter" name="splitter"> <input
type="submit" id="submit" value="上传" />
</form>
</div>
<div align="center" id="txtform">
<form action="wordcount" method="post">
<div align="center">待统计内容</div>
<textarea name="content" id="content"
style="width: 700px; height: 200px;"></textarea>
<br> 统计前<select id="num" name="num">
<option value="10">10</option>
<option value="20">20</option>
<option value="0">所有</option>
</select>项 <br>自定义分隔符<input type="text" id="splitter" name="splitter"> <input
type="submit" value="提交" /> <input type="button"
onclick="if(confirm('确认重置?')){reset()}" value="重置">
</form>
</div>

文件上传:

         request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
byte b[] = new byte[2048];
@SuppressWarnings("unused")
int len = 0;
Part p = request.getPart("upfilename");
if(p==null){
System.out.println("p == null");
}
String splitter = request.getParameter("splitter");
InputStream in = p.getInputStream();
String name = ""+System.currentTimeMillis();
FileWriter fr = new FileWriter("D:\\upload\\" + name+".txt");
while ((len = in.read(b)) > 0) {
fr.write(new String(b));
}
fr.close();
out.println("uploaded");
response.sendRedirect("wordcount?id="+name+"&splitter"+splitter);
out.flush();
out.close();

servlet处理:

     protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String id = request.getParameter("id");
int num = 10;
String filename = "D:\\upload\\" + id + ".txt";
WordUtil wu = WordUtilFactory.getWordUtil();
long start = System.currentTimeMillis();
String splitter = request.getParameter("splitter");
wu.setSplitter(splitter);
List<String[]> result = wu.getSortedWordGroupCountBuffered(filename, splitter);
int size = result.size();
for (int i = 0; i < (size > num ? num == 0 ? size : num : size); i++) {
String[] strs = result.get(i);
out.println(strs[1] + " : " + strs[0] + "<br>");
}
long end = System.currentTimeMillis();
out.println("execution time :" + (end - start) + "ms");
out.flush();
out.close();
} protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String content = request.getParameter("content");
String numStr = request.getParameter("num");
int num = 10;
if (numStr != null) {
num = Integer.parseInt(numStr);
}
WordUtil wu = WordUtilFactory.getWordUtil(); long start = System.currentTimeMillis();
String filename = "D://tmp.txt"; FileWriter fr = new FileWriter(filename);
fr.write(content);
fr.close();
String splitter = request.getParameter("splitter");
wu.setSplitter(splitter);
List<String[]> result = wu.getSortedWordGroupCountBuffered(filename, splitter);
int size = result.size();
for (int i = 0; i < (size > num ? num == 0 ? size : num : size); i++) {
String[] strs = result.get(i);
out.println(strs[1] + " : " + strs[0] + "<br>");
}
long end = System.currentTimeMillis();
out.println("execution time :" + (end - start) + "ms");
out.flush();
out.close();
}

有效字符判定(即自定义分隔符)

     public void setSplitter(String splitter) {
char[] tmp = splitter.toCharArray();
ArrayList<Character> deleted = new ArrayList<>();
for(int i=0;i<tmp.length-1;i++){
if(tmp[i]=='\\'){
char c = tmp[i+1];
if(c=='n'){
deleted.add('\n');
}
if(c=='r'){
deleted.add('\n');
}
if(c=='t'){
deleted.add('\n');
}
char[] copy = new char[tmp.length-2];
for(int j = 0;j <i;j++){
copy[j]=tmp[j];
}
for(int j=i;j<tmp.length-2;j++){
copy[j]=tmp[j+2];
}
i++;
}
}
split = new char[tmp.length+deleted.size()];
for(int i = 0;i<tmp.length;i++){
split[i]=tmp[i];
}
for(int i=tmp.length;i<split.length;i++){
split[i]=deleted.get(split.length-tmp.length-1);
}
} private int isCharacter(char ch, String splitter) {
if (split == null) {
if ((ch >= 'a' && ch <= 'z'))
return 1;
if ((ch >= 'A' && ch <= 'Z'))
return 1;
if (ch >= '0' && ch <= '9')
return 2;
return 0;
}
if (split.equals("")) {
if ((ch >= 'a' && ch <= 'z'))
return 1;
if ((ch >= 'A' && ch <= 'Z'))
return 1;
if (ch >= '0' && ch <= '9')
return 2;
return 0;
}
for (int i = 0; i < split.length; i++) {
if (ch == split[i]) {
return 0;
}
}
if ((ch >= 'a' && ch <= 'z'))
return 1;
if ((ch >= 'A' && ch <= 'Z'))
return 1;
if (ch >= '0' && ch <= '9')
return 2;
return 1;
}

 运行截图:

web版工程地址:https://git.coding.net/jx8zjs/wordcount-web.git

ssh:  git@git.coding.net:jx8zjs/wordcount-web.git

console版工程地址https://coding.net/u/jx8zjs/p/wordCount/git

ssh:  git@git.coding.net:jx8zjs/wordCount.git

java词频统计——web版支持的更多相关文章

  1. C语言实现词频统计——第二版

    原需求 1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符. 2.统计英文单词在本文件的出现次数 3.将统计结果排序 4.显示排序结果 新需求: 1.小文件输入. 为表明程序能跑 2.支持命 ...

  2. Java实现的词频统计——Web迁移

    本次将原本控制台工程迁移到了web工程上,依旧保留原本控制台的版本. 需求: 1.把程序迁移到web平台,通过用户上传TXT的方式接收文件: 2.在页面上给出链接 (如果有封皮.作者.字数.页数等信息 ...

  3. 个人项目----词频统计WEB(部分功能)

    需求分析 1.使用web上传txt文件,对上传的txt进行词频统计. 2.将统计后的结果输出到web页面,力求界面优美. 3.在界面上展示所给url的文章词频统计,力求界面优美. 3.将每个单词同四. ...

  4. java词频统计——改进后的单元测试

    测试项目 博客文章地址:[http://www.cnblogs.com/jx8zjs/p/5862269.html] 工程地址:https://coding.net/u/jx8zjs/p/wordCo ...

  5. 词频统计Web工程

    本次将原本控制台工程迁移到了web工程上.. 需求: 1.把程序迁移到web平台,通过用户上传TXT的方式接收文件: 2.在页面上给出链接 (如果有封皮.作者.字数.页数等信息更佳)或表格,展示经典英 ...

  6. 词频统计-------------web版本

    要求:把程序迁移到web平台,通过用户上传TXT的方式接收文件.建议(但不强制要求)保留并维护Console版本,有利于测试. 在页面上设置上传的控件,然后在servlet中接受,得到的是一个字节流, ...

  7. Java课程设计---web版斗地主

    一. 团队课程设计博客链接 二.个人负责模块和任务说明 负责前后端数据传输 JSP界面的设计 根据后台传来的数据进行页面动态更新 负责Servlet设计 三.自己的代码提交记录截图 四.自己负责模块或 ...

  8. java 词频统计代码

    package hello; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.F ...

  9. 词频统计web

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

随机推荐

  1. 封装php redis缓存操作类

    封装php redis缓存操作类,集成了连接redis并判断连接是否成功,redis数据库选择,检测redis键是否存在,获取值,写入值,设置生存时间和删除清空操作. php redis类代码: &l ...

  2. 恶意代码技术第一二部分——P201421410029

    学   号:201421410029   中国人民公安大学 Chinese people’ public security university 网络对抗技术 实验报告   实验四 恶意代码技术   ...

  3. 大页内存(HugePages)

    原文转载自:http://blog.csdn.net/yutianzuijin/article/details/41912871 今天给大家介绍一种比较新奇的程序性能优化方法—大页内存(HugePag ...

  4. Spring 整合Mybatis实例

    演示样例下载地址:http://download.csdn.net/detail/geloin/4506640 本文基于Spring 注解,让Spring跑起来.本文使用Mysql数据库. (1) 导 ...

  5. MSP430F5438A的串口

    设置串口,最关键的是波特率的设置,推荐一个网站,很方便地计算波特率,http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP43 ...

  6. WFP page navigator control

    WPF navigator UI: <Grid x:Class="WpfApplication2.PagerNav" xmlns="http://schemas.m ...

  7. 20155313 杨瀚 《网络对抗技术》实验一 PC平台逆向破解(5)M

    exp1 PC平台逆向破解(5)M 一.实验内容 1.手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 2.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发 ...

  8. [CF1063F]String Journey[后缀数组+线段树]

    题意 在 \(S\) 中找出 \(t\) 个子串满足 \(t_{i+1}\) 是 \(t_{i}\) 的子串,要让 \(t\) 最大. \(|S| \leq 5\times 10^5\). 分析 定义 ...

  9. JavaScript快速入门-实战(例子)

    1.模拟bootstrap中的模态框 效果图:(点我后,弹出对话框,最下面的内容可以看到,但是有一定的透明度.) 思路分析: 整体分为三层,最底层(点我),中间透明层(实现透明效果),最顶层(最新内容 ...

  10. 有关ADO.NET基础中的基础的熟悉过程

    现在对于ADO.NET基础的理解与记忆并不严谨和完善 所以,只写一点关于自己的理解,嗯,一种去转换思维理解的方法吧,算是吧 希望各位前辈或者同学,积极指出其中的错误和偏差 个人对于刚接触的ADO.NE ...