需求概要:

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+Hadoop+Hive+Thrift+Mysql实现数据统计分析

    原址:http://www.cnblogs.com/wicub/p/6094045.html   安装 Hadoop安装: http://www.powerxing.com/install-hadoo ...

  2. php.ini 常用 配置

    参考:http://legolas.blog.51cto.com/2682485/493917这个文件必须命名为''php.ini''并放置在httpd.conf中的PHPIniDir指令指定的目录中 ...

  3. Python2.7-glob

    glob 模块,寻找所有匹配指定的模式的路径名,利用的是 Unix shell 的规则,可以在 Windows 环境下使用.模块是通过 os.listdir() 和 fnmatch.fnmatch() ...

  4. STM32学习之路入门篇之指令集及cortex——m3的存储系统

    STM32学习之路入门篇之指令集及cortex——m3的存储系统 一.汇编语言基础 一).汇编语言:基本语法 1.汇编指令最典型的书写模式: 标号 操作码        操作数1, 操作数2,... ...

  5. 所做更改会影响共用模板Normal.dotm。是否保存此更改

    最近安装了Office 2010版本,但是发现个问题,每次在关闭word 2010时,都会提示所做更改会影响共用模板Normal.dotm …… 确实是烦恼,每次都需要点击是否保存,于是我在仔细研究了 ...

  6. Linux 网络监控工具 ss

    ss命令用来显示处于活动状态的套接字信息.功能和netstat类似,但比netstat更快更高效. ss -h Usage: ss [ OPTIONS ] ss [ OPTIONS ] [ FILTE ...

  7. 【php增删改查实例】 第三节 - mysql 建表

    这一节,来给数据库中添加一些测试数据. 登陆mysql: 找到%xampp%\mysql\bin 目录, 在此处打开命令窗口,用root用户登陆mysql 用户表建表sql: CREATE TABLE ...

  8. python中eval函数作用

    eval函数就是实现list.dict.tuple与str之间的转化str函数把list,dict,tuple转为为字符串 一.字符串转换成列表 a = "[[1,2], [3,4], [5 ...

  9. Package 设计3:数据源的提取和使用暂存

    SSIS 设计系列: Package设计1:选择数据类型.暂存数据和并发 Package设计2:增量更新 Package 设计3:数据源的提取和使用暂存 在使用SSIS Package处理海量数据时, ...

  10. 基于.NET Standard的分布式自增ID算法--Snowflake代码实现

    概述 上篇文章介绍了3种常见的Id生成算法,本篇主要介绍如何使用C#实现Snowflake. 基础字段 /// <summary> /// 工作节点Id(长度为5位) /// </s ...