之前的jar包有问题,现已修改.

需要的jar包,已修改

自己去Maven中央仓库下载jar包.

excel数据:

直接上代码.

程序再度优化了一遍.之后如果想再度精准,可能需要建模,最近没空继续做了.

实体类:

package org.analysisitem20181016.pojo;public class Item {private int index;private int match_text_length;private String item_name;private String activity_id;private String type;private String user_id;private String selled_count;private int similarity; private String matchText;public String getItem_name() {return item_name;}public void setItem_name(String item_name) {this.item_name = item_name;}public String getActivity_id() {return activity_id;}public void setActivity_id(String activity_id) {this.activity_id = activity_id;}public String getType() {return type;}public void setType(String type) {this.type = type;}public String getUser_id() {return user_id;}public void setUser_id(String user_id) {this.user_id = user_id;}public String getSelled_count() {return selled_count;}public void setSelled_count(String selled_count) {this.selled_count = selled_count;}public int getSimilarity() {return similarity;}public void setSimilarity(int similarity) {this.similarity = similarity;}public String getMatchText() {return matchText;}public void setMatchText(String matchText) {this.matchText = matchText;}public int getIndex() {return index;}public void setIndex(int index) {this.index = index;}public int getMatch_text_length() {return match_text_length;}public void setMatch_text_length(int match_text_length) {this.match_text_length = match_text_length;}}

线程处理类(改良后使用了calculate2方法来匹配):

package org.analysisitem20181016.main;import org.analysisitem20181016.pojo.Item;public class ThreadMain implements Runnable{private int index;private Item item;public ThreadMain(int index, Item item){this.index = index;this.item = item;}@Overridepublic void run() {System.out.println("任务" + index + "开始执行!");for(int i = 0; i < CompareMain.itemList.size(); i++){if(i == index){continue;}String text = item.getItem_name();String text2 = CompareMain.itemList.get(i).getItem_name();String initText = null;String initText2 = null;if(text.length() <= text2.length()){initText = text;initText2 = text2;}else{initText = text2;initText2 = text;}
//            String calculatedText = calculate(initText, initText, initText2, 0, 2);String calculatedText = calculate2(initText, initText, initText2, 0, 2);/*if(initText.equals("蒜瓣肉")){System.out.println(item.getSimilarity());if(item.getSimilarity() > 9){System.out.println("initText:" + initText);System.out.println("text:" + text);System.out.println("text2:" + text2);}}*/if(calculatedText != null && calculatedText.equals("")){calculatedText = "无匹配数据";}if(calculatedText != null && !calculatedText.equals("无匹配数据")){
//                System.out.println("匹配字符串:" + calculatedText);
                item.setMatchText(calculatedText);item.setSimilarity(item.getSimilarity() + 1);}}/*if(item.getItem_name().equals("蒜瓣肉") && item.getSimilarity() > 9){System.out.println("相似数量:" + item.getSimilarity());}*/CompareMain.calculatedItemList.add(item);}public static String calculate2(String initText, String text, String initText2, int beginIndex, int len){String subText = null;if(initText2.contains(text)){if(initText.equals("芹菜文") && initText2.equals("芹菜文")){System.out.println(4);System.out.println("4最后结果:" + text);System.out.println("4结束!");}return text;}else{while(initText.length() < len){len--;}if(len >= CompareMain.minTextLen){if(initText.equals("芹菜文")){System.out.println(1);}if(beginIndex + len < initText.length()){subText = initText.substring(beginIndex, beginIndex + len);beginIndex++;return calculate2(initText, subText, initText2, beginIndex, len);}else if(beginIndex + len >= initText.length()){subText = initText.substring(beginIndex);beginIndex = 0;len--;return calculate2(initText, subText, initText2, beginIndex, len);}}}return null;}public static String calculate(String initText, String text, String text2, int beginIndex, int len){if(text2.contains(text)){return text;}else{String subText = null;if(len < initText.length()){if(beginIndex + len < initText.length()){subText = initText.substring(beginIndex, beginIndex + len);}else{subText = initText.substring(beginIndex);}
//                System.out.println("subText:" + subText);if(subText.length() == len){
//                    System.out.println("subText.length():" + subText.length());beginIndex++;return calculate(initText, subText, text2, beginIndex, len);}}}return null;}
}

修复了一个bug.

分析主类(改变了一点代码,逻辑没变):

package org.analysisitem20181016.main;import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;import org.analysisitem20181016.pojo.Item;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;public class CompareMain{public static ArrayList<Item> itemList = new ArrayList<Item>();private static String replaceReg = "[^\u4e00-\u9fa5]+";public static int maxTextLen = 4;public static int minTextLen = 2;public static ArrayList<Item> calculatedItemList = new ArrayList<Item>();public static void main(String[] args){try{CompareMain compareMain = new CompareMain();compareMain.readExcel();
//            compareMain.compare();
            compareMain.subsectionCalculate();compareMain.show();compareMain.writeExcel();}catch(Exception e) {e.printStackTrace();}}public void writeExcel() throws Exception{File file = new File("G:/Database/Item20181016_YangBing/notitle2.xls");Workbook wb = new HSSFWorkbook();Sheet sheet = wb.createSheet();Row row = sheet.createRow(0);Cell cell = row.createCell(0);cell.setCellValue("item_name");cell = row.createCell(1);cell.setCellValue("activity_id");cell = row.createCell(2);cell.setCellValue("type");cell = row.createCell(3);cell.setCellValue("user_id");cell = row.createCell(4);cell.setCellValue("selled_count");cell = row.createCell(5);cell.setCellValue("相似数量");cell = row.createCell(6);cell.setCellValue("匹配字符串");for (int i = 0; i < calculatedItemList.size(); i++) {Item item = calculatedItemList.get(i);if(item != null){row = sheet.createRow(i + 1);cell = row.createCell(0);cell.setCellValue(item.getItem_name());cell = row.createCell(1);cell.setCellValue(item.getActivity_id());cell = row.createCell(2);cell.setCellValue(item.getType());cell = row.createCell(3);cell.setCellValue(item.getUser_id());cell = row.createCell(4);cell.setCellValue(item.getSelled_count());cell = row.createCell(5);/*if(item.getItem_name().equals("蒜瓣肉")){System.out.println("相似数量:" + item.getSimilarity());}*/cell.setCellValue(item.getSimilarity());cell = row.createCell(6);cell.setCellValue(item.getMatchText());}}FileOutputStream fos = new FileOutputStream(file);wb.write(fos);fos.flush();fos.close();wb.close();System.out.println("写入Excel文件完成!");}public void show(){
//        System.out.println(calculatedItemList.size());for(Item item : calculatedItemList){if(item != null){
//                System.out.println("item_name:" + item.getItem_name() + ",匹配字符串:" + item.getMatchText() + ",count:" + item.getSimilarity());
            }}}public void subsectionCalculate() throws Exception{LinkedBlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>();int size = itemList.size();ThreadPoolExecutor executor = new ThreadPoolExecutor(size, size, 7200, TimeUnit.SECONDS, workQueue);for(int i = 0; i < itemList.size(); i++){Item outerItem = itemList.get(i);ThreadMain threadMain = new ThreadMain(i, outerItem);executor.execute(threadMain);}while(true){if(executor.getCompletedTaskCount() >= size){executor.shutdown();executor.shutdownNow();break;}Thread.sleep(1000);}}/*public void compare(){System.out.println("正在比较中...");for(int i = 0; i < itemList.size(); i++){Item outerItem = itemList.get(i);for(int j = i + 1; j < itemList.size(); j++){Item innerItem = itemList.get(j);String outerItemName = outerItem.getItem_name();String innerItemName = innerItem.getItem_name();if(!filtered){outerItemName = outerItemName.replaceAll(replaceReg, "");innerItemName = innerItemName.replaceAll(replaceReg, "");}
//                int count = calculate(outerItemName, innerItemName, initialLen);outerItem.setSimilarity(outerItem.getSimilarity() + count);}
//            calculatedItemList.add(outerItem);}System.out.println("计算完毕!");}*/public void readExcel() throws Exception{File file = new File("G:/Database/Item20181016_YangBing/notitle.xls");POIFSFileSystem fs = new POIFSFileSystem(file);Workbook wb = new HSSFWorkbook(fs);
//        int sheet_size = wb.getNumberOfSheets();Sheet sheet = wb.getSheetAt(0);for(int i = 1; i < sheet.getPhysicalNumberOfRows(); i++){Row row = sheet.getRow(i);Item item = new Item();for(int j = 0; j < row.getLastCellNum(); j++){Cell cell = row.getCell(j);if(j == 0){String item_name = cell.getStringCellValue();item_name = item_name.replaceAll(replaceReg, "");item.setItem_name(item_name);}else if(j == 1){double activity_id = cell.getNumericCellValue();item.setActivity_id((long)activity_id + "");}else if(j == 2){String type = cell.getStringCellValue();item.setType(type);}else if(j == 3){double user_id = cell.getNumericCellValue();item.setUser_id((long)user_id + "");}else if(j == 4){double selled_count = cell.getNumericCellValue();item.setSelled_count((long)selled_count + "");}}itemList.add(item);}wb.close();fs.close();}}

现在可以匹配多个字符了,会有一点bug,暂时没空解决.

好了,有兴趣的自己看代码吧!

转载于:https://www.cnblogs.com/JimmySeraph/p/9811194.html

从Excel读取数据,然后分析相似的数据,多线程处理(多线程比较相似的字符串,统计出相似的数量及字符串)...相关推荐

  1. 数据探索(数据清洗)①—数据质量分析(对数据中的缺失值、异常值和一致性进行分析)

    Python介绍. Unix & Linux & Window & Mac 平台安装更新 Python3 及VSCode下Python环境配置配置 python基础知识及数据分 ...

  2. 如何通过大数据技术分析舆情信息数据的方法

    对于不了解舆情大数据的,可能不太清楚舆情大数据是什么意思?甚至可能不知道大数据舆情监测要怎么做?而对于还没运用大数据技术,还在用传统的人工的方式监测舆情的,会有大数据舆情监测如何快速高效做好之类的疑问 ...

  3. 加米谷大数据深度分析:大数据或将消亡?痛点在哪里?

    全世界都知道大数据是怎么回事:埃森哲公司的研究发现,79%的企业高管表示,不采用大数据的公司将失去市场实力,可能面临倒闭.大数据被广泛视为所有连接到互联网的组织的生命线.此外,89%的受访者认为,大数 ...

  4. python数据爬取及数据可视化分析

    电影网站数据分析及可视化研究 本博客是一篇集数据爬取,存储为excel表格,将数据可视化为一体的博文,数据爬取采用request等方法,数据可视化会使用图表进行展示,有改进的地方还请大家多多指教. 目 ...

  5. 简述oracle的主要数据库对象,Oracle数据库数据对象分析

    Oracle数据库数据对象分析 Oracle数据库数据对象中最基本的是表和视图,其他还有约束.序列.函数.存储过程.包.触发器等.对数据库的操作可以基本归结为对数据对象的操作,理解和掌握Oracle数 ...

  6. 医疗数据治理——构建高质量医疗大数据智能分析数据基础

    医疗数据治理--构建高质量医疗大数据智能分析数据基础 阮彤,邱加辉,张知行,叶琪 华东理工大学计算机科学与技术系,上海 200237   摘要:以专病真实世界研究为背景,分析了医疗数据治理和数据可用性 ...

  7. SpreadJS 纯前端表格控件应用案例:金融业数据智能分析平台

    由北京海创研发的金融业数据智能分析平台,通过嵌入 SpreadJS,实现了基于Web的数据采集.自助式报表设计与浏览.灵活查询.自主分析和数据预测等功能,简洁.易用,有效解决了用户数据填报.查询和分析 ...

  8. Kaggle Lending Club Loan Data数据可视化分析与不良贷款预测

    文章目录 数据集介绍 数据可视化分析前的数据预处理 引入包和数据集 对特征缺失值的处理 保存处理好的数据集 数据可视化分析 申请贷款金额和实际贷款金额的数据分布 每年贷款笔数直方图与每年贷款总金额直方 ...

  9. 【php毕业设计】基于php+mysql+apache的网络数据包分析工具设计与实现(毕业论文+程序源码)——网络数据包分析工具

    基于php+mysql+apache的网络数据包分析工具设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于php+mysql+apache的网络数据包分析工具设计与实现,文章末尾附有本毕业设 ...

最新文章

  1. Ubuntu 16.04 安装anaconda3详细教程(从下载源到测试成功)
  2. Devexpress Xtraform 资源文件 汉化
  3. sklearn分类模型
  4. 如何在servlet刚启动时候获取服务器根目录?
  5. mysql编译安装root密码_MySQL 5.7.11编译安装以及修改root密码小结
  6. 看图说cnblogs-强大的SEO功能【有实例】
  7. sencha touch 在安卓中横屏、竖屏切换 应用崩溃问题
  8. Module not found: Error: Can‘t resolve ‘querystring‘ in
  9. 17个品牌,113款5G手机,你选哪款?
  10. idea一键导包快捷键_十三肝了2晚的《IDEA操作手册-终极秘籍》终于来了...
  11. Double 中的 NAN与INFINITY
  12. python需要编译_Python编译安装
  13. 开发监控云组态软件的组成
  14. python实现视频转图片
  15. 【李沐精读GNN论文总结】A Gentle Introduction to Graph Neural Networks
  16. [转]《财富》推荐的75本必读书 !!推荐看看!受益匪浅
  17. mysql存储视频_特殊格式文件(视频、声音等) 在数据库中的存储方式
  18. 小甲鱼python入门笔记(一)(全)
  19. [Android]Android P(9) WIFI学习笔记 - HAL (1)
  20. 不要让Microsoft edge 打开IE浏览器的设置(兼容性问题)

热门文章

  1. 重新上手c语言的一些坑
  2. ThinkPHP利用数据库字段做栏目的无限分类
  3. print($arr,true)的参数true表示将$arr的值返会,而不是打印
  4. Solr的学习使用之(三)IKAnalyzer中文分词器的配置
  5. 滤镜应用——制作车辆行驶效果
  6. ASP.NET(C#)获取客户端的网卡MAC代码
  7. Scikit-Learn 新版本发布!一行代码秒升级
  8. 参数少一半、速度快3倍:最新目标检测核心架构来了
  9. mysql内连接和交叉连接_MySQL中的内连接、外连接、交叉连接
  10. VS2013下使用cjson