前景提示

  • 一个朋友参加面试,在成都面的一家,问我如何给一篇没有标题的文章取个标题,是根据内容分析内容,然后获取标题,写个程序让程序分析内容,提炼出一个最适合的标题.
  • 提示:先找出高频率的关键词,然后再根据段首段尾段中的不同权重结合同一个关键词出现的频率来综合判断,最后取一个权重最高,重复最多的词作为标题.

思考

  • 这种题目一般属于大数据人工智能词语分析功能,就根据这个去百度算法.

序号 名称 地址
1 原文参考 NLP算法原文地址
  • 但是,算法用的是python方式实现的,但是,这边都是Java开发,那么Java开发如何实现呢?最简单的方式就是Java调用python脚本,因为Java不擅长做这种计算的工作.

企业级处理方案流程图

  • 企业级也是调用第三方, 因为Java本身很耗内存,如果是几百万,上亿的文档效率会直线下降,所以,就使用Java调用计算能力更好的Python来做.

Python 实现的方式

  • 需要安装好pyhon环境,下载好jieba的包.
序号 名称 地址
1 python环境安装 https://www.cnblogs.com/liuyangfirst/p/16202614.html
  • 进入cmd界面,下载jieba包


pip install jieba
  • 实现代码.

import jieba.analyse
sentence = "人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。人工智能可以对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。但不同的时代、不同的人对这种“复杂工作”的理解是不同的。2017年12月,人工智能入选“2017年度中国媒体十大流行语”。"
keywords = " ".join(jieba.analyse.extract_tags(sentence , topK=20, withWeight=False, allowPOS=()))
print(keywords)
  • 运行代码.

Java实现

导入Maven包

  • 导入这个可以

<dependencies> <dependency>
<groupId>org.python</groupId>
<artifactId>jython-standalone</artifactId>
<!--python版本是2.x还是3.x在这里指定-->
<version>2.7.0</version>
</dependency> </dependencies>

书写代码

  • 代码实现.

public class App {
public static void main(String[] args) {
try { String a = "人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。人工智能可以对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。但不同的时代、不同的人对这种“复杂工作”的理解是不同的。2017年12月,人工智能入选“2017年度中国媒体十大流行语”。"; System.out.println(".................start.................");
//设置命令行传入参数
String[] str = new String[]{"python", "D:/workspace____java/anlysistSentence/src/main/resources/helloworld3.py",a};
Process pr = Runtime.getRuntime().exec(str); BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream(),"gb2312"));
System.out.println();
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
pr.waitFor();
System.out.println();
System.out.println("..............end.................");
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} } }
  • 脚本放在这里.

  • 运行结果.

最终版本

  • 脚本已经不是文章开头的样子了,python脚本.

# coding=utf-8 import jieba.analyse
import sys jieba.setLogLevel(jieba.logging.INFO) if __name__ == '__main__':
for i in range(1, len(sys.argv)):
sentence = sys.argv[i]
keywords = " ".join(jieba.analyse.extract_tags(
sentence,
topK=20,
withWeight=False,
allowPOS=()
))
print(keywords)


public class App {
public static void main(String[] args) {
try { String a = "人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。人工智能可以对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。但不同的时代、不同的人对这种“复杂工作”的理解是不同的。2017年12月,人工智能入选“2017年度中国媒体十大流行语”。"; System.out.println(".................start.................");
//设置命令行传入参数
String[] str = new String[]{"python", "D:/workspace____java/anlysistSentence/src/main/resources/helloworld3.py",a};
System.out.println(str); Process pr = Runtime.getRuntime().exec(str); BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream(),"gb2312"));
System.out.println();
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
pr.waitFor();
System.out.println();
System.out.println("..............end.................");
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} } }

遗留问题:

  • 1.jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())这个方法是写死的,这里的参数,都应该是外部传递进来控制的

  • 2.现在的python脚本只是做print打印分析结果,应该是以return的方式返回结果.

    1. java接收到的python的返回结果如何处理,才能确定最终的标题选取

遇到问题

1.无法解析.


Exception in thread "main" SyntaxError: ("mismatched input ':' expecting NEWLINE", ('<string>', 1, 1, 'D:\\workspace____java\\anlysistSentence\\src\\main\\resources\\helloworld2.py\n'))
  • 无法解析脚本的路径.刚开始采用的是如下的带码方式,但是,这个只能解析简单的语句,导入第三方包和执行脚本都会报错,


 public static void main(String[] args) {

        //首先调用python的解释器 ----------- 只能实现简单的调用,调用的脚本中不能有第三方库
PythonInterpreter interpreter = new PythonInterpreter(); //选择执行的的Python语句
interpreter.exec("print ('hello')"); // 这里就是无法解析
// interpreter.exec("D:\\workspace____java\\anlysistSentence\\src\\main\\resources\\helloworld2.py"); }
  • 最后改用了上述的方法解决了.

2.模块找不到.

  • 报错如下.
  Traceback (most recent call last):
File "D:\workspace____java\anlysistSentence\src\main\resources\helloworld3.py", line 3, in <module>
import jieba.analyse
ModuleNotFoundError: No module named 'jieba'

  • 解决方式就是用pip install jieba.

3.乱码处理

  • 首先要知道python的编码格式是什么.在代码里加入如红框代码,然后,查看输出.('cp936' 就是"gb2312")

  • 因此要去除python脚本里的所有中文,无论注释不注释,在如下代码里加入设置.

BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream(),"gb2312"));

版本

序号 描述 日期
1 第一版 2023-07-16
2 第二版 2023-07-24

继续死命问

  • 往死问:如果段首段尾的权重一样,现在有不同的关键词,重复的次数也一样,那该取哪一个?
  • 往死问:假设已经提出来一堆关键词了,现在我要怎么结合段落的权重来决定取哪一个做为标题.
  • 未完待续 .......

提取关键词作为标题---Java调用Python实现的更多相关文章

  1. Python一键转Jar包,Java调用Python新姿势!

    粉丝朋友们,不知道大家看故事看腻了没(要是没腻可一定留言告诉我^_^),今天这篇文章换换口味,正经的来写写技术文.言归正传,咱们开始吧! 本文结构: 需求背景 进击的Python Java和Pytho ...

  2. Java 调用python说明文档

    Java 调用python说明文档 通过java调用python脚本主要如下三种方式: 1.直接执行python脚本: 2.执行python.py文件: 3.使用Runtime.getRuntime( ...

  3. java调用python程序以及向python程序传递参数

    在做项目的时候,经常会碰到这个问题,主要程序是用java写的,有些功能使用python写的,整个项目需要把java代码和python代码进行整合,在一个项目里面运行,这就涉及到java调用python ...

  4. java调用python脚本并向python脚本传递参数

    1.安装Eclipse 先安装jdk,再安装Eclipse,成功后开始建立py_java项目,在这个项目的存储目录SRC下建立test包,在test包中New-Class,新建MyDemo类,建好完成 ...

  5. java调用python的惨痛史(无法获取环境变量)

    环境:java,was,python2.6,红帽linux,oracle,python用cx_Oracle        事情是这样的,有个需求,需要对数据库进行处理,简单说就是把数据取出来,用pyt ...

  6. (转)java调用python脚本

    这篇博客旨在吐血分享今天遇到的java调用python脚本遇到的坑,折腾了3个多小时终于可以跑通了,代码超级短,但网上的好多资料都是抄来抄去的,很少有能够直接跑通的,尤其是针对你的python文件中用 ...

  7. [Java/Python] java调用python脚本问题记录

    Java调用Python的的两种方式 1.Runtime private static String call_python(String input_argv) { String python_py ...

  8. Runtime.getRuntime().exec()实现Java调用python程序

    使用Runtime.getRuntime().exec()来实现Java调用python,调用代码如下所示: import java.io.BufferedReader; import java.io ...

  9. java调用python的几种用法(看这篇就够了)

    java调用python的几种用法如下: 在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件(推荐 ...

  10. Java调用Python相关问题:指定python环境、传入参数、返回结果

    本篇文章涉及到的操作均在Windows系统下进行,Java调用python在原理上不难,但是可能在实际应用中会有各种各样的需求,网上其他的资料很不全,所以又总结了这篇文章,以供参考. 一.指定pyth ...

随机推荐

  1. 修复HTTP动词篡改导致的认证旁路问题的方法

    本文于2016年4月完成,发布在个人博客网站上. 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来. 诡异的问题 分析AppScan扫描报告的时候,发现报告里提示" ...

  2. Maven——阿里云镜像

    <mirror> <id>nexus-aliyun</id> <mirrorOf>*,!jeecg,!jeecg-snapshots</mirro ...

  3. 虚实相生,构建数智生活|HMS Core. Sparkle应用创新分论坛报名启动

    XR技术的发展,为用户带来了全新的体验模式.那么,作为支撑XR发展主要学科之一的图形学,将迎来哪些发展新机遇?移动应用开发者,该如何拥抱3D数字化转型? 7月15日,HDD·HMS Core. Spa ...

  4. Qt 实现涂鸦板三:实现鼠标绘制矩形

    .h 文件 #pragma once #include <QtWidgets/QWidget> #include "ui_xuexi.h" #include " ...

  5. 动态库 DLL 封装五:dll中弹出一个dialog窗口

    操作步骤: 1.在dll项目中,点击 资源,新建一个 dialog 2.cpp文件 CDialog dlg(IDD_STA); // 显示窗口 dlg.Create(IDD_STA, 0); dlg. ...

  6. pyqt5报错:qt.qpa.plugin: Could not find the Qt platform plugin "windows" in "" This ap

    环境: win10 Python 3.7.5 vs code 解决方法: 新建环境变量,然后重启  vs code 就可以了 QT_QPA_PLATFORM_PLUGIN_PATH C:\Users\ ...

  7. 56.5K star的gpt4free开源项目到底真的假的?

    前言 这个项目是我很早之前就star,只是当时觉得有点天真,怎么会有那么多免费的好事情呢?然后就在清明节前夕,OpenAI 开放了免登录即可使用GPT-3.5的模型,那么势必很快就有了免费使用GPT- ...

  8. cv.calibrateCamera

    相机造成的失真类型 如何找到相机的内在和外在特性 如何基于这些特性来消除图像失真 基础 一些针孔相机会对图像造成严重失真.两种主要的畸变是径向畸变和切向畸变. 径向变形会使直线看起来是弯曲的.点离图像 ...

  9. mysql 必知必会整理—子查询与连接表[八]

    前言 简单介绍一下子查询与连接表. 正文 什么是子查询呢? 列出订购物品TNT2的所有客户. select cust_id from orders where order_num IN (SELECT ...

  10. sql 语句系列(计算一个季度的开始日期和结束日期)[八百章之第二十三章]

    前言 很多时候,我们进行数据库查询的时候,查询一个季度的财务报表的时候. 比如说查询2020年第一季度的单子,可能传入后台的就是20201,表示的就是20201第一季度,这时候我们要转换为日期. se ...