python通过BF算法实现关键词匹配的方法


Posted in Python onMarch 13, 2015

本文实例讲述了python通过BF算法实现关键词匹配的方法。分享给大家供大家参考。具体实现方法如下:

#!/usr/bin/python

# -*- coding: UTF-8

# filename BF

import time

"""

t="this is a big apple,this is a big apple,this is a big apple,this is a big apple."

p="apple"

"""

t="为什么叫向量空间模型呢?其实我们可以把每个词给看成一个维度,而词的频率看成其值(有向),即向量,这样每篇文章的词及其频率就构成了一个i维空间图,两个文档的相似度就是两个空间图的接近度。假设文章只有两维的话,那么空间图就可以画在一个平面直角坐标系当中,读者可以假想两篇只有两个词的文章画图进行理解。"

p="读者"

i=0

count=0

start=time.time()

while (i <=len(t)-len(p)):

    j=0

    while (t[i]==p[j]):

                i=i+1

                j=j+1

        if j==len(p):

            break         

        elif (j==len(p)-1):

            count=count+1

    else:

        i=i+1

        j=0

print count

print time.time()-start

 
算法思想:目标串t与模式串p逐词比较,若对应位匹配,则进行下一位比较;若不相同,p右移1位,从p的第1位重新开始比较。

算法特点:整体移动方向:可认为在固定的情况下,p从左向右滑动;匹配比较时,从p的最左边位开始向右逐位与t串中对应位比较。p的滑动距离为1,这导致BF算法匹配效率低(相比其他算法,如:BM,KMP,滑动没有跳跃)。

该算法的时间复杂度为O(len(t)*len(p)),空间复杂度为O(len(t)+len(p))

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python读取键盘输入的2种方法
Jun 16 Python
详解Python中 __get__和__getattr__和__getattribute__的区别
Jun 16 Python
python3读取MySQL-Front的MYSQL密码
May 03 Python
node.js获取参数的常用方法(总结)
May 29 Python
python 寻找离散序列极值点的方法
Jul 10 Python
Django基础知识 URL路由系统详解
Jul 18 Python
python内存管理机制原理详解
Aug 12 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 Python
Python 实现opencv所使用的图片格式与 base64 转换
Jan 09 Python
Django Path转换器自定义及正则代码实例
May 29 Python
Pycharm新手使用教程(图文详解)
Sep 17 Python
Python开发工具Pycharm的安装以及使用步骤总结
Jun 24 Python
python通过装饰器检查函数参数数据类型的方法
Mar 13 #Python
python实现简单温度转换的方法
Mar 13 #Python
python实现简单socket程序在两台电脑之间传输消息的方法
Mar 13 #Python
Python比较两个图片相似度的方法
Mar 13 #Python
python通过urllib2获取带有中文参数url内容的方法
Mar 13 #Python
python将MongoDB里的ObjectId转换为时间戳的方法
Mar 13 #Python
python通过正则查找微博@(at)用户的方法
Mar 13 #Python
You might like
一个显示天气预报的程序
2006/10/09 PHP
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
php简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
mac下多个php版本快速切换的方法
2016/10/09 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
2019/06/05 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
2014/09/03 Javascript
jQuery中nextAll()方法用法实例
2015/01/07 Javascript
EasyUI中datagrid在ie下reload失败解决方案
2015/03/09 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
2017/02/14 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
微信小程序中进行地图导航功能的实现方法
2018/06/29 Javascript
vue 音乐App QQ音乐搜索列表最新接口跨域设置方法
2018/09/25 Javascript
Vue绑定内联样式问题
2018/10/17 Javascript
浅谈发布订阅模式与观察者模式
2019/04/09 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
学习LayUI时自研的表单参数校验框架案例分析
2019/07/29 Javascript
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
python实现停车管理系统
2018/11/30 Python
python matplotlib画图库学习绘制常用的图
2019/03/19 Python
python可视化爬虫界面之天气查询
2019/07/03 Python
python selenium登录豆瓣网过程解析
2019/08/10 Python
如何使用selenium和requests组合实现登录页面
2020/02/03 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
pytorch 移动端部署之helloworld的使用
2020/10/30 Python
CSS3 translate导致字体模糊的实例代码
2019/08/30 HTML / CSS
高中生自我评语大全
2014/01/19 职场文书
保险内勤岗位职责
2015/04/13 职场文书
公司辞职信模板
2015/05/13 职场文书
聊聊golang中多个defer的执行顺序
2021/05/08 Golang