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> ...
随机推荐
- yum install php-gd 安装php gd库报错Error: php56w-common conflicts with php-common-5.3.3-48.el6_8.x86_64 大
yum install php-gd安装php gd库报错Error: php56w-common conflicts with php-common-5.3.3-48.el6_8.x86_64大概的 ...
- opencv之为图像添加边界
我们经常会有对图像边缘做扩展的需求.比如 希望卷积后得到的矩阵大小不变 希望改变图像大小,但是不改变宽高比 opencv实现 opencv中使用copyMakeBorder()来完成这一功能 api ...
- 自动下载zar配置管理
maven 下载: https://maven.apache.org/ 官网 download 下载:Binary zip archive apache-maven-3.6.2-bin.zip 免安装 ...
- 【maven的使用】2使用maven与pom文件
一.使用maven:首先需要知道的是,在我们开发人员中有一句话叫做:约定优于配置.比如,如果我们写代码有多种可选方案:硬编码形式:obj.setPath("d:/xxxx") .配 ...
- javascript DOM节点
获得子节点方式: 1.将文本内容也当成节点 childNodes firstChild lastChild 2.获得标签为内容的节点 children firstElementChild lastEl ...
- Cutting Sticks UVA - 10003
题文: 见:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...
- python程序编译成exe文件
最近越来越喜欢使用python写工具.使用的时候,发现程序内部成员python安装目录常常不同,如果用bat双击执行,常常需要修改从svn上down下来的bat文件中python.exe的路径.而给策 ...
- 像智能手机一样管理云端应用:阿里云联合微软全球首发开放应用模型(OAM)
2019 年 10 月 17 日上午 9 点 15 分,阿里巴巴合伙人.阿里云智能基础产品事业部总经理蒋江伟在 QCon 上海<基于云架构的研发模式演进>主题演讲中,正式宣布: " ...
- Jenkins基本使用
Jenkins安装 安装基本上属于傻瓜式安装了 选择安装路径不要包含中文 点击install 找到默认密码 选择插件安装 点击无,然后再选择安装 创建一个管理员 Jenkins配置任务 新建工程 输入 ...
- JDBC-第1篇-基础
话不多说,直接开撸代码. 1.首先自己的环境使用的是maven项目+idea工具+mysql8.0.18 (使用maven项目的好处就是方便,不用手动导入相关的驱动包,在pom.xml配置即可) 2. ...