目錄
Whoosh簡介
Index & query
範例程式碼
資料
欄位
建立索引檔案
查詢
首頁 後端開發 Python教學 Python輕量級搜尋工具Whoosh的使用(總結分享)

Python輕量級搜尋工具Whoosh的使用(總結分享)

Jul 26, 2022 pm 02:03 PM
python

本篇文章為大家帶來了關於Python的相關知識,將為大家簡單介紹一下Python中的一個輕量級搜尋工具Whoosh,並給出相應的使用範例程式碼,下面一起來看一下,希望對大家有幫助。

Python輕量級搜尋工具Whoosh的使用(總結分享)

【相關推薦:Python3影片教學

本文將簡單介紹Python中的一個輕量級搜尋工具Whoosh,並給出相應的使用範例程式碼。

Whoosh簡介

Whoosh由Matt Chaput創建,它一開始是一個為Houdini 3D動畫軟體包的線上文件提供簡單、快速的搜尋服務工具,之後又慢慢成為一個成熟的搜尋解決工具並已開源。

Whoosh純粹由Python編寫而成,是一個靈活的,方便的,輕量級的搜尋引擎工具,現在同時支援Python2、3,其優點如下:

  • Whoosh純粹由Python編寫而成,但很快,只需要Python環境即可,不需要編譯器;
  • 預設使用Okapi BM25F排序演算法,也支援其他排序演算法;
  • 相比於其他搜尋引擎,Whoosh會創建更小的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,下圖為該資料集的前十行:

欄位

根據資料集的特徵,我們建立四個欄位(fields):title, dynasty, poet, content。建立的程式碼如下:

# -*- coding: utf-8 -*-
import os
from whoosh.index import create_in
from whoosh.fields import *
from jieba.analyse import ChineseAnalyzer
import json

# 创建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選擇結巴中文分詞器。

建立索引檔案

接著,我們需要建立索引檔。我們利用程式先解析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建立成功後,會產生indexdir目錄,裡面有上述poem.csv資料的各個欄位的索引檔。

查詢

index創建成功後,我們就利用進行查詢。

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

# 创建一个检索器
searcher = ix.searcher()

# 检索content中出现'明月'的文档
results = searcher.find("content", "明月")
print('一共发现%d份文档。' % len(results))
for i in range(min(10, len(results))):
    print(json.dumps(results[i].fields(), ensure_ascii=False))
登入後複製

輸出結果如下:

總共發現44份文件。
前10份文件如下:
{"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": "黃庭堅 ", "titletle", "poet": "黃庭堅 ", "titletle ": "鄂州南樓書事"}
{"content": "青山隱隱水迢迢,秋盡江南草未凋。二十四橋明月夜,玉人何處教吹簫?", "dynasty ": "唐代", "poet": "杜牧 ", "title": "寄揚州韓綽判官"}
{"content": "露氣寒光集,微陽下楚丘。猿叼洞庭庭樹,人在木蘭舟。廣澤生明月,蒼山夾亂流。雲中君不見,竟夕自悲秋。", "dynasty": "唐代", "poet": "馬戴 ", "title ": "楚江懷古三首·其一"}
{"content": "海上生明月,天涯共此時。情人怨遙夜,竟夕起相思。滅燭憐光滿,披衣覺露滋。不堪盈手贈,還寢夢佳期。", "dynasty": "唐代", "poet": "張九齡 ", "title": "望月懷遠 / 望月懷古"}

【相關推薦:Python3影片教學

以上是Python輕量級搜尋工具Whoosh的使用(總結分享)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1274
29
C# 教程
1256
24
PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

sublime怎麼運行代碼python sublime怎麼運行代碼python Apr 16, 2025 am 08:48 AM

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Golang vs. Python:性能和可伸縮性 Golang vs. Python:性能和可伸縮性 Apr 19, 2025 am 12:18 AM

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

vscode在哪寫代碼 vscode在哪寫代碼 Apr 15, 2025 pm 09:54 PM

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

See all articles