本篇文章為大家帶來了關於Python的相關知識,將為大家簡單介紹一下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中文網其他相關文章!

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

Python3.6環境下加載Pickle文件報錯:ModuleNotFoundError:Nomodulenamed...

如何解決jieba分詞在景區評論分析中的問題?當我們在進行景區評論分析時,往往會使用jieba分詞工具來處理文�...

如何使用正則表達式匹配到第一個閉合標籤就停止?在處理HTML或其他標記語言時,常常需要使用正則表達式來�...

攻克Investing.com的反爬蟲策略許多人嘗試爬取Investing.com(https://cn.investing.com/news/latest-news)的新聞數據時,常常�...


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

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

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中