java词频统计——web版支持
需求概要:
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版支持的更多相关文章
- C语言实现词频统计——第二版
原需求 1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符. 2.统计英文单词在本文件的出现次数 3.将统计结果排序 4.显示排序结果 新需求: 1.小文件输入. 为表明程序能跑 2.支持命 ...
- Java实现的词频统计——Web迁移
本次将原本控制台工程迁移到了web工程上,依旧保留原本控制台的版本. 需求: 1.把程序迁移到web平台,通过用户上传TXT的方式接收文件: 2.在页面上给出链接 (如果有封皮.作者.字数.页数等信息 ...
- 个人项目----词频统计WEB(部分功能)
需求分析 1.使用web上传txt文件,对上传的txt进行词频统计. 2.将统计后的结果输出到web页面,力求界面优美. 3.在界面上展示所给url的文章词频统计,力求界面优美. 3.将每个单词同四. ...
- java词频统计——改进后的单元测试
测试项目 博客文章地址:[http://www.cnblogs.com/jx8zjs/p/5862269.html] 工程地址:https://coding.net/u/jx8zjs/p/wordCo ...
- 词频统计Web工程
本次将原本控制台工程迁移到了web工程上.. 需求: 1.把程序迁移到web平台,通过用户上传TXT的方式接收文件: 2.在页面上给出链接 (如果有封皮.作者.字数.页数等信息更佳)或表格,展示经典英 ...
- 词频统计-------------web版本
要求:把程序迁移到web平台,通过用户上传TXT的方式接收文件.建议(但不强制要求)保留并维护Console版本,有利于测试. 在页面上设置上传的控件,然后在servlet中接受,得到的是一个字节流, ...
- Java课程设计---web版斗地主
一. 团队课程设计博客链接 二.个人负责模块和任务说明 负责前后端数据传输 JSP界面的设计 根据后台传来的数据进行页面动态更新 负责Servlet设计 三.自己的代码提交记录截图 四.自己负责模块或 ...
- java 词频统计代码
package hello; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.F ...
- 词频统计web
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...
随机推荐
- linux 邮件工具利器sendEmail时效超好
下载:http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz 安装方法: ) Extract the pac ...
- JAVA 框架 springmvc controller的返回值
一.返回值:ModleView对象. 使用modelAndView.setViewName设置返回的页面.使用modelAndView.addObject设置返回的数据. @RequestMappin ...
- JAVA框架 Mybaits 输入和输出映射
一.输入映射 当前端传来的参数,比较复杂,比如说用户名称.订单单号.账号信息等等.后端有可能有多个projo类对应这些信息.我们需要把这些的projo类封装成一个类似一个vo类. 通过设置字段形式关联 ...
- SQL Prompt 智能提示插件
1.安装及破解参照地址:http://jingyan.baidu.com/article/a3a3f811da2b3a8da3eb8a4b.html 2.安装包下载: 1)下载 2)http://do ...
- 测试计划&性能测试分析报告模板(仅供参考)
一.测试计划 1. 引言 1.1 编写目的 2. 参考文档 3. 测试目的 4. 测试范围 4.1 测试对象 4.2 需要测试的特性 4.3 无需测试的特性 5. 测试启动与结束准则 5.1 ...
- x window的奥秘
阅读目录 了解自己机器上的 X Window 理解 display 和虚拟控制台 远程连接 X Server 理解 lightdm 和 X Window 桌面环境的启动过程 搞定 xauth X Se ...
- [Lydsy1805月赛]quailty 算法 BZOJ5362
分析: 题目中描述了一个二分图,让我们求最小权最大匹配,实际上其实是求n个点,在n*(n-1)/2中选n条边的权值和最小,形成一个每个点都有出边的体系,也就是基环树,(证明:因为我们需要二分图最大匹配 ...
- Luence
Luence 是Apache软件基金会的一个项目,是一个开发源码的全文检索引擎工具包,是一个全文检索引擎的一个架构.提供了完成的查询引擎和检索引擎,部分文本分析引擎. 全文检索程序库,虽然与搜索引擎相 ...
- 大数据入门第二十五天——logstash入门
一.概述 1.logstash是什么 根据官网介绍: Logstash 是开源的服务器端数据处理管道,能够同时 从多个来源采集数据.转换数据,然后将数据发送到您最喜欢的 “存储库” 中.(我们的存储库 ...
- FakeID签名漏洞分析及利用(二)
本文转自:http://blog.csdn.net/l173864930/article/details/38409521 继上一次Masterkey漏洞之后,Bluebox在2014年7月30日又公 ...