一. 背景

​   最近顶哥为了完成学历提升学业中的小作业,做了一个词频统计的.exe小程序。因为当时做的时候网上的比较少,因此顶哥决定把自己拙略的作品发出来给需要的人提供一种思路,希望各位看官不要dis才好。最后附上源码链接,感兴趣的朋友可以继续优化哦。

二. 先看效果

双击运行,下拉框选择源文件来源,支持本地和网络资源,如图:

                      

                

                             本地源文件示例

              

                              网络源文件示例

三. 主要代码

1.pom文件

  <dependencies>
<!-- 分词器 -->
<dependency>
<groupId>com.janeluo</groupId>
<artifactId>ikanalyzer</artifactId>
<version>2012_u6</version>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<!--打包插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4.1</version> <configuration>
<!-- get all project dependencies -->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!-- MainClass in mainfest make a executable jar -->
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>cn.dintalk.service.WordCount</mainClass>
</manifest>
</archive>
</configuration> <executions>
<execution>
<id>make-assembly</id>
<!-- bind to the packaging phase -->
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

2.WebUtils

/**
* @author Mr.song
* @date 2019/10/13 9:26
*/
public class WebUtils { /**
* 根据url和参数发送get请求
*
* @param url
* @param param
* @return 返回网页内容
*/
public static String sendGet(String url, String param) {
String result = "";
if (param != null) {
url = url + "?" + param;
}
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
HttpURLConnection conn = getHttpURLConnection(realUrl);
result = getResponse(conn);
} catch (Exception e) {
e.printStackTrace();
}
return result;
} //根据url 获取连接
private static HttpURLConnection getHttpURLConnection(URL realUrl) {
StringBuilder sb = new StringBuilder();
sb.append("Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
sb.append(" AppleWrbKit/537.36(KHTML, like Gecko)");
sb.append(" Chrome/72.0.3626.119 Safari/537.36");
HttpURLConnection conn = null;
try {
// 打开和URL之间的连接
conn = (HttpURLConnection) realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
return conn;
} // 根据url连接获取响应
private static String getResponse(HttpURLConnection conn) {
// 读取URL的响应
String result = "";
try (InputStream is = conn.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "utf-8");
BufferedReader in = new BufferedReader(isr)) {
String line;
while ((line = in.readLine()) != null) {
result += "\n" + line;
}
} catch (Exception e) {
System.out.println("Err:getResponse()");
e.printStackTrace();
} finally {
conn.disconnect();
}
// System.out.println("getResponse():" + result.length());
return result;
} /**
* 解析网页为文本
*
* @param html
* @return
*/
public static String parseHtmlToText(String html) {
Document document = Jsoup.parse(html);
return document.text();
}
}

3.IKSUtils

/**
* @author Mr.song
* @date 2019/10/10 21:12
*/
public class IKSUtils { /**
* 对文本进行分词
* @param text
* @return
* @throws Exception
*/
public static List<String> getStringList(String text) throws Exception{
//独立Lucene实现
StringReader re = new StringReader(text);
IKSegmenter ik = new IKSegmenter(re, true);
Lexeme lex;
List<String> s = new ArrayList<>();
while ((lex = ik.next()) != null) {
s.add(lex.getLexemeText());
}
return s;
} /**
* 统计词频
* @param wordList
* @return
*/
public static Map<String,Integer> wordCount(List<String> wordList){
if (wordList == null) return null;
Map<String,Integer> result = new HashMap<>();
for (String s : wordList) {
Integer count = result.get(s);
if (count == null){
result.put(s,1);
}else {
result.put(s,++count);
}
}
//按照次数排序
result = result
.entrySet()
.stream()
.sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2,
LinkedHashMap::new));
return result;
}
}

四. 相关地址

源码地址:

https://github.com/MrSonghui/wordCount

将一个jar包打包成.exe文件,这里给一个参考:

https://www.cnblogs.com/xiaoMzjm/p/3879766.html

喜欢的朋友可以关注我的公众号,需要广告托管的朋友可以加QQ哦!

词频统计小程序-WordCount.exe的更多相关文章

  1. 采用pandas读取文件,进行自动化统计小程序

    自己完成的第二个自动化统计小程序,完成之后感觉:命名不够规范,造成可读性比较没那么好,幸好给自己很多地方都加了注释#coding:utf-8import os,sysimport reimport x ...

  2. Hadoop之词频统计小实验

    声明:    1)本文由我原创撰写,转载时请注明出处,侵权必究. 2)本小实验工作环境为Ubuntu操作系统,hadoop1-2-1,jdk1.8.0. 3)统计词频工作在单节点的伪分布上,至于真正实 ...

  3. python--代码统计小程序

    有人说,大学生在校期间要码够10W行代码,也有人说,看的不是写代码的行数,而是修改代码的行数... 不管谁说,说的人都挺牛的 咳,首先给自己定个小目标吧,5W行代码!成天写代码,啥时候到5W呢?为了更 ...

  4. 【学习笔记】C#中HashTable和快速排序的用法,从单词频率统计小程序写起

    先瞎扯点别的.进入这个神圣的地方总需要些鞭策,阿西巴,我是被鞭策进来摆摊的程序猿.软件工程老师说,写程序,发博客,就来博客园.这是个号召力很强的口号.最近看网络营销 搜索引擎优化的书多一些,只能说王老 ...

  5. hadoop的统计单词程序WordCount提示找不到WordCount类

    按这里的教程: http://www.imooc.com/learn/391 试验时,发现在wordcount的最后一步一直提示如下错误: Exception in thread "main ...

  6. linux 流量统计小程序

    源代码例如以下: //2015/7/2 10:30:35 //gino #include <stdio.h> #include <sys/stat.h> #include &l ...

  7. jieba分词及词频统计小项目

    import pandas as pd import jieba import jieba.analyse from collections import Counter,OrderedDict ji ...

  8. HotApp小程序统计,第一个专业的微信第三方小程序统计工具

    1.什么是HotApp小程序统计 HotApp小程序统计是第一个微信第三方小程序统计工具,就像做android 和 ios开发的人知道友盟统计一样,小程序也需要有个统计工具. 通过这个工具,可以知道小 ...

  9. (改进)Python语言实现词频统计

    需求: 1.设计一个词频统计的程序. 2.英语文章中包含的英语标点符号不计入统计. 3.将统计结果按照单词的出现频率由大到小进行排序. 设计: 1.基本功能和用法会在程序中进行提示. 2.原理是利用分 ...

随机推荐

  1. SVN服务之VisualSVN-Server和TortoiseSVN

    SVN客户端程序:TortoiseSVN SVN服务器程序:VisualSVN-Server   目前有个项目,需要版本服务器,由于习惯了svn的使用,让这边搭建一台svn服务器,做了一下整理,只满足 ...

  2. mnist 卷积神经网络

    # from keras.models import Sequential# from keras.layers.core import Dense,Activation,Flatten #creat ...

  3. CSRF拦截

    CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF. 事实上 ...

  4. java Class类使用

    1.forName public static Class<?> forName(String className) throws ClassNotFoundException 返回与带有 ...

  5. java.sql.SQLException: Unknown system variable 'query_cache_size'

    改为 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java< ...

  6. Python---进阶---logging---logger

    一.####用logging的四大组件来实现日志的功能 - 打印出函数执行的时间,日志的等级,日志的消息 - 用装饰器 - 不同的日志,要记录不同等级的日志消息 ------------------- ...

  7. Centos7 离线安装 php7

    问题:因内部管控,机器无法连接公有yum源安装php. 正常安装php7可以参考CentOS7.2 安装 PHP7.2 下面的代码也是一种方法 yum -y install libmcrypt lib ...

  8. java构造方法和重写equals

    Cell的构造函数 package Test; import java.util.Objects; public class Cell { int a; int b; public int getA( ...

  9. java生成图片验证码(转)--封装生成图片验证码的工具类

    博客部分内容转载自 LonlySnow的博客:后台java 实现验证码生成 1.controller方法 @RequestMapping(value = "/verifycode/img&q ...

  10. onchange and oninput

    https://www.w3schools.com/jsref/event_oninput.asp Supported HTML tags: <input type="color&qu ...