python3 自己写的一个小算法(比对中文文本相似度)
函数使用说明:
函数的三个参数分别是“匹配语句”,“匹配语料”,“相关度”;
匹配语句,和匹配预料中的语句匹配的语句,必须为字符串;
匹配语料,被匹配语句来匹配的语句列表,必须为列表;
相关度,函数只会输出匹配预料中匹配度大于相关度的的语句;
函数返回类型为列表;
算法原理:从文本内容匹配度与文本顺序匹配度两个维度进行衡量。
a=["早上吃了没",'吃过没','吃了没','刚吃过吗']
b='吃了吗'
ltextmatch(b,a,0.5)
但就从中文来说,本来写这个主要是因为自己和同学再尝试做一个智能聊天机与数据分析可视化机器人,自己是负责聊天这一块。由于中文复杂的语法和歧义,在语句匹配中,或者说是在对话匹配中其实最重要的还是语料库,从理论上来说只要语料库够全,程序要做的只需要匹配就可以了,算法只能是一个锦上添花的东西,毕竟一句话可能就单单因为一个字或者一个符号的不同导致其含义天差地别。
源码:
def ltextmatch(a,b,c):
if isinstance(a,str):
if isinstance(b,list):
if isinstance(c,float)and 0<c<1:
m=[]
for z in b:
z=str(z)
l,k,j,h=0,0,0,0
if len(z)>=len(a):
for x in a:
if x in z:
l+=1
for x in a:
if x in z:
k=z.index(x)
j=a.index(x)
break
if len(z)-k>=len(a)-j:
for x in range(0,len(a)-j):
if z[k+x]==a[j+x]:
h+=1
else:
for x in range(0,len(z)-k):
if z[k+x]==a[j+x]:
h+=1
if (l+h)/len(z)/2>=c:
m.append(z)
else:
for x in z:
if x in a:
l+=1
for x in z:
if x in a:
k=z.index(x)
j=a.index(x)
break
if len(z)-k>=len(a)-j:
for x in range(0,len(a)-j):
if z[k+x]==a[j+x]:
h+=1
else:
for x in range(0,len(z)-k):
if z[k+x]==a[j+x]:
h+=1
if (l+h)/len(a)/2>=c:
m.append(z)
return m
else:
print('相关度必须为浮点型且在0—1之间')
else:
print('匹配语料必须为列表')
else:
print('匹配语句必须为字符串')
python3 自己写的一个小算法(比对中文文本相似度)的更多相关文章
- 用bat写的一个小病毒
最近看了一点bat的知识,具体说是看了一个博客:http://blog.csdn.net/qsyzb/article/details/17364581 用了三天才看完=.=,感觉作者整理整理可以把博客 ...
- 原生JS写了一个小demo,根据输入的数字生成不同背景颜色的小方块儿~
昨天练习写了这个小demo,个人觉得通过设置定位元素left和top的值,来实现换行的功能,这种方法很巧妙~ 另外,如下代码中的随机颜色的获取,还请各位前辈多多指教:需要改进的地方:或者有没有更好的方 ...
- QT写的一个小工具:阿里云MQTT连接参数生成器.
一.工具介绍. 最近在研究MQTT协议联网的一些问题,现在主流的物联网平台都支持MQTT协议. 在做阿里云平台连接测试的时候,连接参数的生成没有好用的工具, 所以就自己写了一个. 这个工具主要用于阿里 ...
- js 利用throw 写的一个小程序
在下边的小程序中比较特殊的是使用isNaN()函数判断一个参数是不是数字, <!DOCTYPE html> <!DOCTYPE html> <html> <h ...
- 每天一个小算法(Shell sort5)
希尔排序的关键在于步长的选取. 希尔排序的复杂度比较复杂,主要跟步长的选择有关,大概是 O(n logn^2),一般认为就是介于 O(n^2) 和 O(n logn) 之间.最好步长比较复杂,一般第一 ...
- 每天一个小算法(insertion sort3)
今天多看看插入排序的理论部分. 先贴几个概念吧: 1.伪代码(英语:pseudocode),又称为虚拟代码,是高层次描述算法的一种方法.它不是一种现实存在的编程语言(已经出现了类似伪代码的语言,参见N ...
- [原创]基于html5新标签canvas写的一个小画板
最近刚学了canvas,写个小应用练习下 源代码 <!DOCTYPE> <html> <head> <meta http-equiv="Conten ...
- 每天一个小算法(Shell Sort3)
希尔算法自己编了一个,循环很多,很不美观,不过运行正确: c语言实现: #include <stdio.h> #include <stdlib.h> #define LEN 2 ...
- canvas写的一个小时钟demo
<!DOCTYPE html> <html> <head> <title>HTML5 Canvas Demo of clock</title> ...
随机推荐
- python 对excel进行截图
工作中需要对excel的单元格区域进行截图,以前是调用vba进行(走了很多弯路,虽然能实现,但比较low),后来逐步发现python的win32com与vba师出同门,很多方法操作都是类似的. 可以对 ...
- SpringBoot 连接kafka ssl 报 CertificateException: No subject alternative names present 异常解决
当使用较新版本SpringBoot时,对应的 kafka-client 版本也比较新,如果使用了 2.x 以上的 kafka-client ,并且配置了 kafka ssl 连接方式时,可能会报如下异 ...
- .Net Core删除ClientApp目录,重新生成报错解决办法
因为在老的项目上做修改,需要删除单独的spa目录,就把ClientApp删掉了.但是重新生成报错,在VS2017界面上也没找到在什么地方配置.最后发现在csproj上里面可以去掉spa的配置 < ...
- 02-15 Logistic回归(鸢尾花分类)
目录 Logistic回归(鸢尾花分类) 一.导入模块 二.获取数据 三.构建决策边界 四.训练模型 4.1 C参数与权重系数的关系 五.可视化 更新.更全的<机器学习>的更新网站,更有p ...
- Adobe PS常用快捷键
ps使用快捷键 新建图层 Ctrl+Shift+N 取消选择区 Ctrl + D 新建标题 Ctrl + N 图片放大 Alt+鼠标滑动 图片位置拖动 空格 + 鼠标拖动 移动图层 ...
- sql获取各种时间格式的方法
),)--月/日/年 ),)--年.月.日 (常用) ),)--日/月/年 ),)--日.月.年 ),)--日-月-年 ),)--日 月 年
- PMP涉及的几个工作系统
PMP涉及的几个工作系统 工作系统作为事业环境因素,提高或限制项目管理的灵活性,并可能对项目结果产生积极或消极影响,包括项目管理系统.项目管理信息系统PMIS.配置管理系统.变更控制系统.合同变更 ...
- 电脑扫描不出u盘的解决办法
现象:u盘已插上但是设备和驱动器里却找不到 解决办法: 首先记下u盘名称,然后 我的电脑-右键-管理-设备管理器,找到u盘,卸载设备后重新插入u盘即可
- 18.Tomcat基本应用
1.JVM基本介绍 JAVA编译型 ---> 编译 C 编译型---> linux --->编译一次 windows --->编译一次 macos ubuntu 跨平台 移值型 ...
- C#发送电子邮件(SMTP)及outlook.com账号之概要
这是关于c#发送电子邮件(SMTP)的技术笔记,以”简报“形式呈现. 因为最后成功通过outlook.com发送了邮件,所以,我觉得还是有必要 记录一下其中的要点. 一.技术核心 .net Frame ...