Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penggunaan alat carian ringan Python Whoosh (perkongsian ringkasan)

Penggunaan alat carian ringan Python Whoosh (perkongsian ringkasan)

WBOY
WBOYke hadapan
2022-07-26 14:03:412979semak imbas

Artikel ini membawa anda pengetahuan yang berkaitan tentang Python Ia akan memperkenalkan secara ringkas Whoosh, alat carian ringan dalam Python, dan memberikan kod contoh penggunaan yang sepadan, seperti berikut Mari kita lihat, saya harap ia akan. berguna kepada semua orang.

Penggunaan alat carian ringan Python Whoosh (perkongsian ringkasan)

[Cadangan berkaitan: Tutorial video Python3 ]

Artikel ini akan memperkenalkan Whoosh, alat carian ringan dalam Python Dan berikan kod contoh penggunaan yang sepadan.

Pengenalan 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, dan kemudian perlahan-lahan menjadi The matang. alat penyelesaian carian telah menjadi sumber terbuka.

Whoosh ditulis 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:

Bidang

Mengikut 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 klasifikasi

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.

Sebagai contoh, jika kita ingin menanyakan ayat-ayat yang mengandungi

dalam kandungan, kita boleh memasukkan kod berikut:

Hasil output adalah seperti berikut: 明月

Sebanyak 44 dokumen ditemui.
10 dokumen pertama adalah seperti berikut:
{"content": "Terdapat cahaya bulan yang terang di hadapan katil, disyaki terdapat fros di atas tanah. Tengok ke atas pada bulan yang terang dan tundukkan kepala anda untuk berfikir tentang kampung halaman anda.", "dinasti": "Dinasti Tang", "penyair ": "Li Bai ", "tajuk": "Fikiran Malam Senyap"}
{"content": "Rumput di tepi, rumput di tepi, askar tua datang salji di selatan dan utara gunung, dan bulan cerah untuk beribu-ribu batu ", "dinasti": "Dinasti Tang", "penyair": "Dai Shulun", "title": "Tiao Xiao Ling·Bian Cao"}
{"content": "Duduk bersendirian di dalam buluh yang sunyi di dalam, orang di dalam hutan tidak tahu bahawa bulan yang terang datang shine. content": "Bulan terang bersinar di Sungai Han, dan angin musim luruh membasuh pakaian tetamu, tetapi masih ada debu ibu kota empayar.", "dinasti": "Dinasti Ming", "penyair ": "Bian Gong", "title": "Hadiah berat kepada Wu Guobin"}
{"content": "Bulan terang Dinasti Qin dan pas Dinasti Han, dan orang-orang yang berarak beribu-ribu mil belum kembali tetapi jeneral terbang Kota Naga ada di sini, dan mereka tidak akan mengajar Hu Ma untuk menyeberangi Pergunungan Yin.", "dinasti": "Dinasti Tang", "penyair": "Wang Changling", " title": "Dua puisi keluar dari kubu·Satu"}
{"content": "Jingkou Guazhou dipisahkan oleh air, dan Zhongshan tepat di seberangnya Angin musim bunga kembali menghijau di tebing selatan sungai. Bilakah bulan yang cerah menyinari saya lagi": "Melihat sekeliling, ada gunung dan air, dan keharuman bunga teratai adalah sepuluh batu jauhnya. "dynasty": "Dinasti Song", "poet": "Huang Tingjian", "title ": "Ezhou Nanlou Calligraphy"}
{"content": "Gunung hijau samar dan airnya jauh, dan rumput di selatan Sungai Yangtze tidak layu pada akhir musim luruh Pada malam bulan di Jambatan Dua Puluh Empat, di manakah keindahan itu boleh mengajar saya bermain seruling ", "dinasti ": "Dinasti Tang"? , "poet": "Du Mu", "title": "Kepada Hakim Han Chuo dari Yangzhou"}
{"content": "Udara embun sejuk dan cahaya sedang berkumpul, dan beruk menangis di dalam Dongting dari Chuqiu di bawah cahaya matahari, orang-orang di dalam bot Mulan bersinar di Guangze, dan arus bergelora di Pergunungan Cangshan membuat saya sedih pada waktu malam ": "Satu daripada Tiga Puisi Nostalgia di Sungai Chu "}
{"content": "Bulan terang bersinar di laut, dan kita pada saat ini di dunia Kekasih mengeluh tentang malam yang jauh, tetapi mereka bangun dengan cinta pada waktu petang apabila lilin dipadamkan. dan cahayanya penuh. Ia terlalu bagus untuk diberikan ", "dinasti": "Dinasti Tang", "penyair": "Zhang Jiuling", "tajuk": "Melihat bulan dan menghargai masa lalu"}

【Cadangan berkaitan:
Tutorial video Python3

Atas ialah kandungan terperinci Penggunaan alat carian ringan Python Whoosh (perkongsian ringkasan). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:jb51.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam