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> ...
随机推荐
- 使用.NET Core创建Windows服务(二) - 使用Topshelf方式
原文:Creating Windows Services In .NET Core – Part 2 – The "Topshelf" Way 作者:Dotnet Core Tut ...
- ng form组件(表单)
tip: 数据的双向绑定(数据的双向绑定只是针对表单) 实现数据的双向绑定需要在app_module.ts(根模块)中进行注册一些东西 import {FormsModule} from '@angu ...
- Dockerfile 构建镜像
一.使用dockerfile构建镜像 基本结构: a.设置基础镜像 当前镜像继承于的基础镜像 FROM centos:latest b.设置维护者信息 没有固定格式 c.设置需要添加到容器中的文件 ...
- Nature Methods | 新软件SAVER-X可对单细胞转录组学数据进行有效降噪
图片来源(Nature Methods) 摘要 单细胞转 ...
- 一步步剖析spring bean生命周期
关于spring bean的生命周期,是深入学习spring的基础,也是难点,本篇文章将采用代码+图文结论的方式来阐述spring bean的生命周期,方便大家学习交流. 一 项目结构及源码 1. ...
- @DateTimeFormat注解
@DateTimeFormat在spring-context依赖下,所在包如下 当form表单中出现时间字段需要跟pojo对象中的成员变量进行数据绑定时,springmvc框架中的时间数据无法自动绑定 ...
- 从0开始学FreeRTOS-1
我们知道,(单核)单片机某一时刻只能干一件事,会造成单片机资源的浪费,而且还有可能响应不够及时,所以,在比较庞大的程序或者是要求实时性比较高的情况下,我们可以移植操作系统.因为这种情况下操作系统比裸机 ...
- 拿起键盘就是干:跟我一起徒手开发一套分布式IM系统
1.引言 老读者应该还记得我在去年国庆节前分享过一篇<技术干货:从零开始,教你设计一个百万级的消息推送系统>,虽然我在文中有贴一些伪代码,依然有些朋友希望能直接分享一些可以运行的源码.好吧 ...
- Java编程思想——第17章 容器深入研究 读书笔记(三)
七.队列 排队,先进先出. 除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: ad ...
- 前端知识点总结——jQuery(下)
1. 排队和并发 1.并发: 多个css属性同时变化放在一个animate函数内的多个css属性默认并发变化 2.排队: 多个css属性先后变化对同一个元素,先后调用多个动画API,都是排队执行原理: ...