Java:词频统计程序
词频统计程序(Java)
题目描述:
做一个词频统计程序,该程序具有以下功能:
基本要求:
(1)可导入任意英文文本文件
(2)统计该英文文件中单词数和各单词出现的频率(次数),并能将单词按字典顺序输出。
(3)将单词及频率写入文件。
提高要求:
(4)将单词及频率写入数据库。
具体实现代码如下(不包括DAO部分):
package com._520it._chapter02;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;import com._520it._chapter02.dao.IWordDAO;
import com._520it._chapter02.dao.impl.WordDAOImpl;
import com._520it._chapter02.domain.Word;/*** 词频统计程序* @author Jack* @date 2018-09-21* @version 1.0*/
public class WordCounts {public static void main(String[] args) {// 从文件中读取数据,并存入List集合中List<String> list = readFromFile();String str = list.get(0);str.replaceAll(",", "");str.replaceAll(".", "");String[] words = str.split(" ");// 将单词全部转换为小写for (int i = 0; i < words.length; i++) {words[i] = words[i].toLowerCase();}// 将单词按照字典排序words = sortWords(words);// 将结果放入Map集合中Map<String, Integer> map = new HashMap<>();for (int i = 0; i < words.length; i++) {if (!map.containsKey(words[i])) {map.put(words[i], 1);} else {int num = map.get(words[i]) + 1;map.put(words[i], num);}}// 将结果写入文件writeToFile(map);Iterator<String> iterator = map.keySet().iterator();IWordDAO dao = new WordDAOImpl();while (iterator.hasNext()) {Word w = new Word();String word = (String) iterator.next();w.setWord(word);w.setCount(map.get(word).longValue());// 将结果写入数据库dao.save(w);}}/*** 从文件中读取数据* @return 存有数据的List集合*/private static List<String> readFromFile() {// 表示读取的行String line = null;List<String> list = new ArrayList<>();try {// 创建字符输入流对象FileReader srcFile = new FileReader("resources/data.txt");// 字符缓冲输入流BufferedReader in = new BufferedReader(srcFile);while ((line = in.readLine()) != null) {// 将数据存储到list集合中list.add(line);}// 关闭资源in.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return list;}/*** 将结果写入文件* @param map Map集合*/private static void writeToFile(Map<String, Integer> map) {try {// 创建字符输出流对象FileWriter desFile = new FileWriter("resources/result.txt", true);// 字符缓冲输出流BufferedWriter out = new BufferedWriter(desFile);Iterator<String> iterator = map.keySet().iterator();while (iterator.hasNext()) {String word = (String) iterator.next();out.write(word + " : " + map.get(word));// 输出换行out.newLine();}// 关闭资源out.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}/*** 将字符串数组按照字典排序* @param str 需要排序的数组* @return 排序后的字符串数组*/private static String[] sortWords(String[] str) {for (int i = 0; i < str.length - 1; i++) {for (int j = 0; j < str.length - 1 - i; j++) {if ((str[j].compareTo(str[j + 1])) > 0) {String temp = str[j];str[j] = str[j + 1];str[j + 1] = temp;}}}return str;}
}
Java:词频统计程序相关推荐
- java词频统计——web版支持
需求概要: 1.把程序迁移到web平台,通过用户上传TXT的方式接收文件. 2.用户直接输入要统计的文本,服务器返回结果 3.在页面上给出链接 (如果有封皮.作者.字数.页数等信息更佳)或表格,展示经 ...
- java词频统计简单带代码_简单的词频统计代码实现(PDF格式)
周末抽空帮同学论文写了一段统计词频的代码,做个简单总结.出于职业病,代码使用Springboot+Maven搭建,面向抽象编程,并通过web请求控制执行. 依赖配置 org.springframewo ...
- Java词频统计总结
思路: 1.先对它进行分片 2.对它根据分片位置进行词频统计 3.对结果进行合并 所用的一些方法: 1.在分片的过程中,解决分片的位置在句子中间的问题: try (RandomAccessFile r ...
- java 词频_java程序:统计单词词频,
用java统计英文文章单词词频,源码如下:问题:输出时不要按键输出,要按键值从大到小输出.键值相同时按键从大到小排序(比如:any=3,an=3时,输出顺序为:an=3any=3).比如:原来输... ...
- Python英文词频统计(哈姆雷特)程序示例
今天继续给大家介绍Python相关知识,本文主要内容是Python英文词频统计程序示例,主要是对英文文本--<哈姆雷特>进行分词. 一.英文文本词频统计思路 想要对<哈姆雷特> ...
- 个人和结对项目 - 英语单词词频统计
个人或结对编程项目 英语单词词频统计程序 (最新版本在这里) 实现一个命令行程序,支持几种模式下的单词词频统计 Implement a console application to tally the ...
- Mapreduce入门--词频统计
前言 本篇博客内容:使用Hadoop提供给Java的依赖和接口轻松实现Mapreduce词频统计程序的入门. 工具:IDEA 需求:统计<yxp>这首诗中每个单词和符号出现的次数 诗的内容 ...
- Flink学习3-WordCount词频统计
基于Flink开发环境,接下来我们将完成Flink版本的词频统计程序,主要内容如下: 需求描述 功能设计 功能开发 需求升级 针对以上几个步骤,下面将详细展开,读者可根据自身情况有选择阅读. 1. 需 ...
- Hadoop词频统计
这里写自定义目录标题 前提 制作JAR包 启动Hadoop 将wordfile1.txt上传到HDFS 重新上传文件进行词频统计和注意事项 HDFS常用命令 前提 1.安装了Linux系统,并且安 ...
最新文章
- 网络编程 UDP通信的过程 TCP通信过程 多线程文件上传
- php函数get_magic_quotes_gpc详解
- WPF快速入门系列(8)——MVVM快速入门
- tomcat架构分析 (connector NIO 实现)【转】
- Java使用BTrace动态替换线上class文件
- JavaWeb学习总结(四十九)——简单模拟Sping MVC
- 腾达W303R v3 无线路由器使用移动光纤无法打开视频的设置方法
- 前端必知必会--JSON.stringify()犀利的第三个参数
- 系统分析师通过率_软考5个高级难度最小的是哪个?哪个通过率高一些?
- java购物车商品排序_Java购物车
- python chardet_Python - chardet
- 数据集:102 flower、Cratech256、ImageNet数据集下载
- web 前端面试题50道
- easy_ui之搭建后台界面(一)
- Java基础-子类和父类之间的诡异事件
- pearlovell
- oracle11g磁盘阵列 pdf,融会贯通 从Oracle11g到SQL Server2008 中文PDF版 16.7MB
- 《数据分析思维》:分析方法与业务知识
- ecshop小京东的模板切换到smarty3.1.3之去掉原生的php语法
- 【stm32f407】时钟树以及SystemInit剖析