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> ...
随机推荐
- 手把手教你如何在Windows下allure与jenkins的集成生成让你一见钟情的测试报告 - 03(非常详细,非常实用)
简介 好了,国庆假期结束,开始搬砖.为什么要把allure和jenkins集成了?原因是集成以后,我们就可以直接查看allure的结果,不需要重复输入命令.重复使用浏览器打开文件来查看allure的结 ...
- 集合线性表--List之ArrayList
集合操作——线性表 List: add().remove().subList().list.toArray().array.asList(). List排序: Collections.sort(li ...
- 你所不知道的TIME_WAIT和CLOSE_WAIT
你遇到过TIME_WAIT的问题吗? 我相信很多都遇到过这个问题.一旦有用户在喊:网络变慢了.第一件事情就是,netstat -a | grep TIME_WAIT | wc -l 一下.哎呀妈呀,几 ...
- 【WPF】EntityframeworkCore NLog出力设置
最近在用EFcore,由于不熟悉,经常出现一些异常都不知道如何排查,只能把EFcore的执行记录打印出来调查.确实简化了很多问题的调查. 官网提供了Asp.net Core与.net core 应用的 ...
- Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用
多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程. 一.ThreadPoolTaskExecutor ...
- Linux简单检查服务运行脚本
脚本内容如下: 此脚本含义:检查服务是否运行,在运行则记录日志,不在运行则记录日志并将服务启动 #!/bin/bash svrnm="tomcat" //设置服务名称time=`d ...
- java IO、NIO、AIO详解
概述 在我们学习Java的IO流之前,我们都要了解几个关键词 同步与异步(synchronous/asynchronous):同步是一种可靠的有序运行机制,当我们进行同步操作时,后续的任务是等待当前调 ...
- HashMap的结构以及核心源码分析
摘要 对于Java开发人员来说,能够熟练地掌握java的集合类是必须的,本节想要跟大家共同学习一下JDK1.8中HashMap的底层实现与源码分析.HashMap是开发中使用频率最高的用于映射(键值对 ...
- python程序调用C/C++代码
这篇用来记录在些模拟Canoe生成CAN数据桢工具时遇到的问题, 生成CAN数据桢,主要分为两个关注点: 1.如何从can信号名获取到can信号的ID长度以及信号的起始位,并将信号值按照一定的规则填写 ...
- js通过方法返回对象的注意点
问题:js通过方法返回一个字面量对象和返回一个提前已经定义好的字面量对象有区别吗? 答案:有 我们先来看看第一种情况,fun1方法返回一个提前没定义的字面量对象,然后通过调用方法返回三个对象,分别是o ...