Paket ini tidak dipelihara, dan kami tidak mempunyai rencana untuk memeliharanya.
Kami menyarankan Anda untuk menggunakannya sebagai contoh, mungkin menyalin kode ke proyek Anda sendiri, tetapi jangan menginstal paketnya.
Paket ini untuk menggantikan kelas Dokumen Wagtail dengan kelas yang memungkinkan pencarian konten file Dokumen menggunakan textract.
Textract dapat mengekstrak teks dari (antara lain) file PDF, Excel, dan Word.
Paket ini terinspirasi oleh masalah "Pencarian: Ekstrak teks dari dokumen" di Wagtail.
Dokumen akan berfungsi seperti sebelumnya, kecuali Pencarian dokumen di antarmuka admin Wagtail juga akan menemukan istilah pencarian di konten file.
Beberapa tangkapan layar untuk diilustrasikan.
Di situs Wagtail baru kami dengan wagtail_textract
terpasang, kami mengunggah file bernama test_document.pdf
dengan teks tulisan tangan di dalamnya. Itu tercantum di antarmuka admin di bawah Dokumen:
Jika sekarang kita mencari di Dokumen untuk kata correct
, yang merupakan salah satu kata tulisan tangan, pencarian langsung akan menemukannya:
Asumsinya adalah pencarian ini tidak hanya tersedia di antarmuka admin Wagtail, tetapi juga dalam tampilan pencarian publik, yang kami berikan contoh kodenya.
Kami telah menggunakan paket ini dalam produksi sejak Agustus 2018 di https://nuffic.nl.
wagtail_textract
ke kebutuhan Anda dan/atau pip install wagtail_textract
INSTALLED_APPS
Anda.WAGTAILDOCS_DOCUMENT_MODEL = "wagtail_textract.document"
dalam pengaturan Django Anda.Catatan: Anda akan mendapatkan peringatan ketidakcocokan selama instalasi wagtail_textrac (Wagtail 2.0.1 diinstal):
requests 2.18.4 has requirement chardet<3.1.0,>=3.0.2, but you'll have chardet 2.3.0 which is incompatible.
textract 1.6.1 has requirement beautifulsoup4==4.5.3, but you'll have beautifulsoup4 4.6.0 which is incompatible.
Kami belum melihat hal ini menimbulkan masalah, namun hal ini perlu diingat.
Untuk membuat textract
menggunakan Tesseract, yang terjadi jika textract
biasa tidak menemukan teks, Anda perlu menambahkan file data yang menjadi dasar pencocokan kata Tesseract.
Buat direktori tessdata
di direktori proyek Anda, dan unduh bahasa yang Anda inginkan.
Transkripsi dilakukan secara otomatis setelah Penyimpanan dokumen, dalam pelaksana asyncio
untuk mencegah pemblokiran respons selama pemrosesan.
Untuk menyalin semua Dokumen yang ada, jalankan perintah manajemen ::
./manage.py transcribe_documents
Tentu saja ini mungkin memakan waktu lama.
Berikut adalah contoh kode untuk tampilan pencarian (di luar antarmuka admin Wagtail) yang menampilkan hasil Halaman dan Dokumen.
from itertools import chain
from wagtail . core . models import Page
from wagtail . documents . models import get_document_model
def search ( request ):
# Search
search_query = request . GET . get ( 'query' , None )
if search_query :
page_results = Page . objects . live (). search ( search_query )
document_results = Document . objects . search ( search_query )
search_results = list ( chain ( page_results , document_results ))
# Log the query so Wagtail can suggest promoted results
Query . get ( search_query ). add_hit ()
else :
search_results = Page . objects . none ()
# Render template
return render ( request , 'website/search_results.html' , {
'search_query' : search_query ,
'search_results' : search_results ,
})
Templat Anda harus memungkinkan penanganan Dokumen secara berbeda dari Halaman, karena Anda tidak dapat melakukan pageurl result
pada Dokumen:
{% if result . file %}
< a href = " {{ result.url }} " >{{ result }}</ a >
{% else %}
< a href = " {% pageurl result %} " >{{ result }}</ a >
{% endif %}
Untuk menggunakan wagtail_texttract, model CustomizedDocument
Anda harus melakukan hal yang sama seperti Dokumen wagtail_texttract:
TranscriptionMixin
search_fields
from wagtail_textract . models import TranscriptionMixin
class CustomizedDocument ( TranscriptionMixin , ...):
"""Extra fields and methods for Document model."""
search_fields = ... + [
index . SearchField (
'transcription' ,
partial_match = False ,
),
]
Perhatikan bahwa kelas pertama yang menjadi subkelas haruslah TranscriptionMixin
, sehingga save()
-nya lebih diutamakan daripada kelas induk lainnya.
Untuk menjalankan pengujian, periksa repositori ini dan:
make test
Laporan cakupan akan dibuat di ./coverage_html_report/
.