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解析模块(ConfigParser)使用方法
Dec 10 Python
python检查序列seq是否含有aset中项的方法
Jun 30 Python
深入理解Python中装饰器的用法
Jun 28 Python
Python爬取网页中的图片(搜狗图片)详解
Mar 23 Python
Python列表删除的三种方法代码分享
Oct 31 Python
python的Tqdm模块的使用
Jan 10 Python
python按行读取文件,去掉每行的换行符\n的实例
Apr 19 Python
基于pytorch的lstm参数使用详解
Jan 14 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
Mar 05 Python
Python实现一个简单的毕业生信息管理系统的示例代码
Jun 08 Python
Python+unittest+requests 接口自动化测试框架搭建教程
Oct 09 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
Jan 27 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-redis中文文档介绍
2013/02/07 PHP
php打印一个边长为N的实心和空心菱型的方法
2015/03/02 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
2015/07/03 PHP
PHP微信支付实例解析
2016/07/22 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
javascript 强制刷新页面的实现代码
2009/12/13 Javascript
jQuery 1.4 15个你应该知道的新特性(译)
2010/01/24 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
JavaScript DOM操作表格及样式
2015/04/13 Javascript
javascript数组随机排序实例分析
2015/07/22 Javascript
JavaScript数组去重的五种方法
2015/11/05 Javascript
谈一谈js中的执行环境及作用域
2016/03/30 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
关于Jquery中的bind(),on()绑定事件方式总结
2016/10/26 Javascript
JS查找字符串中出现最多的字符及个数统计
2017/02/04 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
[js高手之路]单例模式实现模态框的示例
2017/09/01 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
用Python给文本创立向量空间模型的教程
2015/04/23 Python
python2 对excel表格操作完整示例
2020/02/23 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
Python pip安装模块提示错误解决方案
2020/05/22 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
python 使用三引号时容易犯的小错误
2020/10/21 Python
印度低票价航空公司:GoAir
2017/10/11 全球购物
Skyscanner加拿大:全球旅行搜索平台
2018/11/19 全球购物
亚马逊加拿大网站:Amazon.ca
2020/01/06 全球购物
酒店总经理欢迎词
2014/01/08 职场文书
2014年度安全工作总结
2014/12/04 职场文书
火烧圆明园的观后感
2015/06/03 职场文书
何玥事迹观后感
2015/06/16 职场文书
解决python存数据库速度太慢的问题
2021/04/23 Python
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server