AI智能搜索

通过网络资源可知有很多种开源方式实现智能搜索,其中hanlp在GitHub中响应居高

参考链接:

https://www.hanlp.com/

Java版:https://github.com/hankcs/HanLP
Python版:https://github.com/hankcs/pyhanlp

https://hanlp.hankcs.com/docs/api/restful_java.html

http://www.hankcs.com/nlp/hanlp.html

https://github.com/hankcs/HanLP/releases

浅谈拙见

Hanlp说明

想要调用hanlp,首先需要有相应jar包,具体下载地址已在参考链接中

其次,hanlp中包含一个配置文件hanlp.properties

如果想进行相似对比,文本推荐等需要hanlp语料库的支持,故还需语料库文件data-for-1.7.5.zip

由于现有需求,需要将jar包转换为dll文件在.net core 文件中引用

转换dll的方法可自行百度,但注意,.net framework 和.net core所需的dll并非是同一种,不然会报错。

稍后我将我转换的dll文件上传,链接后补

https://files.cnblogs.com/files/zwbsoft/hanlp-core-1.8.3.dll.zip?t=1668498093   记得去掉zip后缀

所有准备工作完成,将相当于jvm的文件IKVM.OpenJDK.Core.dll和将jar包解析出来的hanlp-core-1.8.3.dll同时引用到.net core 项目中

具体使用如下,相关使用参考官网文档

本人core程序,实践可行几种方式如下

  1. nlp分词

static void Main(string[] args)

{

Console.WriteLine("Hello World!");

try

{

java.lang.System.getProperties().setProperty("java.class.path", @"E:\\install\\hanlp");

Console.WriteLine(HanLP.segment("你好,欢迎在CSharp中调用HanLP的API! "));}

catch (Exception ex)

{

Console.WriteLine(ex);

}

}

说明一下“E:\\install\\hanlp”需要把jar包和配置文件,及解压后的data语料库文件夹放在同一目录,该方法其实是通过jvm调用java,使得.net core 能够对其进行方法调用

  1. 关键字提取

Console.WriteLine(HanLP.extractKeyword("商品和服务",2));

输出结果

  1. 汉字转拼音

private static void py()

{

string stringpy = "每个青年都应当有远大的抱负";

//var z = HanLP.convertToPinyinString("报复","",true);

//Console.WriteLine(z);

//汉字转拼音搜索

var listpy = HanLP.convertToPinyinList(stringpy);

Console.WriteLine(listpy);

foreach (var item in listpy.toArray())

{

Console.WriteLine(item);

}

var firstpyt = HanLP.convertToPinyinFirstCharString(stringpy, "", true);

Console.WriteLine(firstpyt);

var firstpyf = HanLP.convertToPinyinFirstCharString(stringpy, " ", false);

Console.WriteLine(firstpyf);

//拼音转汉字

String text = "重载不是重任";

java.util.List pinyinList = HanLP.convertToPinyinList(text);

Console.WriteLine("原文,");

foreach (char c in text.ToCharArray())

{

Console.WriteLine("%c,", c);

}

Console.WriteLine();

Console.WriteLine("拼音(数字音调),");

foreach (Pinyin pinyin in pinyinList.toArray())

{

Console.Write("%s,", pinyin);

}

Console.WriteLine();

Console.WriteLine("拼音(符号音调),");

foreach (Pinyin pinyin in pinyinList.toArray())

{

Console.Write("%s,", pinyin.getPinyinWithToneMark());

}

Console.WriteLine();

Console.WriteLine("拼音(无音调),");

foreach (Pinyin pinyin in pinyinList.toArray())

{

Console.WriteLine("%s,", pinyin.getPinyinWithoutTone());

}

Console.WriteLine();

Console.WriteLine("声调,");

foreach (Pinyin pinyin in pinyinList.toArray())

{

Console.Write("%s,", pinyin.getTone());

}

}

  1. 繁简互转

string fttext = "知識沒有盡頭,就像海沒有邊際";

Console.WriteLine(HanLP.convertToSimplifiedChinese(fttext));

效果如下

  1. 文本推荐,耗时最长,如有解决,烦请指教(未成功)

文本推荐原理

假设“你爱我们”和“我们爱你”进行相似度计算,计算机会将每一句话的每个词,根据语料库进行计算,算出词向量值,在通过对每个词向量进行累加就变成了句向量,再将两个计算的句向量值,进行cos余弦计算,最终得出相似匹配度

先贴代码后赘述

public static Vector query(string content)

{

if (content == null || content.Length == 0)

{ Console.WriteLine("-------------------");return null; }

//对句子进行分词,我爱你们--->["我"、"爱"、"你们"]

object z = NotionalTokenizer.segment(content);//

java.util.List termList = NotionalTokenizer.segment(content);

Vector result = new Vector(200);

int n = 0;

//WordVectorModel wordVectorModelss = new WordVectorModel("en-vectors.txt");

WordVectorModel wordVectorModelss = new WordVectorModel("E:\\install\\hanlp\\data\\model\\sogouyuliaoku.txt");

foreach (Term term in termList.toArray())

{

//从word2vec词典中查出这个词的 词向量

Vector vector = wordVectorModelss.vector(term.word);

if (vector == null)

{

//如果这是一个oov词,则直接忽略

continue;

}

++n;

//将 句子分词后的每个词 的词向量 相加

result.addToSelf(vector);

}

if (n == 0)

{

Console.WriteLine("-------------------");

return null;

}

//归一化

result.normalize();

//句子--->分词--->查询词向量--->词向量相加作为"句向量"

Console.WriteLine(result);

return result;

}

/**

* 文档相似度计算

* @param what

* @param with

* @return

*/

public static float similarity(string what, string with)

{

//what 文档的 向量

Vector A = query(what);

if (A == null) return -1f;

//to 文档的 向量

Vector B = query(with);

if (B == null) return -1f;

//计算余弦相似度

return A.cosineForUnitVector(B);

}

其他均可运行,但通过java.Util对其进行获取WordVectorModel wordVectorModelss = new WordVectorModel("E:\\install\\hanlp\\data\\model\\sogouyuliaoku.txt");

指定语料库时,报错,报错信息如图

Unable to cast object of type 'java.util.PropertyResourceBundle' to type 'sun.util.resources.OpenListResourceBundle'.

对其无法追究其根本,故从java中进行测试,能获取到文件,但同样会报错

报错信息如下

查询具体报错是,大致意思是说足彩这种从文本中获取的文字数据无法计算词向量,计算出的值为-1就报异常,但其实应该是0-9之间的区间值。

AI 智能搜索 开源hanlp实现的更多相关文章

  1. AI 智能写情诗、藏头诗

    一.AI 智能情诗.藏头诗展示 最近使用PyTorch的LSTM训练一个写情诗(七言)的模型,可以随机生成情诗.也可以生成藏头情诗. 在特殊的日子用AI生成一首这样的诗,是不是很酷!下面分享下AI 智 ...

  2. 淘宝购物车页面 智能搜索框Ajax异步加载数据

    如果有朋友对本篇文章的一些知识点不了解的话,可以先阅读此篇文章.在这篇文章中,我大概介绍了一下构建淘宝购物车页面需要的基础知识. 这篇文章主要探讨的是智能搜索框Ajax异步加载数据.jQuery的社区 ...

  3. 【百度地图API】如何区分地址解析和智能搜索?

    原文:[百度地图API]如何区分地址解析和智能搜索? 摘要: 很多用户一直无法区分地址解析geocoder和智能搜索localsearch的使用场景.该文章用一个详尽的示例,充分展示了这两个类,共5种 ...

  4. 实现input输入时智能搜索

    // 智能搜索 function oSearchSuggest(searchFuc) { var input = $('#in'); var suggestWrap = $('#gov_search_ ...

  5. 用人工智能学习,凡亿推出PCB问题解答智能搜索机器人:pcb助手

    对于学习者,你是不是经常遇到这样的问题:在我们狠狠下定决心学习PCB技术的时候,我们常常遇到很多大大小小的问题,遗憾的是身边没有一个能及时给自己解答问题的高手指点,通过论坛.群等方式询问可能半天也得不 ...

  6. AI智能外呼机器人网络拓扑结构笔记

    最近开发了一套AI智能外呼机器人系统,系统主要有3部分组成:web管理平台:呼叫机器人:SIP软交换.具体网络拓扑结构如下图: 三部分主要功能如下: 1.web管理平台:话术管理.任务管理.线路管理. ...

  7. 用电销机器人让电销企业迈入AI智能时代

    2019年是AI智能快速发展的一年,有非常多的企业已经用AI智能代替原有的传统员工做重复性高的工作,就拿销售行业来说,为了让电销员工提升工作效率,拥有更多的成单,大部分有电销岗位的公司都会把重复率较高 ...

  8. 玩转百度地图API(地图,坐标,标记,添加控件,2D图,混合图,智能搜索,地址解析器,信息窗口)

    1.注册得到appkey 2.直接上代码 <!DOCTYPE html> <html> <head> <meta http-equiv="Conte ...

  9. AI智能皮肤测试仪助力美业数字化营销 实现门店与用户双赢局面

    当皮肤遇到AI智能,会有怎么样的火花呢?随着生活水平的提升,人们对肌肤保养护理的需求也越来越高,人要美,皮肤养护也要更精准,数字化必将成为美业发展的新契机.新机遇下肌肤管家SkinRun为美业客户提供 ...

  10. 三分钟玩转微软AI量化投资开源库QLib

    更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 微软QLib简介 微软亚洲研究院发布了 AI 量化投资开源平台"微矿 Qlib".Q ...

随机推荐

  1. function的length,就是第一个具有默认值之前的参数个数。

    一个拥有 length 属性和若干索引属性的对象就可以被称为类数组对象,类数组对象和数组类似,但是不能调用数组的方法.常见的类数组对象有 arguments 和 DOM 方法的返回结果,还有一个函数也 ...

  2. VMvare虚拟机的安装及新建虚拟机(一)

    a:hover { color: rgba(255, 102, 0, 1) } 一.VMvare虚拟机的安装 1.首先双击--你下载的安装包,这里我分享百度云盘,供大家下载:http://pan.ba ...

  3. 蓝牙mesh组网实践(厂商透传模型介绍)

    目录 CH582的官方EVT中,除了代理节点例程和天猫精灵例程外都提供了厂商定义的透传模型. 模型位于蓝牙mesh网络协议中的最上层,负责标准化用户应用场景的实例,比如说开关模型.亮度模型.风速模型. ...

  4. Web服务器1-socket编程

    任务详情 基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用Linux Socket实现: time服务器的客户端服务器,提交程序运行截图 echo服务器的客户端服务器,提交程序运行截图,服务 ...

  5. driver报错

    self.driver = webdriver.Chrome(),突然报错,运行不了 解决办法: 第一步:去检查你以安装的驱动版本,用cmd打开命令提示符:然后用命令:chromedriver 第二步 ...

  6. ENGG1310 Electricity and electronics P1.2 Electronic Communication

    课程内容笔记,自用,不涉及任何 assignment,exam 答案 Notes for self use, not included any assignments or exams 一个 3h 的 ...

  7. Win11 win10系统分区时出现defrag事件怎么解决?

    Win11系统分区时出现defrag事件怎么解决?最近有用户反映这个问题,在重新整理磁盘分区的时候,遇到出现了defrag事件,不知道怎么解决,针对这一问题,本篇带来了详细的Win11系统分区时出现d ...

  8. 安装jdk,tomcat,oracle,PL/SQL的一些问题

    仅限于自己学习使用 新进公司,需要安装jdk1.6,tomcat6, oracle和pl/sql 先是jdk1.6,安装后配置环境变量,都在系统变量里,在cmd,分别打出 java -version, ...

  9. MySQL无法同时执行多条语句解决办法 Dbeaver

    一.场景 说明:在数据库中同时执行多条语句,提示语法错误,如下图: 二.解决办法 第一步:在每条语句最后加上分号(;)表示本条语句结束: 第二步:在数据库连接串上设置 allowMultiQuerie ...

  10. js获取字符串中含有某个字符个数

    得到字符串含有某个字符的个数 /** * 获取字符串中某字符的个数 * @param str 字符串 * @param char char为某字符 * @returns String */ const ...