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中lambda函数 list comprehension 和 zip函数使用指南
Sep 28 Python
python实现在目录中查找指定文件的方法
Nov 11 Python
Python3.x中自定义比较函数
Apr 24 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
May 18 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
Jan 04 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
Jun 23 Python
python爬虫爬取淘宝商品信息
Feb 23 Python
Python爬虫文件下载图文教程
Dec 23 Python
对python中不同模块(函数、类、变量)的调用详解
Jul 16 Python
Python time库基本使用方法分析
Dec 13 Python
Python 正则模块详情
Nov 02 Python
python绘制简单直方图(质量分布图)的方法
Apr 21 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 Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
PHP大文件及断点续传下载实现代码
2020/08/18 PHP
浅谈Javascript面向对象编程
2011/11/15 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
Jquery刷新页面背景图片随机变换的实现方法
2013/03/15 Javascript
网页广告中JS代码的信息监听示例
2014/04/02 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
2015/11/18 Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
2016/08/15 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
2017/01/21 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
WebPack配置vue多页面的技巧
2018/05/15 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
nodejs搭建本地服务器并访问文件操作示例
2019/05/11 NodeJs
JS数组方法push()、pop()用法实例分析
2020/01/18 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
Python高级特性切片(Slice)操作详解
2018/09/27 Python
python多个模块py文件的数据共享实例
2019/01/11 Python
python实现中文文本分句的例子
2019/07/15 Python
香港唯港荟酒店预订:Hotel ICON
2018/03/27 全球购物
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
Europcar意大利:汽车租赁
2019/07/07 全球购物
学生打架检讨书
2014/02/14 职场文书
大学生就业意向书范文
2014/04/01 职场文书
有关爱国演讲稿
2014/05/07 职场文书
节水标语大全
2014/06/11 职场文书
2013年最新自荐信范文
2014/06/23 职场文书
婚前协议书标准版
2014/10/19 职场文书
详解Nginx 被动检查服务器的存活状态
2021/10/16 Servers
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android