公司有个需求,就是需要提供给echart词云图的数据,放在以前我们的数据来源都是从产品那直接要,产品也是跑的别的接口,那怎么行呢,当然有自己的一套可以随便搞了,那么操作来了

Java

package cn.iocoder.yudao.module.nlp.util;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;/*** @author: hyj* @createDate: 2023/04/26* @description: 词频提取 json(给词云图用)*/
@Component
public class WordFrequencyUtil {private static final WordFrequencyUtil staticInstance = new WordFrequencyUtil();@Value("${python.path}")private String path;//    private String path = "E:/LanZhou/manage_api/nlp/nlp-biz/src/main/resources/static/python/";/*** @param content: 文本* @return: 词云图json对象的string*/public static String extraction(String content) {String result;try {result = RunPyUtils.runCmd3(staticInstance.path + "wordFrequency.py", content, staticInstance.path);} catch (Exception e) {result = "error";}return result;}/*** 测试的时候把什么注解path换一下*/public static void main(String[] args) {String content = "这几天,法国、西方乃至中国的部分媒体,围绕着中国驻法国大使卢沙野在法国LCI电视台专题节目中所阐述的一些观点展开了激烈辩论。支持者为卢大使鼓掌,认为我们应该勇于在国际舞台上应对挑战发声,但也有一些观点认为外媒向来对中国不怀好意,我们在和他们打交道时不能顺着人家的“坑”跳。\n" +"因为我在法国担任常驻记者的时候,就经常应邀参加法国电视台、电台的辩论节目,因此对孤身一人、舌战群魔的艰难处境深有体会。我非常深切地感受到,尽管我们明知道其中会有很多陷阱、阴谋、困难,但我们也一定要敢于、勇于、善于参与这类活动;因为只有跻身其中、仗义直言,才有可能有朝一日打破这类陷阱,将我们的话语权真正地夺回来,把我们的声音真正地传播出去,传向全世界。\n" +"所以,我对卢沙野大使勇于应邀前往法国电视台发声、在明显充满敌意的环境中敢于发声,执百分之百支持的态度!我要高呼:Bravo!Monsieurl'Ambassadeur!(棒极了!大使先生!)\n" +"西方媒体与我们中国媒体在这类电视辩论节目中,从目的、形式到效果,可以说都是南辕北辙、截然相反的。我曾担任过中国中央电视台法语频道专题节目《On ne vous dit pas tout》的主持人;也在福建省电视台东南卫视《中国正在说》专题节目中担任主持人。\n" +"我在法国时,也应邀参加过法国主流电视台“LCI”“France5”、国家电视台“法兰西电视二台”,24小时连续新闻台“BFM TV”“CNEWS”、以及法国对外电视台“France 24”等各大电视台的辩论节目。我甚至成为法国国家“世界5台(TV5 Monde)”的常邀嘉宾,非常有规律地参加其电视辩论节目。因此我对双方新闻节目、特别是电视辩论节目的制作过程、方式方法,以及从手段到目的等各个环节都非常了解。\n" +"仅就新闻和辩论节目的目的而言,中法媒体就是不一样的。\n" +"我在中央电视台法语频道担任主持人时,我的节目经常邀请法国人来参加辩论。我们的新闻出发点是非常明确的,那就是阐述事实、表明观点、消除误会、增进彼此的了解和理解。\n" +"以我采访阿尔斯通前高管、《美国陷阱》一书的作者皮耶鲁齐(Frédéric Pierucci)为例。我们采访他的目的,一是要他本人亲自来阐述他在美国的遭遇;二是介绍他的《美国陷阱》中文版;三是表明我们对他的正义事业的支持。在采访前,我就把采访提纲完整地发给他,让他能够事先有充分的准备;而我在整个采访过程中基本就是按提纲上的问题来询问他。当然,当他的回答能够给我新的提问动机时,我也会进一步深入下去。但总体上而言,我们的目的是共同的、一致的。\n" +"皮耶鲁齐在采访结束后与我愉快地交谈时说,我知道中国新闻媒体是非常严肃、认真的,今天果然如此,我几乎是畅所欲言,完全吐露了我想说的一切。当我们从中国观众的角度出发,我们就可以看到,有关皮耶鲁齐的几乎一切经历、遭遇,我们都了解到了。观众也更理解他在《美国陷阱》一书中阐述的观点。对于我和央视而言,如果美国司法当局也想接受我们的采访来解释一下美国为什么要逮捕皮耶鲁齐的话,我们也同样会给他们类似的发言权。这样,中国观众便能够更为客观地了解到了整个事件的来龙去脉。";String result = extraction(content);JSONArray json = JSON.parseArray(result);for (int i = 0; i < json.size(); i++) {JSONObject jb = json.getJSONObject(i);System.out.println(jb);}}@PostConstructpublic void init() {staticInstance.path = path;}}

java直接写的工具,因为这个目前还没让我写接口模式,后续可能需要同事多人调用并且他们搞对外接口,所以我临时这么写测试一下

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;/*** @Description: 调用制定Python方法的工具类* @Date: 2023/2/11* @author: TCZ*/public class RunPyUtils {/*** @param path   python文件路径* @param value1 python脚本参数* @param value2 python脚本参数*/public static String runCmd3(String path, String value1, String value2) throws Exception {String system = System.getProperty("os.name");BufferedReader br = null;try {String[] args = new String[]{system.contains("Windows") ? "python" : "python3", path, value1, value2};//第二个为python脚本所在位置,后面的为所传参数(得是字符串类型)Process proc = Runtime.getRuntime().exec(args);br = new BufferedReader(new InputStreamReader(proc.getInputStream(), system.contains("Windows") ? "gb2312" : "utf-8"));String line;StringBuilder sb = new StringBuilder();while ((line = br.readLine()) != null) {sb.append(line).append("\n");}System.out.println(proc.waitFor() != 0 ? "脚本执行失败" : "脚本执行成功");InputStream errorStream = proc.getErrorStream();BufferedReader error = new BufferedReader(new InputStreamReader(errorStream, "gbk"));String lineError;while ((lineError = error.readLine()) != null) {System.out.println("----------------------------------------------------失败原因为:" + lineError);}error.close();return sb.toString();} finally {if (br != null) {try {br.close();} catch (Exception e) {e.printStackTrace();}}}}}

这个java调用python的方法网上写法都是一样的,不描述了

Python

from collections import Counter
from paddlenlp import Taskflow
import sys# 处理文本提取关键词和词频
# 从java来源接参数
text = sys.argv[1]# 数据清理(分词和去掉停用词)
def clearWord(content):#  分词seg1 = Taskflow("word_segmentation", mode="accurate")seg_list = seg1(content)# 读取停用词with open(sys.argv[2] + 'StopWord.txt', encoding="utf-8") as f:stopwords = f.read()new_text = []# 去掉停用词for w in seg_list:if w not in stopwords:if len(w) > 1:new_text.append(w)return new_text# 数据整理(统计词频)
def statisticalData(text):# 统计每个词的词频counter = Counter(text)# 输出词频最高的15个单词return counter.most_common(100)A = clearWord(text)
B = statisticalData(A)
resultList = []
for item in B:result = {"name": item[0], "value": item[1]}resultList.append(result)
print(resultList)

这里有个非常重要的步骤就是清理停用词,什么是停用词?就是我们文章中什么逗号了句号了,或者是啊、呵、哈这种语气词等等等对于我们要提取词频的词做不到关键性作用的,我们不需要提取,需要把他们清除掉

这里面使用的停用词来源

最全中文停用词表整理(1893个)

新建文件StopWord.txt放入数据

后面再利用python拼接返回数据name-value的json对象数组格式,因为这个格式需要echart的词云图使用

注意,我们python分词利用的paddlenlp包做分词处理,所以在此之前需要安装padllenlp环境和下载分词的模型包,至于怎么下载,只需要用python运行一下分词模型,就会自动下载

paddleNlp安装使用

https://github.com/PaddlePaddle/PaddleNLP

paddleNlp所有功能

https://github.com/PaddlePaddle/PaddleNLP/blob/develop/docs/model_zoo/taskflow.md

测试

Java+Python+Paddle提取长文本文章中词频,用于Echart词云图数据相关推荐

  1. python怎么读取pdf为文本_轻松用Python批量提取PDF文本内容,这个小技巧告诉你!...

    轻松用Python批量提取PDF文本内容,这个小技巧告诉你!-1.jpg (22.73 KB, 下载次数: 0) 2018-9-7 08:33 上传 本文为你展示,如何用Python把许多PDF文件的 ...

  2. VB 提取TextBox 文本框中指定一行字符串

    这是使用EM_GETLINE message来做,比较奇特的是lParam是指向一个字串所在的位置, 但是该字串传入时,前两个Byte要存该字串允许的最大长度. '以下在Form需一个TextBox, ...

  3. PHP开发小技巧①⑥—提取富文本字符串中的文本内容

    综述 富文本在我们平常的项目中应用已经很广泛了,并逐渐发展成了一个行业.最近在项目中遇到需要提取富文本字符串中的文本内容,本篇博文就是记述如何重富文本字符串中提取出文本内容,欢迎大家相互学习. 富文本 ...

  4. 如何提取公众号文章中的音频

    温馨提示:建议收藏本文章,工具地址有更新时方便第一时间知晓. 如何提取公众号文章中的很好听的小哥哥或者小姐姐的音频,这是困扰很多公众号运营者的问题,前几天看到一个很好的工具,可以很方便的提取公众号文章 ...

  5. 如何提取公众号文章中的视频

    温馨提示:建议收藏本文章,工具地址有更新时方便第一时间知晓. 如何提取公众号文章中的视频,这是困扰很多公众号运营者的问题,前几天看到一个很好的工具,可以很方便的提取公众号文章中的视频,分享给大家: 打 ...

  6. Py之wordcloud:python中非常有趣的词云图wordcloud简介、安装、使用方法、案例应用详细攻略

    Py之wordcloud:python中非常有趣的词云图wordcloud简介.安装.使用方法.案例应用详细攻略 目录 wordcloud简介 wordcloud安装 wordcloud使用方法 案例 ...

  7. python中文词云图代码_Python文本处理NLP:分词与词云图

    ​昨晚我们又做了一次技术分享,继续上次技术分享的话题"文本数据的处理".上次,我们分享了文本处理的方方面面的知识点,比较宏观,这次我们就其中的一点"分词"展开. ...

  8. python官网中cloudword在哪_Py之wordcloud:python中非常有趣的词云图wordcloud简介、安装、使用方法...

    Py之wordcloud:python中非常有趣的词云图wordcloud简介.安装.使用方法.案例应用详细攻略 目录 wordcloud简介 构建词云的方法很多, 但是个人觉得python的word ...

  9. python 如何批量提取文件中的字符_如何用Python批量提取PDF文本内容?

    本文为你展示,如何用Python把许多PDF文件的文本内容批量提取出来,并且整理存储到数据框中,以便于后续的数据分析. 问题 最近,读者们在后台的留言,愈发五花八门了. 写了几篇关于自然语言处理的文章 ...

最新文章

  1. UIPickerView隐藏透明条
  2. 设置nginx 防止上传恶意脚本
  3. 【AI初识境】被Hinton,DeepMind和斯坦福嫌弃的池化,到底是什么?
  4. qstring 属于元数据类型吗_元数据,描述“数据”的“数据”
  5. Centos/Red Hat6.8 安装、配置、启动Gitlab (内网环境)心得分享
  6. Java-类加载内存分析
  7. 我10年来的学习和生活
  8. 免责协议怎么写_离婚后房产过户协议怎么写?需要公证吗?
  9. python中的编码和解码_Python中“is”和“==”之间的区别,以及编码和解码,与
  10. 预训练模型的下一步?突破Impossible Triangle
  11. eclipse重定向输入输出到文件
  12. Java数据库编程基本配置
  13. 油猴脚本修改sciencedirect论文下载名
  14. mysql数据库如果从C盘迁移到D盘
  15. android播放音频的格式,android 音频播放_android ios 音频格式_android 播放网络音频...
  16. html 自定义打印模板,如何自定义打印模板
  17. Itextpdf添加页眉页脚页码
  18. 实时系统解决方案 TIBCO Rendezvous — 技术介绍(消息中间件|基于数据库的主动推送)...
  19. 君澜再入宁波打卡孤岛式静谧度假;万达酒店联袂头部漫画APP快看打造国漫展 | 全球旅报...
  20. Possible missing firmware /lib/firmware/rtl_nic/rtl8168fp-3.fw for module r8169

热门文章

  1. 函数wcd_swr_ctrl_add_devices()分析
  2. 《自学是门手艺》Part.1.E.7 找到英文字母数值之和等于100的字母
  3. Android 5.0 以上开机音乐实现
  4. linux 烧写google 平板的Rom
  5. 条件概率与全概率公式
  6. 洛谷P1785 漂亮的绝杀
  7. SecureCRT 7序列号
  8. mysql 主从复制监控脚步
  9. 95华诞之母校安师大
  10. python dir用法_python函数之dir()函数