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> ...
随机推荐
- 地图的标注Marker
(1)在point处添加标注:var marker = new BMap.Marker(point); (2)添加覆盖物:map.addOverlay(marker); (3)激活标注的拖拽功能:ma ...
- Future类型的连锁的运用
Future类型的连锁的运用: 洗脸 刷牙 吃早饭 看电视 出门 串行: import scala.concurrent.{Await, Future} import scala.util.{Fail ...
- 在Xamarin开发中,UWP环境下无法进入断点调试standard库的问题解决方案
环境如下 选择的代码共享方案为standard模式 再多平台依赖注入的时候,断点一直提示没有加载文档. 进入到目标平台项目Debug文件夹下,查看.发现standard库引用进来后,对应的*.pdb文 ...
- JAVAWEB第一节课的课后思考
第一开发一个网站需要的一些技术 至少熟悉一种建站程序.(html,javascript等等)对空间和域名的知识有一定的了解.有一些美工基础(例如ps设计等等).对编程有一些了解.HTML的代码知识基本 ...
- Linux下聊天和文件传输软件
全平台聊天软件 米聊 官网地址: http://www.miliao.com 潮信 官网地址: https://www.chaoxin.com
- 【Python秘籍】ASCII码与字符的转换
如何在python中显示ASCII码呢?其实你只需要记住两个函数即可:ord()和 chr(),这两个函数都是python内置的函数,不需要引入任何的包,直接就可以使用. 一.显示ASCII码 显示A ...
- 【Autofac打标签模式】Aspect拦截器
[ Autofac打标签模式]开源DI框架扩展地址: https://github.com/yuzd/Autofac.Annotation/wiki 前提条件 自己new一个对象不能实现拦截器功能,必 ...
- Jedis运用scan删除正则匹配的key
jedis运用scan删除正则匹配的key 我们都知道用keys *进行查询key的时候会进行堵塞,导致redis整体不可用,而使用scan命令则不会. RedisServiceImpl中sca ...
- 通过一个生活中的案例场景,揭开并发包底层AQS的神秘面纱
本文导读 生活中案例场景介绍 联想到 AQS 到底是什么 AQS 的设计初衷 揭秘 AQS 底层实现 最后的总结 当你在学习某一个技能的时候,是否曾有过这样的感觉,就是同一个技能点学完了之后,过了一段 ...
- 百万年薪python之路 -- 内置函数二 -- 最常用的内置函数
1.内置函数 1.1 匿名函数 匿名函数,顾名思义就是没有名字的函数(其实是有名字的,就叫lambda),那么什么函数没有名字呢?这个就是我们以后面试或者工作中经常用匿名函数 lambda,也叫一句话 ...