成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Python輕量級(jí)搜索工具Whoosh怎么使用?具體代碼如下

89542767 / 530人閱讀


  在Python當(dāng)中,有一個(gè)輕量級(jí)的搜索工具,在日常使用的時(shí)候,用途還是比較廣的,這個(gè)工具就是Whoosh。那么,這個(gè)工具需要怎么進(jìn)行使用呢?具體的代碼內(nèi)容有哪些呢?下面就給大家進(jìn)行詳細(xì)的解答。


  Whoosh簡(jiǎn)介


  Whoosh由Matt Chaput創(chuàng)建,它一開(kāi)始是一個(gè)為Houdini 3D動(dòng)畫(huà)軟件包的在線文檔提供簡(jiǎn)單、快速的搜索服務(wù)工具,隨著時(shí)代的發(fā)展,它慢慢的演變成了一個(gè)成熟的搜索工具,為了滿足更多人的需求,將它逐漸變成了一個(gè)開(kāi)源的工具。


  Whoosh純由Python編寫(xiě)而成,使用起來(lái)比較簡(jiǎn)單靈活,另外現(xiàn)在同時(shí)支持Python第二代,第三代,那么它的優(yōu)點(diǎn)有哪些呢:


  1、Whoosh純由Python代碼寫(xiě)成的,安裝速度比較的快,安裝簡(jiǎn)單,只需要Python環(huán)境即可,不需要編譯器;


  2、默認(rèn)使用Okapi BM25F排序算法,也支持其他排序算法;


  3、相比于其他搜索引擎,Whoosh會(huì)創(chuàng)建更小的index文件;


  4、Whoosh中的index文件編碼必須是unicode;


  5、Whoosh可以儲(chǔ)存任意的Python對(duì)象。


  Whoosh的官方介紹網(wǎng)站為:https://whoosh.readthedocs.io/en/latest/intro.html。相比于ElasticSearch或者Solr等成熟的搜索引擎工具,Whoosh顯得更輕便,操作更簡(jiǎn)單,可以考慮在小型的搜索項(xiàng)目中使用。


  Index&query


  對(duì)于熟悉ES的人來(lái)說(shuō),搜索的兩個(gè)重要的方面為mapping和query,也就是索引的構(gòu)建以及查詢,背后是復(fù)雜的索引儲(chǔ)存、query解析以及排序算法等。如果你有ES方面的經(jīng)驗(yàn),那么,對(duì)于Whoosh是十分容易上手的。


  按照筆者的理解以及Whoosh的官方文檔,Whoosh的入門(mén)使用主要是index以及query。搜索引擎的強(qiáng)大功能之一在于它能夠提供全文檢索,這依賴(lài)于排序算法,比如BM25,也依賴(lài)于我們?cè)鯓觾?chǔ)存字段。因此,index作為名詞時(shí),是指字段的索引,index作為動(dòng)詞時(shí),是指建立字段的索引。而query會(huì)將我們需要查詢的語(yǔ)句,通過(guò)排序算法,給出合理的搜索結(jié)果。


  關(guān)于Whoosh的使用,在官文文檔中已經(jīng)給出了詳細(xì)的說(shuō)明,筆者在這里只給出一個(gè)簡(jiǎn)單的例子,來(lái)說(shuō)明Whoosh如何能方便地提升我們的搜索體驗(yàn)。


      實(shí)例代碼


數(shù)據(jù)

本項(xiàng)目的示例數(shù)據(jù)為poem.csv,下圖為該數(shù)據(jù)集的前十行:

0.jpg


字段

根據(jù)數(shù)據(jù)集的特征,我們創(chuàng)建四個(gè)字段(fields):title,dynasty,poet,content。創(chuàng)建的代碼如下:

    #-*-coding:utf-8-*-

  import os

  from whoosh.index import create_in

  from whoosh.fields import*

  from jieba.analyse import ChineseAnalyzer

  import json

  #創(chuàng)建schema,stored為T(mén)rue表示能夠被檢索

  schema=Schema(title=TEXT(stored=True,analyzer=ChineseAnalyzer()),

  dynasty=ID(stored=True),

  poet=ID(stored=True),

  content=TEXT(stored=True,analyzer=ChineseAnalyzer())

  )

  其中,ID只能為一個(gè)單元值,不能分割為若干個(gè)詞,常用于文件路徑、URL、日期、分類(lèi);


  TEXT文件的文本內(nèi)容,建立文本的索引并存儲(chǔ),支持詞匯搜索;Analyzer選擇結(jié)巴中文分詞器。

創(chuàng)建索引文件

接著,我們需要?jiǎng)?chuàng)建索引文件。我們利用程序先解析poem.csv文件,并將它轉(zhuǎn)化為index,寫(xiě)入到indexdir目錄下。Python代碼如下:

  #解析poem.csv文件

  with open('poem.csv','r',encoding='utf-8')as f:

  texts=[_.strip().split(',')for _ in f.readlines()if len(_.strip().split(','))==4]

  #存儲(chǔ)schema信息至indexdir目錄

  indexdir='indexdir/'

  if not os.path.exists(indexdir):

  os.mkdir(indexdir)

  ix=create_in(indexdir,schema)

  #按照schema定義信息,增加需要建立索引的文檔

  writer=ix.writer()

  for i in range(1,len(texts)):

  title,dynasty,poet,content=texts<i>

  writer.add_document(title=title,dynasty=dynasty,poet=poet,content=content)

  writer.commit()

 index創(chuàng)建成功后,我們就利用進(jìn)行查詢。

   比如我們想要查詢content中含有明月的詩(shī)句,可以輸入以下代碼:

 #創(chuàng)建一個(gè)檢索器

  searcher=ix.searcher()

  #檢索content中出現(xiàn)'明月'的文檔

  results=searcher.find("content","明月")

  print('一共發(fā)現(xiàn)%d份文檔。'%len(results))

  for i in range(min(10,len(results))):

  print(json.dumps(results<i>.fields(),ensure_ascii=False))

  輸出結(jié)果如下:

  一共發(fā)現(xiàn)44份文檔。

  前10份文檔如下:

  {"content":"床前明月光,疑是地上霜。舉頭望明月,低頭思故鄉(xiāng)。","dynasty":"唐代","poet":"李白","title":"靜夜思"}

  {"content":"邊草,邊草,邊草盡來(lái)兵老。山南山北雪晴,千里萬(wàn)里月明。明月,明月,胡笳一聲愁絕。","dynasty":"唐代","poet":"戴叔倫","title":"調(diào)笑令·邊草"}

  {"content":"獨(dú)坐幽篁里,彈琴?gòu)?fù)長(zhǎng)嘯。深林人不知,明月來(lái)相照。","dynasty":"唐代","poet":"王維","title":"竹里館"}

  {"content":"漢江明月照歸人,萬(wàn)里秋風(fēng)一葉身。休把客衣輕浣濯,此中猶有帝京塵。","dynasty":"明代","poet":"邊貢","title":"重贈(zèng)吳國(guó)賓"}

  {"content":"秦時(shí)明月漢時(shí)關(guān),萬(wàn)里長(zhǎng)征人未還。但使龍城飛將在,不教胡馬度陰山。","dynasty":"唐代","poet":"王昌齡","title":"出塞二首·其一"}

  {"content":"京口瓜洲一水間,鐘山只隔數(shù)重山。春風(fēng)又綠江南岸,明月何時(shí)照我還?","dynasty":"宋代","poet":"王安石","title":"泊船瓜洲"}

  {"content":"四顧山光接水光,憑欄十里芰荷香。清風(fēng)明月無(wú)人管,并作南樓一味涼。","dynasty":"宋代","poet":"黃庭堅(jiān)","title":"鄂州南樓書(shū)事"}

  {"content":"青山隱隱水迢迢,秋盡江南草未凋。二十四橋明月夜,玉人何處教吹簫?","dynasty":"唐代","poet":"杜牧","title":"寄揚(yáng)州韓綽判官"}

  {"content":"露氣寒光集,微陽(yáng)下楚丘。猿啼洞庭樹(shù),人在木蘭舟。廣澤生明月,蒼山夾亂流。云中君不見(jiàn),竟夕自悲秋。","dynasty":"唐代","poet":"馬戴","title":"楚江懷古三首·其一"}

  {"content":"海上生明月,天涯共此時(shí)。情人怨遙夜,竟夕起相思。滅燭憐光滿,披衣覺(jué)露滋。不堪盈手贈(zèng),還寢夢(mèng)佳期。","dynasty":"唐代","poet":"張九齡","title":"望月懷遠(yuǎn)/望月懷古"}

   綜上所述,關(guān)于Python使用工具,Whoosh介紹就給大家介紹到這里了,希望可以為各位讀者帶來(lái)幫助。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/127588.html

相關(guān)文章

  • Django添加全文搜索功能入門(mén)篇

    摘要:轉(zhuǎn)載說(shuō)明來(lái)源添加全文搜索功能入門(mén)一使用的工具是的開(kāi)源搜索框架,該框架支持搜索引擎,不用更改代碼,直接切換引擎,減少代碼量。修改如下添加修改為如下第二步在中修改引擎,如下第三步重建索引,在進(jìn)行搜索中文試試吧。 感覺(jué)網(wǎng)絡(luò)上關(guān)于Django全文搜索的中文文章太少,并且講的也不是很到位,就是簡(jiǎn)單介紹了怎么配置,并沒(méi)有說(shuō)這樣配置有什么用,所以依然很迷茫。所以希望我這篇文章能夠幫助到后來(lái)人。 轉(zhuǎn)...

    lookSomeone 評(píng)論0 收藏0
  • 使用haystack實(shí)現(xiàn)django全文檢索搜索引擎功能

    摘要:搜索引擎使用,是一個(gè)純實(shí)現(xiàn)的全文搜索引擎,小巧簡(jiǎn)單。中文搜索需要進(jìn)行中文分詞,使用。高亮部分的源碼位于和文件中,可復(fù)制進(jìn)行修改,實(shí)現(xiàn)自定義高亮功能。 前言 django是python語(yǔ)言的一個(gè)web框架,功能強(qiáng)大。配合一些插件可為web網(wǎng)站很方便地添加搜索功能。 搜索引擎使用whoosh,是一個(gè)純python實(shí)現(xiàn)的全文搜索引擎,小巧簡(jiǎn)單。 中文搜索需要進(jìn)行中文分詞,使用jieba。 直...

    wh469012917 評(píng)論0 收藏0
  • 基于whoosh實(shí)現(xiàn)的flask全文搜索插件

    摘要:貌似很少全文搜索的插件有一個(gè)但試了幾次都用不了所以參考自己寫(xiě)了一個(gè)插件基于純編寫(xiě)使用上很簡(jiǎn)單創(chuàng)建更新刪除索引如果要對(duì)已存在的數(shù)據(jù)創(chuàng)建索引全部創(chuàng)建更新刪除如果只想要為指定的表創(chuàng)建索引自定義比如使用的中文分詞項(xiàng)目地址演示 flask 貌似很少全文搜索的插件,有一個(gè) Flask-WhooshAlchemy , 但試了幾次都用不了,所以參考 Flask-WhooshAlchemy 自己寫(xiě)了一個(gè)...

    Jason_Geng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<