python 全文检索引擎详解


Posted in Python onApril 25, 2017

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登录Dr.com思路以及代码分享
Jun 25 Python
在Python中使用PIL模块对图片进行高斯模糊处理的教程
May 05 Python
python避免死锁方法实例分析
Jun 04 Python
Python绘制的二项分布概率图示例
Aug 22 Python
使用Py2Exe for Python3创建自己的exe程序示例
Oct 31 Python
django框架单表操作之增删改实例分析
Dec 16 Python
Python脚本导出为exe程序的方法
Mar 25 Python
Python Pillow(PIL)库的用法详解
Sep 19 Python
详解java调用python的几种用法(看这篇就够了)
Dec 10 Python
Python中glob库实现文件名的匹配
Jun 18 Python
Python将CSV文件转化为HTML文件的操作方法
Jun 30 Python
python百行代码实现汉服圈图片爬取
Nov 23 Python
window下eclipse安装python插件教程
Apr 24 #Python
Python处理PDF及生成多层PDF实例代码
Apr 24 #Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
Apr 24 #Python
python爬虫实战之爬取京东商城实例教程
Apr 24 #Python
python中urllib.unquote乱码的原因与解决方法
Apr 24 #Python
Python面向对象特殊成员
Apr 24 #Python
Python解惑之整数比较详解
Apr 24 #Python
You might like
PHP 截取字符串函数整理(支持gb2312和utf-8)
2010/02/16 PHP
php 抽象类的简单应用
2011/09/06 PHP
解决PHP超大文件下载,断点续传下载的方法详解
2013/06/06 PHP
PHP中魔术变量__METHOD__与__FUNCTION__的区别
2014/09/29 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
php结合ajax实现手机发红包的案例
2016/10/13 PHP
PDO::quote讲解
2019/01/29 PHP
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
深入理解JavaScript系列(37):设计模式之享元模式详解
2015/03/04 Javascript
js中跨域方法原理详解
2015/07/19 Javascript
Node.js用readline模块实现输入输出
2016/12/16 Javascript
js设置文字颜色的方法示例
2016/12/30 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
2017/03/15 Javascript
Vue生命周期示例详解
2017/04/12 Javascript
使用canvas进行图像编辑的实例
2017/08/29 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
js构建二叉树进行数值数组的去重与优化详解
2018/03/26 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
2019/06/18 jQuery
python实现将html表格转换成CSV文件的方法
2015/06/28 Python
基于scrapy的redis安装和配置方法
2018/06/13 Python
Python3 批量扫描端口的例子
2019/07/25 Python
python Paramiko使用示例
2020/09/21 Python
python logging模块的使用详解
2020/10/23 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
2020/11/13 Python
专业销售业务员求职信
2013/11/18 职场文书
会计学专业学生的求职信范文
2014/01/27 职场文书
分公司总经理岗位职责
2014/08/03 职场文书
一份没有按时交货失信于客户的检讨书
2014/09/19 职场文书
关于成绩下滑的自我检讨书
2014/09/20 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书
2019行政前台转正申请书范文3篇
2019/08/15 职场文书
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
2022/03/22 MySQL
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript