精华内容
下载资源
问答
  • python全文检索
    千次阅读
    2018-11-11 11:27:32

    全文检索

    全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理

    • haystack
      全文检索的框架,支持whoosh、solr、Xapian、Elasticsearc四种全文检索引擎,点击查看官网

    • whoosh
      纯Python编写的全文搜索引擎,虽然性能比不上sphinx、xapian、Elasticsearc等,但是无二进制包,程序不会莫名其妙的崩溃,对于小型的站点,whoosh已经足够使用,点击查看whoosh文档

    • jieba
      一款免费的中文分词包,如果觉得不好用可以使用一些收费产品

    django中的全文检索安装配置

    1.依赖包安装

    pip install django-haystack
    pip install whoosh
    

    2.在settings.py文件配置

    • 注册应用
    INSTALLED_APPS = (
        ...
        'haystack',	#全文检索框架
    )
    
    • 添加搜索引擎
    # 全文检索框架的配置
    HAYSTACK_CONNECTIONS = {
        'default': {
            # 使用whoosh引擎
            'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
            #'ENGINE': 'haystack.backends.whoosh_cn_backend.WhooshEngine',
            # 索引文件路径
            'PATH': os.path.join(BASE_DIR, 'whoosh_index'),
        }
    }
    
    # 当添加、修改、删除数据时,自动生成索引
    HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
    
    # 指定搜索结果每页显示的条数
    HAYSTACK_SEARCH_RESULTS_PER_PAGE=1
    

    3.在项目的urls.py中添加url

    urlpatterns = [
    	...
        path(r'search/', include('haystack.urls')), # 全文检索框架
    ]
    

    4.索引文件生成

    • 在应用目录(以goods为例)下建立search_indexes.py文件
    # 定义索引类
    from haystack import indexes
    # 导入你的模型类
    from goods.models import GoodsSKU
    
    # 指定对于某个类的某些数据建立索引
    # 索引类名格式:模型类名+Index
    class GoodsSKUIndex(indexes.SearchIndex, indexes.Indexable):
        # 索引字段 use_template=True指定根据表中的哪些字段建立索引文件的说明放在一个文件中
        text = indexes.CharField(document=True, use_template=True)
    
        def get_model(self):
            # 返回你的模型类
            return GoodsSKU
    
        # 建立索引的数据
        def index_queryset(self, using=None):
            return self.get_model().objects.all()
    
    • 在目录“templates/search/indexes/应用名称/”下创建“模型类名称_text.txt”文件
    # 指定根据表中的哪些字段建立索引数据
    {{ object.name }} # 根据商品的名称建立索引
    {{ object.desc }} # 根据商品的简介建立索引
    {{ object.goods.detail }} # 根据商品的详情建立索引
    
    • 使用命令生成索引文件
      python manage.py rebuild_index

    5.搜索表单模板示例

    #注意action和name的值是固定
    <form action="/search" method="get">
        <input type="text" class="input_text fl" name="q" placeholder="搜索商品">
        <input type="submit" class="input_btn fr" name="" value="搜索">
    </form>
    

    6.在目录“templates/search/”下建立search.html
    搜索出结果后,haystack会把搜索出的结果传递给templates/search目录下的search.html,传递的上下文包括:

    query:搜索关键字
    page:当前页的page对象 –>遍历page对象,获取到的是SearchResult类的实例对象,对象的属性object才是模型类的对象。
    paginator:分页paginator对象
    

    search.html示例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    搜索的关键字:{{ query }}<br/>
    当前页的Page对象:{{ page }}<br/>
    <ul>
        {% for item in page %}
            <li>{{ item.object }}</li>
        {% endfor %}
    </ul>
    分页paginator对象:{{ paginator }}<br/>
    </body>
    </html>
    

    7.改变分词方式(jieba分词模块)

    1.安装jieba分词模块
    pip install jieba
    
    2.进入到项目环境目录
    cd ~/anaconda3/envs/myshop-py3.6.2-dj2.0/lib/python3.6/site-packages/haystack/backends
    
    3.在上面的目录中创建ChineseAnalyzer.py文件
    import jieba
    from whoosh.analysis import Tokenizer, Token
    
    class ChineseTokenizer(Tokenizer):
        def __call__(self, value, positions=False, chars=False,
                     keeporiginal=False, removestops=True,
                     start_pos=0, start_char=0, mode='', **kwargs):
            t = Token(positions, chars, removestops=removestops, mode=mode, **kwargs)
            seglist = jieba.cut(value, cut_all=True)
            for w in seglist:
                t.original = t.text = w
                t.boost = 1.0
                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 ChineseAnalyzer():
        return ChineseTokenizer()
    
    4.复制whoosh_backend.py文件,改为如下名称whoosh_cn_backend.py
    cp whoosh_backend.py whoosh_cn_backend.py
    
    5.打开复制出来的新文件,引入中文分析类,内部采用jieba分词。
    from .ChineseAnalyzer import ChineseAnalyzer
    
    6.更改词语分析类
    查找
    analyzer=StemmingAnalyzer()
    改为
    analyzer=ChineseAnalyzer()
    
    7.修改settings.py文件中的配置项
    调整引擎
    'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
    为
    'ENGINE': 'haystack.backends.whoosh_cn_backend.WhooshEngine',
    
    8.重新创建索引数据
    python manage.py rebuild_index
    
    更多相关内容
  • 主要介绍了python 全文检索引擎详解的相关资料,需要的朋友可以参考下
  • ABlog 是一个全文检索引擎的扩展,它能够将任何文件或者是个人网站变成一个具有博客侧边栏、摘要、字体设置等功能的成熟博客系统。
  • 基于Coreseek+Python的分布式全文检索方法.pdf
  • 因为做的是中文的全文检索需要导入jieba工具包以及whoosh工具包 直接上代码吧 from whoosh.qparser import QueryParser from whoosh.index import create_in from whoosh.index import open_dir from whoosh.fields...
  • 搜索引擎使用whoosh,是一个纯python实现的全文搜索引擎,小巧简单。 中文搜索需要进行中文分词,使用jieba。 直接在django项目中使用whoosh需要关注一些基础细节问题,而通过haystack这一搜索框架,可以方便地在...
  • python操作excel、word、pdf大全 完整版
  • python科研向论文检索篇——提取PDF文字以供全文信息检索 作者:ruierx 项目背景 写论文期间,下载了很多论文,但是很多读过一次就忘记了,隐约有印象在某篇论文里见过一个现象,但就是想不起来在哪里看的,这个...

    python科研向论文检索篇——提取PDF文字以供全文信息检索

    作者:ruierx

    项目背景

    写论文期间,下载了很多论文,但是很多读过一次就忘记了,隐约有印象在某篇论文里见过一个现象,但就是想不起来在哪里看的,这个时候如果有一个本地可以根据关键词检索所有论文全文的工具就好了。刚好,嘿嘿,咱会python,那就干吧!

    流程图

    流程图

    工具包安装

    本文使用pdfplumber实现PDF文件的文本提取,注意此包无法识别扫描生成的图片PDF。
    安装 ------ pip install pdfplumber
    另外为了复制拷贝文件方便,引入了python自带包shutil。

    pdfplumber基本用法

    import pdfplumber
    
    with pdfplumber.open("path/to/file.pdf") as pdf:
        first_page = pdf.pages[0]
        print(first_page.chars[0])
    

    pdfpliumber.open()用于打开pdf文件,此时该PDF文件生成一个类,可以使用它的属性调用它的内容,比如:

    .pages为每个页面组成的列表,可用列表的方式调用每一页pdf,每一页又是一个.page的类,有属性.page_number表示页码,.width/.height表示页宽和页高等
    一些常用的方法有:
    page.extract_text()------提取页面中的文本,存储为一个字符串。
    page.extract_words()------返回所有的单词及相关信息
    page.extract_tables()------提取页面的表格

    加亿点点细节

    import pdfplumber
    import shutil
    from os import listdir, chdir, getcwd, system, path, mkdir
    
    chdir("./1/")
    raw_list = listdir()
    print('文件总数:', len(raw_list))
    
    while 1:
        keyword = input("请输入搜索关键字:").strip()
        insure = input("y/n")
        if insure == 'y':
            break
    
    while 1:
        print("请选择检索模式:")
        print("1. 重新检索")
        print("2. 继续上次的检索")
        print("3. 将上次检索的结果存至关键词文件夹")
        choice = input("--->").strip()
        if choice == '1':
            filelist = listdir()
            with open("process.txt", 'w') as pro:
                pro.truncate()
            break
        elif choice == '2':
            with open("../process.txt", 'r') as pro:
                filelist = pro.read().strip().split('\n')
                for f in filelist:
                    raw_list.remove(f)
            filelist = raw_list
            break
        elif choice == '3':
            with open("../process.txt", 'r') as pro:
                filelist = pro.read().strip().split('\n')
                for f in filelist:
                    raw_list.remove(f)
            filelist = raw_list
    
            isExists = path.exists(f'../{keyword}')
            if not isExists:
                mkdir(f'../{keyword}')
            for file in filelist:
                shutil.copyfile(file, f'../{keyword}/{file}')
            system("pause")
            exit(f"{keyword}--相关文件已存储至相应文件夹!")
        else:
            print('输入错误,重新输入!')
    
    print("剩余文件数:", len(filelist))
    
    n = 0
    ns = len(filelist)
    for file in filelist:
        n += 1
        print(f"正在检索({n}/{ns})中是否含有{keyword}------>" + file)
        with pdfplumber.open(file) as pdf:
            # firstpage = pdf.pages[0]
            # print(type(firstpage.extract_text()))
            sign = 0
            for page in pdf.pages:
                text = page.extract_text()
                if keyword in text:
                    with open("../result.txt", 'a+') as res:
                        res.write(keyword + '--->\n' + file +
                                  '----->页数:' + str(page.page_number) + '\n\n')
                    print(keyword + '--->\n' + file +
                          '----->页数:' + str(page.page_number) + '\n\n')
                    sign = 1
                    break
        if sign == 0:
            with open("../process.txt", 'a+') as pro:
                pro.write(file + '\n')
            print("无相关信息!")
    
    system("pause")
    

    管你看没看懂,干就完事了!
    哈哈哈,开玩笑啦,以后有时间补充一下细节吧,最近实在太忙了,毕业再说啦!

    参考资料

    pdfplumber ·PyPI

    展开全文
  • whoosh:纯Python编写的全文搜索引擎 jieba:一款免费的中文分词包 首先安装这三个包 pip install django-haystack pip install whoosh pip install jieba 1.修改settings.py文件,安装应用haystack, 2.在settings....
  • 0.django-haystack:​django-haystack为Django提供模块化搜索。它提供了一个统一的、熟悉的api,允许您插入不同的搜索后端,无需修改代码。haystack是bsd授权的,它很好地使用第三方应用程序,而不需要修改源代码,...

    0.django-haystack:

    ​django-haystack为Django提供模块化搜索。它提供了一个统一的、熟悉的api,允许您插入不同的搜索后端,无需修改代码。

    haystack是bsd授权的,它很好地使用第三方应用程序,而不需要修改源代码,并且支持高级功能,比如faceting,突出显示空间搜索和拼写。

    1.elasticsearch-py:

    Elasticsearch 的官方底层 Python 客户端。

    它提供了一种更方便和惯用的编写和操作方法。它与ElasticSearchJSONDSL保持接近,反映其术语和结构,同时直接使用定义的类或类似于查询集的表达式从Python公开整个DSL范围。

    ​它还提供了一个可选的持久化层用于以类似ORM的方式将文档作为Python对象处理:定义映射、检索和保存文档、将文档数据包装在用户定义的类中。

    2.solrpy:

    solr的 Python 客户端。Solrpy是Python客户端基础上构建的企业搜索服务器。solrpy允许向Solr实例添加文档,然后使用Python执行查询并从Solr收集搜索结果。

    3.Whoosh:

    一个快速的纯 Python 搜索引擎库。

    以上4个数据索引和执行搜索查询的库。

    展开全文
  • 全文检索引擎入门 灰常不幸的是,关系型数据库对全文检索的支持没有被标准化。不同的数据库通过它们自己的方式来实现全文检索,而且SQLAlchemy在全文检索上也没有提供一个好的抽象。 我们现在使用SQLite作为我们的...
  • 主要介绍了python实现搜索指定目录下文件及文件内搜索指定关键词的方法,可实现针对文件夹及文件内关键词的搜索功能,需要的朋友可以参考下
  • 主要介绍了基于python实现检索敏感词并输出,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 意图为其他应用提供高速、低空间占用、高结果 相关度的全文搜索功能。Sphinx可以非常容易的与SQL数据库和脚本语言集成。当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从标准输入读取特定格式 的XML数据...

    全文检索引擎 

    1、Sphinx

    1.1.Sphinx是什么

    Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎。意图为其他应用提供高速、低空间占用、高结果 相关度的全文搜索功能。Sphinx可以非常容易的与SQL数据库和脚本语言集成。当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从标准输入读取特定格式 的XML数据。通过修改源代码,用户可以自行增加新的数据源(例如:其他类型的DBMS 的原生支持)

    Official APIs for PHP, Python, Java, Ruby, pure C are included in Sphinx distribution

     

    1.2.Sphinx的特性

    • 高速的建立索引(在当代CPU上,峰值性能可达到10 MB/秒);
    • 高性能的搜索(在2 – 4GB 的文本数据上,平均每次检索响应时间小于0.1秒);
    • 可处理海量数据(目前已知可以处理超过100 GB的文本数据, 在单一CPU的系统上可 处理100 M 文档);
    • 提供了优秀的相关度算法,基于短语相似度和统计(BM25)的复合Ranking方法;
    • 支持分布式搜索;
    • 支持短语搜索
    • 提供文档摘要生成
    • 可作为MySQL的存储引擎提供搜索服务;
    • 支持布尔、短语、词语相似度等多种检索模式;
    • 文档支持多个全文检索字段(最大不超过32个);
    • 文档支持多个额外的属性信息(例如:分组信息,时间戳等);
    • 支持断词;

    1.3.Sphinx中文分词

    中文的全文检索和英文等latin系列不一样,后者是根据空格等特殊字符来断词,而中文是根据语义来分词。目前大多数数据库尚未支持中文全文检索,如Mysql。故,国内出现了一些Mysql的中文全文检索的插件,做的比较好的有hightman的中文分词。Sphinx如果需要对中文进行全文检索,也得需要一些插件来补充。其中我知道的插件有 coreseek 和 sfc 。

     2、Xapian

     

    Xapian is an Open Source Search Engine Library, released under the GPL. It's written in C++, with bindings to allow use from PerlPythonPHPJavaTclC# and Ruby (so far!)

    Xapian is a highly adaptable toolkit which allows developers to easily add advanced indexing and search facilities to their own applications. It supports the Probabilistic Information Retrieval model and also supports a rich set of boolean query operators.

     

    爬虫

    1、Scrapy

    1.1、What is Scrapy

    Scrapy is a fast high-level screen scraping and web crawling framework, used to crawl websites and extract structured data from their pages. It can be used for a wide range of purposes, from data mining to monitoring and automated testing.

    1.2、Scrapy Features

    Simple

            Scrapy was designed with simplicity in mind, by providing the features you need without getting in your way

    Productive

            Just write the rules to extract the data from web pages and let Scrapy crawl the entire web site for you

    Fast
    Scrapy is used in production crawlers to completely scrape more than 500 retailer sites daily, all in one server
    Extensible
    Scrapy was designed with extensibility in mind and so it provides several mechanisms to plug new code without having to touch the framework core
    Portable
    Scrapy runs on Linux, Windows, Mac and BSD
    Open Source and 100% Python
    Scrapy is completely written in Python, which makes it very easy to hack
    Well-tested
    Scrapy has an extensive test suite with very good code coverage

     Html处理

    1、Beautiful Soup

     Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。它可以大大节省你的编程时间。 对于Ruby,使用Rubyful Soup

     

    与web站点交互

    1、mechanize

    Stateful programmatic web browsing in Python, after Andy Lester’s Perl module

     

    • mechanize.Browser and mechanize.UserAgentBase implement the interface of urllib2.OpenerDirector, so:

      • any URL can be opened, not just http:

      • mechanize.UserAgentBase offers easy dynamic configuration of user-agent features like protocol, cookie, redirection and robots.txt handling, without having to make a new OpenerDirector each time, e.g. by calling build_opener().

    • Easy HTML form filling.

    • Convenient link parsing and following.

    • Browser history (.back() and .reload() methods).

    • The Referer HTTP header is added properly (optional).

    • Automatic observance of robots.txt.

    • Automatic handling of HTTP-Equiv and Refresh.


    展开全文
  • Sphinx+Python+Oracle构建全文检索系统.pdf
  • 主要介绍了python使用xlrd实现检索excel中某列含有指定字符串记录的方法,涉及Python使用xlrd模块检索Excel的技巧,非常具有实用价值,需要的朋友可以参考下
  • Python检索

    2021-11-06 10:18:50
    Python检索pipconda 之前自己一直在使用大家的分享,这次我也作为一个输出者分享一下自己的一点东西,也为自己的学习做一下记录。良好的社区需要每一个使用者的贡献。 下面进入正题。 python作为一种有力的生产力...
  • Python实现答题的自动搜索Python实现答题的自动搜索Python实现答题的自动搜索Python实现答题的自动搜索
  • 今天小编就为大家分享一篇python实现全盘扫描搜索功能的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 主要介绍了python实现图像检索的三种(直方图/OpenCV/哈希法),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • Whoosh是一个纯python全文搜索库,但是中文资料不多,故笔者就来开个路,虽然坎坷,虽然开完路还是很窄,大家一起加油~ Whoosh官方文档介绍如下, Whoosh is a library of classes and functions for indexing ...
  • 图像-通过python检索良好的图像检索代码,用于搜索相同或相似的图像python searchEngine.py -c colorindex.csv -s structureindex.csv -rc:\ dataset \ dizhi -q query / 1.jpg python index.py --dataset c: \ ...
  • python实现文本检索-文本相似度算法

    千次阅读 2019-12-27 10:19:28
    文本检索(text retrieve)的常用策略是:用一个ranking function根据搜索词对所有文本进行排序,选取前n个,就像百度搜索一样。 算法:模型选择 1、基于word2vec的词语相似度计算模型 2、python的实现用到...
  • 基于Coreseek+Python的分布式全文检索方法
  • Python实现文件搜索

    千次阅读 2021-12-13 14:04:25
    Python搜索文件,查找重复文件、最近访问文件等。
  • 应用Python语言的引文检索自动化软件设计与实践.pdf
  • Sphinx+Python+Oracle构建全文检索系统

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 592,469
精华内容 236,987
关键字:

python全文检索