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使用爬虫猜密码
Feb 19 Python
Python3编程实现获取阿里云ECS实例及监控的方法
Aug 18 Python
Python加载带有注释的Json文件实例
May 23 Python
pandas 按照特定顺序输出的实现代码
Jul 10 Python
Python2与Python3的区别实例总结
Apr 17 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
Jun 18 Python
python保存log日志,实现用log日志画图
Dec 24 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
Apr 15 Python
Python压缩模块zipfile实现原理及用法解析
Aug 14 Python
python 如何调用远程接口
Sep 11 Python
python开发飞机大战游戏
Jul 15 Python
python 管理系统实现mysql交互的示例代码
Dec 06 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 Ubb代码编辑器函数代码
2012/07/05 PHP
CodeIgniter输出中文乱码的两种解决办法
2014/06/12 PHP
PHP命名空间(namespace)的使用基础及示例
2014/08/18 PHP
php中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
PHP levenshtein()函数用法讲解
2019/03/08 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
详解php反序列化
2020/06/10 PHP
使用原生js实现页面蒙灰(mask)效果示例代码
2014/06/20 Javascript
javascript 事件处理示例分享
2014/12/31 Javascript
JavaScript中的Primitive对象封装介绍
2014/12/31 Javascript
浅谈jquery事件处理
2015/04/24 Javascript
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
Nodejs中Express 常用中间件 body-parser 实现解析
2017/05/22 NodeJs
基于angular6.0实现的一个组件懒加载功能示例
2018/04/12 Javascript
React diff算法的实现示例
2018/04/20 Javascript
JavaScript设计模式--简单工厂模式定义与应用案例详解
2020/05/23 Javascript
[43:43]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第三场 11.29
2020/12/02 DOTA
python执行get提交的方法
2015/04/29 Python
解决python matplotlib imshow无法显示的问题
2018/05/24 Python
Python格式化日期时间操作示例
2018/06/28 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
2020/04/21 Python
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2013/07/04 HTML / CSS
英国蜡烛、蜡烛配件和家居香氛购买网站:Yankee Candle
2018/12/12 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
用C或者C++语言实现SOCKET通信
2015/02/24 面试题
机械专业应届生求职信
2013/09/21 职场文书
实习鉴定评语
2014/01/19 职场文书
咖啡馆创业计划书
2014/01/26 职场文书
古汉语文学求职信范文
2014/03/16 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
国际贸易实训报告
2014/11/05 职场文书
毕业生自我鉴定范文
2019/05/13 职场文书