【Java】文本聚类

前言:

由于接到一个任务,大概是对回复内容的质量进行评估(有点类似于情感分类),由于这种分类,没有定性的指标,只能认为规定 好——坏 之间的几个梯度指标,但由于有些回复的内容过长,人工打标签的时候不方便,我就想着使用 主题抽取模型抽取长文本转化为短文本,再利用 文本聚类 的方法,把相似的文本存放到一起

准备工作

由于需要处理表格数据,这里我用到了java的 poi 框架

安装:

由于我是使用mavan构建的项目,所以直接添加依赖就可以了

org.apache.poi

poi

3.11

org.apache.poi

poi-ooxml

3.11

org.apache.poi

poi-ooxml-schemas

3.11

文本聚类和主题抽取

我直接采用hanlp这个框架中的模型

项目流程

项目流程.png

具体实现

package com.NLP.test;

import com.hankcs.hanlp.HanLP;

import com.hankcs.hanlp.mining.cluster.ClusterAnalyzer;

import org.apache.poi.xssf.usermodel.XSSFCell;

import org.apache.poi.xssf.usermodel.XSSFRow;

import org.apache.poi.xssf.usermodel.XSSFSheet;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.List;

import java.util.Set;

public class TextCluster {

public static void main(String[] args) throws IOException {

//聚类器分析器

ClusterAnalyzer analyzer = new ClusterAnalyzer();

//读入数据

XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream("附件4.xlsx"));

XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);

//

int count = xssfSheet.getLastRowNum();

for(int i = 0;i<=count;i++){

XSSFRow xssfRow = xssfSheet.getRow(i);

XSSFCell xssfCell = xssfRow.createCell(7,5);

XSSFCell cateCell = xssfRow.createCell(8);

cateCell.setCellValue(-1);

if(i!=0){

String text = xssfRow.getCell(5).getStringCellValue();

String id = String.valueOf(xssfRow.getCell(0).getNumericCellValue());

if(text.length()<50){

}else {

List results = HanLP.extractSummary(text, 2);

String tempTest="";

for(String item:results){

tempTest+=item+",";

}

text = tempTest;

}

xssfCell.setCellValue(text);

analyzer.addDocument(id,text);

}else {

xssfCell.setCellValue("shortText");

}

}

System.out.println(analyzer.repeatedBisection(1.0));

int categorynum = 0;

for(Set item:analyzer.repeatedBisection(1.0)){

for(String uid:item){

for(int i = 1;i<=count;i++){

XSSFRow xssfRow = xssfSheet.getRow(i);

String id = String.valueOf(xssfRow.getCell(0).getNumericCellValue());

if(id.equals(uid)){

xssfRow.getCell(8).setCellValue(categorynum);

}

}

}

categorynum++;

}

//生成数据

xssfWorkbook.write(new FileOutputStream("附件4_转换.xlsx"));

}

}

文本聚类 java_【Java】文本聚类相关推荐

  1. 凝聚式层次聚类 java_凝聚法层次聚类之ward linkage method

    凝聚法分层聚类中有一堆方法可以用来算两点(pair)之间的距离:欧式,欧式平方,manhattan等,还有一堆方法可以算类(cluster)与类之间的距离,什么single-linkage.compl ...

  2. java为文本框添加背景颜色,文本框添加背景图片,文本框背景图片,文本框添加水印[Java...

    文本框添加背景图片,文本框背景图片,文本框添加水印[Java 文本框添加水印 [Java]代码public class WatermarkTextField extends JTextField { ...

  3. 文本聚类算法Java实现

    蛙蛙推荐:蛙蛙教你文本聚类 摘要:文本聚类是搜索引擎和语义web的基本技术,这次本蛙和大家一起学习一下简单的文本聚类算法,可能不能直接用于实际应用中,但对于想学搜索技术的初学者还是有一定入门作用的.这 ...

  4. 基于聚类算法的文本热点问题挖掘算例实现(文本聚类)

    在现实生活中,有时候我们可能得到一大堆无标签文本,这时候可能需要对文本进行聚类挖掘,找出热点问题是什么. 文本聚类 第一步:数据读取 import pandas as pd import re imp ...

  5. 基于Kmeans算法的文档聚类(包含Java代码及数据格式)

    本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流. 未经本人允许禁止转载. 介绍 给定多篇文档,如何对文档进行聚类.本博客使用的是k ...

  6. java文本输入输出小结

    Java 文本输入主要包含两种方法:FileRead -- 按字符读入,InputSreamReader -- 按行输入. java 文本输出也包含两种方法:FileWriter 和 OuputStr ...

  7. java计算两个文本框的值,java 文本框自动获取另外两个文本框的值的乘积

    java 文本框自动获取另外两个文本框的值的乘积 关注:282  答案:2  手机版 解决时间 2021-02-25 21:59 提问者壹玍徴戰何亽陪 2021-02-25 13:53 在panel里 ...

  8. win10系统怎么写java_win10系统制作java文本的操作方法

    很多小伙伴都遇到过对 具体方法如下: 1.首先我们点击电脑桌面左下角的菜单; 2.接着在弹出的菜单栏里,我们点击最下方的[所有应用]; 3.然后我们会看到更为详细的菜单栏,接着我们通过 4.接下来点开 ...

  9. java 复制文本内容_基于java文本复制的7种方式总结

    如下所示: package copy; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ...

  10. Java实验8 T2.编程包含一个文本框和一个文本区域

    编程包含一个文本框和一个文本区域,文本框内容改变时,将文本框中的内容显示在文本区域中:在文本框中按回车键时,清空文本区域的内容. package test8;import javax.swing.ev ...

最新文章

  1. 万字超强图文讲解 AQS 以及 ReentrantLock 应用
  2. jvm性能调优 - 07线上应用部署JVM实战_栈内存与永久代预估与设置
  3. 恢复mysql数据库详细图解_binlog恢复mysql数据库超详细步骤
  4. jquery json学习
  5. 【CodeForces - 570A】Elections(模拟,水题)
  6. 俯视排版类型海报|没思路?试试可临摹PSD分层模板设计吧!
  7. 【优化算法】粒子群优化算法(PSO)【含Matlab源码 1073期】
  8. TransCAD教程 | 北航综合交通试验课程内容
  9. mac编译linux开源软件,Mac 端超好用的免费开源软件,我推荐这几款
  10. oracle数据库sql语句插入时间信息
  11. 【老九学堂】【Java】详解常见的53个关键字
  12. 分享:你必须知道的H5加速器九大常识!
  13. python数据分析与挖掘(二十七)--- Pandas量化--股票基础知识
  14. 【Chrome】从Google官网下载 Google Chrome 离线安装包
  15. vivo手机解析包错误解决方式
  16. 【C语言刷题】将一个十进制数字转化为二进制数字
  17. MacOS上高效管理SSH服务器-Core Shell
  18. JS树结构操作:查找、遍历、筛选、树结构和列表结构相互转换
  19. 韩国梨花女子大学计算机类,韩国留学梨花女子大学院系设置详解
  20. 树的概念:层次、高度、深度、宽度

热门文章

  1. 小程序生态化,Hybrid App要崛起了?
  2. 【VS2015】 C++实现硬件ID的查询
  3. java如何生成随机数
  4. 无线充U型超声波电动牙刷方案开发
  5. 自媒体入门如何制作出优质视频,有这5款软件就够了
  6. Android签名概要总结——对称加密/非对称加密、数字签名、公钥证书、ca认证机构、安卓app签名
  7. 计算机毕设(附源码)JAVA-SSM基于JAVA宠物店管理系统
  8. 动态 Echarts 温湿度示意图 背景可以随温度变化
  9. html(jsp)登录页面
  10. RIDE加载Selenium2Library总是显示红色的解决办法