全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

python 全文检索引擎详解

python 全文检索引擎详解

最近一直在探索着如何用Python实现像百度那样的关键词检索功能。说起关键词检索,我们会不由自主地联想到正则表达式。正则表达式是所有检索的基础,python中有个re类,是专门用于正则匹配。然而,光光是正则表达式是不能很好实现检索功能的。

python有一个whoosh包,是专门用于全文搜索引擎。

whoosh在国内使用的比较少,而它的性能还没有sphinx/coreseek成熟,不过不同于前者,这是一个纯python库,对python的爱好者更为方便使用。具体的代码如下

安装

输入命令行 pip install whoosh

需要导入的包有:

fromwhoosh.index import create_in

fromwhoosh.fields import *

fromwhoosh.analysis import RegexAnalyzer

fromwhoosh.analysis import Tokenizer,Token

中文分词解析器

class ChineseTokenizer(Tokenizer):
  """
  中文分词解析器
  """
  def __call__(self, value, positions=False, chars=False,
         keeporiginal=True, removestops=True, start_pos=0, start_char=0,
         mode='', **kwargs):
    assert isinstance(value, text_type), "%r is not unicode "% value
    t = Token(positions, chars, removestops=removestops, mode=mode, **kwargs)
    list_seg = jieba.cut_for_search(value)
    for w in list_seg:
      t.original = t.text = w
      t.boost = 0.5
      if positions:
        t.pos = start_pos + value.find(w)
      if chars:
        t.startchar = start_char + value.find(w)
        t.endchar = start_char + value.find(w) + len(w)
      yield t


def chinese_analyzer():
  return ChineseTokenizer()

构建索引的函数

@staticmethod
  def create_index(document_dir):
    analyzer = chinese_analyzer()
    schema = Schema(titel=TEXT(stored=True, analyzer=analyzer), path=ID(stored=True),
            content=TEXT(stored=True, analyzer=analyzer))
    ix = create_in("./", schema)
    writer = ix.writer()
    for parents, dirnames, filenames in os.walk(document_dir):
      for filename in filenames:
        title = filename.replace(".txt", "").decode('utf8')
        print title
        content = open(document_dir + '/' + filename, 'r').read().decode('utf-8')
        path = u"/b"
        writer.add_document(titel=title, path=path, content=content)
    writer.commit()

检索函数

 @staticmethod
  def search(search_str):
    title_list = []
    print 'here'
    ix = open_dir("./")
    searcher = ix.searcher()
    print search_str,type(search_str)
    results = searcher.find("content", search_str)
    for hit in results:
      print hit['titel']
      print hit.score
      print hit.highlights("content", top=10)
      title_list.append(hit['titel'])
    print 'tt',title_list
    return title_list

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# python  # 全文检索引擎  # 全文检索引擎详解  # 听歌识曲--用python实现一个音乐检索器的功能  # python使用xlrd实现检索excel中某列含有指定字符串记录的方法  # 使用python实现正则匹配检索远端FTP目录下的文件  # 关键词  # 正则表达式  # 还没有  # 很好  # 有个  # 是专门  # 这是一个  # 希望能  # 谢谢大家  # 命令行  # 如何用  # 比较少  # 不由自主  # 有一个  # 在国内  # py  # ChineseTokenizer  # keeporiginal  # True  # removestops 


相关文章: 定制建站平台哪家好?企业官网搭建与快速建站方案推荐  手机网站制作与建设方案,手机网站如何建设?  如何高效利用200m空间完成建站?  如何高效生成建站之星成品网站源码?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  如何快速使用云服务器搭建个人网站?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  图册素材网站设计制作软件,图册的导出方式有几种?  如何快速搭建高效WAP手机网站吸引移动用户?  如何解决ASP生成WAP建站中文乱码问题?  高防服务器如何保障网站安全无虞?  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  如何快速搭建高效WAP手机网站?  如何规划企业建站流程的关键步骤?  家具网站制作软件,家具厂怎么跑业务?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  重庆网站制作公司哪家好,重庆中考招生办官方网站?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  网站制作新手教程,新手建设一个网站需要注意些什么?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  如何在服务器上配置二级域名建站?  油猴 教程,油猴搜脚本为什么会网页无法显示?  如何在宝塔面板中修改默认建站目录?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  小建面朝正北,A点实际方位是否存在偏差?  如何在阿里云部署织梦网站?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  h5在线制作网站电脑版下载,h5网页制作软件?  建站之星代理平台如何选择最佳方案?  如何用西部建站助手快速创建专业网站?  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  英语简历制作免费网站推荐,如何将简历翻译成英文?  红河网站制作公司,红河事业单位身份证如何上传?  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  韩国服务器如何优化跨境访问实现高效连接?  常州企业网站制作公司,全国继续教育网怎么登录?  如何高效完成独享虚拟主机建站?  建站VPS配置与SEO优化指南:关键词排名提升策略  如何确保FTP站点访问权限与数据传输安全?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  建站之星展会模板:智能建站与自助搭建高效解决方案  如何在阿里云虚拟服务器快速搭建网站?  php条件判断怎么写_ifelse和switchcase的使用区别【对比】 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。