最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python輕量級搜索工具Whoosh的使用教程

 更新時間:2022年07月14日 14:52:06   作者:Python研究者  
本文將為大家簡單介紹一下Python中的一個輕量級搜索工具Whoosh,并給出相應的使用示例代碼,感興趣的小伙伴可以跟隨小編一起學習一下

本文將簡單介紹Python中的一個輕量級搜索工具Whoosh,并給出相應的使用示例代碼。

Whoosh簡介

Whoosh由Matt Chaput創(chuàng)建,它一開始是一個為Houdini 3D動畫軟件包的在線文檔提供簡單、快速的搜索服務工具,之后便慢慢成為一個成熟的搜索解決工具并已開源。

Whoosh純由Python編寫而成,是一個靈活的,方便的,輕量級的搜索引擎工具,現在同時支持Python2、3,其優(yōu)點如下:

  • Whoosh純由Python編寫而成,但很快,只需要Python環(huán)境即可,不需要編譯器;
  • 默認使用 Okapi BM25F排序算法,也支持其他排序算法;
  • 相比于其他搜索引擎,Whoosh會創(chuàng)建更小的index文件;
  • Whoosh中的index文件編碼必須是unicode;
  • Whoosh可以儲存任意的Python對象。

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

Index & query

對于熟悉ES的人來說,搜索的兩個重要的方面為mapping和query,也就是索引的構建以及查詢,背后是復雜的索引儲存、query解析以及排序算法等。如果你有ES方面的經驗,那么,對于Whoosh是十分容易上手的。

按照筆者的理解以及Whoosh的官方文檔,Whoosh的入門使用主要是index以及query。搜索引擎的強大功能之一在于它能夠提供全文檢索,這依賴于排序算法,比如BM25,也依賴于我們怎樣儲存字段。因此,index作為名詞時,是指字段的索引,index作為動詞時,是指建立字段的索引。而query會將我們需要查詢的語句,通過排序算法,給出合理的搜索結果。

關于Whoosh的使用,在官文文檔中已經給出了詳細的說明,筆者在這里只給出一個簡單的例子,來說明Whoosh如何能方便地提升我們的搜索體驗。

示例代碼

數據

本項目的示例數據為poem.csv,下圖為該數據集的前十行:

poem.csv

字段

根據數據集的特征,我們創(chuàng)建四個字段(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為True表示能夠被檢索
schema?=?Schema(title=TEXT(stored=True,?analyzer=ChineseAnalyzer()),
????????????????dynasty=ID(stored=True),
????????????????poet=ID(stored=True),
????????????????content=TEXT(stored=True,?analyzer=ChineseAnalyzer())
????????????????)

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

TEXT文件的文本內容,建立文本的索引并存儲,支持詞匯搜索;Analyzer選擇結巴中文分詞器。

創(chuàng)建索引文件

接著,我們需要創(chuàng)建索引文件。我們利用程序先解析poem.csv文件,并將它轉化為index,寫入到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]

#?存儲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)建成功后,會生成indexdir目錄,里面含有上述poem.csv數據的各個字段的索引文件。

查詢

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

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

#?創(chuàng)建一個檢索器
searcher?=?ix.searcher()

#?檢索content中出現'明月'的文檔
results?=?searcher.find("content",?"明月")
print('一共發(fā)現%d份文檔。'?%?len(results))
for?i?in?range(min(10,?len(results))):
????print(json.dumps(results[i].fields(),?ensure_ascii=False))

輸出結果如下:

一共發(fā)現44份文檔。
前10份文檔如下:
{"content": "床前明月光,疑是地上霜。舉頭望明月,低頭思故鄉(xiāng)。", "dynasty": "唐代", "poet": "李白 ", "title": "靜夜思"}
{"content": "邊草,邊草,邊草盡來兵老。山南山北雪晴,千里萬里月明。明月,明月,胡笳一聲愁絕。", "dynasty": "唐代", "poet": "戴叔倫 ", "title": "調笑令·邊草"}
{"content": "獨坐幽篁里,彈琴復長嘯。深林人不知,明月來相照。", "dynasty": "唐代", "poet": "王維 ", "title": "竹里館"}
{"content": "漢江明月照歸人,萬里秋風一葉身。休把客衣輕浣濯,此中猶有帝京塵。", "dynasty": "明代", "poet": "邊貢 ", "title": "重贈吳國賓"}
{"content": "秦時明月漢時關,萬里長征人未還。但使龍城飛將在,不教胡馬度陰山。", "dynasty": "唐代", "poet": "王昌齡 ", "title": "出塞二首·其一"}
{"content": "京口瓜洲一水間,鐘山只隔數重山。春風又綠江南岸,明月何時照我還?", "dynasty": "宋代", "poet": "王安石 ", "title": "泊船瓜洲"}
{"content": "四顧山光接水光,憑欄十里芰荷香。清風明月無人管,并作南樓一味涼。", "dynasty": "宋代", "poet": "黃庭堅 ", "title": "鄂州南樓書事"}
{"content": "青山隱隱水迢迢,秋盡江南草未凋。二十四橋明月夜,玉人何處教吹簫?", "dynasty": "唐代", "poet": "杜牧 ", "title": "寄揚州韓綽判官"}
{"content": "露氣寒光集,微陽下楚丘。猿啼洞庭樹,人在木蘭舟。廣澤生明月,蒼山夾亂流。云中君不見,竟夕自悲秋。", "dynasty": "唐代", "poet": "馬戴 ", "title": "楚江懷古三首·其一"}
{"content": "海上生明月,天涯共此時。情人怨遙夜,竟夕起相思。滅燭憐光滿,披衣覺露滋。不堪盈手贈,還寢夢佳期。", "dynasty": "唐代", "poet": "張九齡 ", "title": "望月懷遠 / 望月懷古"}

到此這篇關于Python輕量級搜索工具Whoosh的使用教程的文章就介紹到這了,更多相關Python搜索工具Whoosh內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • pytorch下tensorboard的使用程序示例

    pytorch下tensorboard的使用程序示例

    我們都知道tensorflow框架可以使用tensorboard這一高級的可視化的工具,這篇文章主要介紹了pytorch下tensorboard的使用,需要的朋友可以參考下
    2021-10-10
  • Python中super().__init__()測試以及理解

    Python中super().__init__()測試以及理解

    __init__()一般用來創(chuàng)建對象的實例變量,或一次性操作,super()用于調用父類的方法,可用來解決多重繼承問題,下面這篇文章主要給大家介紹了關于Python中super().__init__()測試及理解的相關資料,需要的朋友可以參考下
    2021-12-12
  • Django框架中表單的用法

    Django框架中表單的用法

    這篇文章介紹了Django框架中表單的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Python基礎之元編程知識總結

    Python基礎之元編程知識總結

    很多人不理解“元編程”是個什么東西,關于它也沒有一個十分準確的定義.這篇文章要說的是Python里的元編程,實際上也不一定就真的符合“元編程”的定義.只不過我無法找到一個更準確的名字來代表這篇文章的主題,所以就借了這么一個名號,需要的朋友可以參考下
    2021-05-05
  • Python使用Holoviews創(chuàng)建復雜的可視化布局

    Python使用Holoviews創(chuàng)建復雜的可視化布局

    Holoviews是一個基于Python的開源庫,旨在簡化數據可視化的創(chuàng)建過程,本文將為新手朋友詳細介紹如何使用Holoviews創(chuàng)建復雜的可視化布局,感興趣的可以了解下
    2024-11-11
  • Python3+cgroupspy安裝使用簡介

    Python3+cgroupspy安裝使用簡介

    cgroups是Control groups的簡稱,是Linux內核提供的一種限制進程使用和種系統(tǒng)資源的特性,這篇文章主要介紹了Python3+cgroupspy安裝使用教程,需要的朋友可以參考下
    2023-04-04
  • Python如何對齊字符串

    Python如何對齊字符串

    這篇文章主要介紹了Python如何對齊字符串,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • Python實現多組數據三維繪圖系統(tǒng)

    Python實現多組數據三維繪圖系統(tǒng)

    這篇文章主要為大家詳細介紹了如何利用Python實現多組數據三維繪圖系統(tǒng),文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解下
    2023-08-08
  • win10下安裝Anaconda的教程(python環(huán)境+jupyter_notebook)

    win10下安裝Anaconda的教程(python環(huán)境+jupyter_notebook)

    Anaconda指的是一個開源的Python發(fā)行版本,其包含了conda、Python等180多個科學包及其依賴項。這篇文章主要介紹了win10下安裝Anaconda(python環(huán)境+jupyter_notebook),需要的朋友可以參考下
    2019-10-10
  • Python中re正則匹配數據的實現

    Python中re正則匹配數據的實現

    在Python中,可以使用re模塊來使用正則表達式,本文主要介紹了Python中re正則匹配數據的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-04-04

最新評論

义乌市| 扎赉特旗| 东港市| 武乡县| 台前县| 南昌市| 汤阴县| 龙胜| 靖安县| 平潭县| 浦城县| 嘉定区| 安岳县| 海原县| 遂平县| 依兰县| 花垣县| 科尔| 嘉兴市| 防城港市| 宾川县| 临猗县| 延寿县| 肃宁县| 大连市| 利川市| 上饶市| 洞口县| 文成县| 顺平县| 华池县| 巩留县| 北海市| 甘南县| 东城区| 雷山县| 丰县| 重庆市| 封开县| 香格里拉县| 南木林县|