java 城市分词_[java]分词&词云

博客内容涉及使用Java的KUMO库进行分词和词频统计,以生成词云。前端展示使用了vue-wordcloud。示例代码展示了如何结合文章摘要和关键词生成词云,并提供了后端处理和前端展示的代码片段。
摘要由CSDN通过智能技术生成

[toc]作业中需要用到词云,就尝试了下,还是比较简单的

分词和词频统计采用了KUMO,前端显示采用vue-wordcloud

maven配置

com.kennycason

kumo-core

1.13

com.kennycason

kumo-tokenizers

1.12

样例

该样例是根据论文的摘要和关键字生成词云

后端部分

package com.likole.aihw.utils;

import com.kennycason.kumo.WordFrequency;

import com.kennycason.kumo.nlp.FrequencyAnalyzer;

import com.kennycason.kumo.nlp.tokenizer.WhiteSpaceWordTokenizer;

import java.util.ArrayList;

import java.util.List;

/**

* @author likole

*/

public class WordCloudUtils {

public static List frequence(String abstractt, List keywords){

if(keywords==null){

keywords=new ArrayList<>();

}

FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer();

frequencyAnalyzer.setWordFrequenciesToReturn(600);

frequencyAnalyzer.setMinWordLength(4);

frequencyAnalyzer.setWordTokenizer(new WhiteSpaceWordTokenizer());

List lists=new ArrayList<>();

lists.add(abstractt);

for (int i=0;i

{

for (int j=0;j

lists.add(keywords.get(i));

}

}

return frequencyAnalyzer.load(lists);

}

}

@At("/detail")

public Object getDetail(@Param("wos") String wos) {

NutMap re = new NutMap();

Article article = dao.fetch(Article.class, wos);

//author names

if (article.getAuthorFullname() == null) {

article.setAuthorFullNames(new ArrayList());

} else {

article.setAuthorFullNames((List) Json.fromJson(article.getAuthorFullname()));

}

//keywords

if (article.getKeyword() == null) {

article.setKeywords(new ArrayList());

} else {

article.setKeywords((List) Json.fromJson(article.getKeyword()));

}

//wordcloud

List wordFrequencies= WordCloudUtils.frequence(article.getAbstractt(),article.getKeywords());

List wordCloudDtos=new ArrayList<>();

for (WordFrequency wordFrequency:wordFrequencies){

WordCloudDto wordCloudDto=new WordCloudDto();

wordCloudDto.setName(wordFrequency.getWord());

wordCloudDto.setValue(wordFrequency.getFrequency());

wordCloudDtos.add(wordCloudDto);

}

return re.setv("code", 0).setv("article", article).setv("wc",wordCloudDtos);

}

package com.likole.aihw.dto;

/**

* @author likole

*/

public class WordCloudDto {

private String name;

private int value;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getValue() {

return value;

}

public void setValue(int value) {

this.value = value;

}

}

前端部分

template部分

:data="wc"

nameKey="name"

valueKey="value"

:showTooltip="true">

js部分

import wordcloud from 'vue-wordcloud ,components中添加wordcloud ,data中定义wc:[]

let self = this

//获取文章的基本信息和词云信息

axios.get('http://183.175.12.164:8082/article/detail?wos=' + wos)

.then(function (response) {

console.log(response)

self.article = response.data.article

self.wc = response.data.wc

})

.catch(function (error) {

console.log(error)

})

直接生成词云图片样例

package preprocess.spider.article;

import com.kennycason.kumo.CollisionMode;

import com.kennycason.kumo.WordFrequency;

import com.kennycason.kumo.bg.CircleBackground;

import com.kennycason.kumo.font.KumoFont;

import com.kennycason.kumo.font.scale.SqrtFontScalar;

import com.kennycason.kumo.nlp.FrequencyAnalyzer;

import com.kennycason.kumo.palette.LinearGradientColorPalette;

import java.awt.*;

import java.util.ArrayList;

import java.util.List;

/**

* @author likole

*/

public class WordCloud {

public static void generate(String wos,String abstractt){

List keywords=new ArrayList<>();

generate(wos,abstractt,keywords);

}

public static void generate(String wos,String abstractt, List keywords){

FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer();

frequencyAnalyzer.setWordFrequenciesToReturn(300);

frequencyAnalyzer.setMinWordLength(4);

//frequencyAnalyzer.setWordTokenizer(new WhiteSpaceWordTokenizer());

List lists=new ArrayList<>();

lists.add(abstractt);

for (int i=0;i

{

for (int j=0;j

lists.add(keywords.get(i));

}

}

final List wordFrequencyList = frequencyAnalyzer.load(lists);

Dimension dimension = new Dimension(600,600);

com.kennycason.kumo.WordCloud wordCloud = new com.kennycason.kumo.WordCloud(dimension, CollisionMode.PIXEL_PERFECT);

wordCloud.setPadding(2);

java.awt.Font font = new java.awt.Font("STSong-Light", 2, 20);

wordCloud.setColorPalette(new LinearGradientColorPalette(Color.RED, Color.BLUE, Color.GREEN, 30, 30));

wordCloud.setKumoFont(new KumoFont(font));

wordCloud.setBackgroundColor(new Color(255,255,255));

wordCloud.setBackground(new CircleBackground(255));

wordCloud.setFontScalar(new SqrtFontScalar(12, 45));

wordCloud.build(wordFrequencyList);

wordCloud.writeToFile("src/main/webapp/static/wordcloud/"+wos+".png");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值