Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Whoosh: Alat carian ringan untuk Python

Whoosh: Alat carian ringan untuk Python

PHPz
PHPzke hadapan
2023-04-14 21:07:011558semak imbas

Whoosh: Alat carian ringan untuk Python

Pengenalan kepada Whoosh

Whoosh telah dicipta oleh Matt Chaput Ia bermula sebagai alat perkhidmatan carian yang mudah dan pantas untuk dokumentasi dalam talian bagi pakej perisian animasi 3D Houdini. Ia secara beransur-ansur menjadi alat penyelesaian carian matang dan telah menjadi sumber terbuka.

Whoosh ditulis semata-mata dalam Python Ia adalah alat enjin carian yang fleksibel, mudah dan ringan Ia kini menyokong kedua-dua Python2 dan 3. Kelebihannya adalah seperti berikut:

  • Whoosh adalah. semata-mata ditulis dalam Python, tetapi ia hanya memerlukan persekitaran Python dan tidak memerlukan pengkompil
  • menggunakan algoritma pengisihan Okapi BM25F secara lalai dan juga menyokong algoritma pengisihan lain; > adalah serupa Berbanding dengan enjin carian lain, Whoosh akan mencipta fail indeks yang lebih kecil;
  • Pengekodan fail indeks dalam Whoosh mestilah unicode;
  • Tapak web pengenalan rasmi Whoosh ialah: https://whoosh.readthedocs.io/en/latest/intro.html. Berbanding dengan alatan enjin carian matang seperti ElasticSearch atau Solr, Whoosh adalah lebih ringan dan mudah untuk dikendalikan, dan boleh dipertimbangkan untuk digunakan dalam projek carian kecil.
  • Indeks & pertanyaan

Bagi mereka yang biasa dengan ES, dua aspek penting carian ialah pemetaan dan pertanyaan, iaitu pembinaan indeks dan pertanyaan Di sebalik tabir ialah storan indeks yang kompleks, Penghuraian pertanyaan dan algoritma pengisihan, dsb. Jika anda mempunyai pengalaman dalam ES, maka Whoosh sangat mudah untuk dimulakan.

Menurut pemahaman pengarang dan dokumentasi rasmi Whoosh, penggunaan pengenalan Whoosh adalah terutamanya indeks dan pertanyaan. Salah satu ciri berkuasa enjin carian ialah keupayaannya untuk menyediakan perolehan semula teks penuh, yang bergantung pada algoritma pengisihan, seperti BM25, dan cara kami menyimpan medan. Oleh itu, apabila indeks digunakan sebagai kata nama, ia merujuk kepada indeks medan, dan apabila indeks digunakan sebagai kata kerja, ia merujuk kepada penubuhan indeks medan. Pertanyaan akan menggunakan algoritma pengisihan untuk memberikan hasil carian yang munasabah berdasarkan pernyataan yang kami perlukan untuk pertanyaan.

Mengenai penggunaan Whoosh, arahan terperinci telah diberikan dalam dokumen rasmi Penulis hanya memberikan contoh mudah di sini untuk menggambarkan bagaimana Whoosh boleh meningkatkan pengalaman carian kami dengan mudah.

Kod sampel

Data

Data sampel untuk projek ini ialah puisi.csv Gambar berikut ialah sepuluh baris pertama set data:

poem.csv

Whoosh: Alat carian ringan untuk PythonBidang

Berdasarkan ciri set data, kami mencipta empat medan (medan): tajuk, dinasti, penyair, kandungan . Kod yang dibuat adalah seperti berikut:

Antaranya, ID hanya boleh menjadi nilai unit dan tidak boleh dibahagikan kepada beberapa perkataan Ia sering digunakan untuk laluan fail, URL, tarikh dan kategori

Fail TEKS Kandungan teks diindeks dan disimpan, dan carian perbendaharaan kata disokong;
# -*- 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())
 )

Buat fail indeks

Seterusnya, kita perlu mencipta fail indeks. Kami menggunakan atur cara untuk menghuraikan fail poem.csv dahulu, menukarnya kepada indeks dan menulisnya ke direktori indexdir. Kod Python adalah seperti berikut:

Selepas indeks berjaya dibuat, direktori indexdir akan dijana, yang mengandungi fail indeks untuk setiap medan data poem.csv di atas.

Pertanyaan
# 解析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()

Selepas indeks berjaya dibuat, kami akan menggunakannya untuk membuat pertanyaan.

Contohnya, jika kita ingin menanyakan puisi yang mengandungi bulan terang dalam kandungan, kita boleh memasukkan kod berikut:

Hasil output adalah seperti berikut:

Atas ialah kandungan terperinci Whoosh: Alat carian ringan untuk Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam