Pencarian teks lengkap cepat berdasarkan BM25
wink-bm25-text-search , berdasarkan BM25-algoritma r Robabilistic R robabilistic untuk pengambilan dokumen, adalah paket pencarian teks lengkap untuk mengembangkan aplikasi di lingkungan Node.js atau browser. Ini membangun indeks pencarian dalam memori dari input dokumen JSON, yang dioptimalkan untuk ukuran dan kecepatan.
Jelajahi Contoh Pencarian Teks Wink BM25 untuk menggali lebih dalam:
Kodenya tersedia dalam repo showcase-bm25-text-search bersama dengan posting blog terperinci.
Sangat mudah untuk menambahkan rasa semantik ke pencarian oleh:
Menetapkan bobot numerik yang berbeda ke bidang. Bobot lapangan negatif akan menarik skor dokumen setiap kali kecocokan dengan bidang itu terjadi.
Menggunakan fitur pemrosesan teks yang kaya dari Wink-NLP seperti deteksi negasi , batang , lemmatisasi , deteksi kata berhenti dan deteksi entitas yang disebutkan untuk melakukan pencarian cerdas.
Mendefinisikan tugas persiapan teks yang berbeda secara terpisah untuk bidang dan teks permintaan.
Gunakan NPM untuk menginstal:
npm install wink-bm25-text-search --save // Load wink-bm25-text-search
var bm25 = require ( 'wink-bm25-text-search' ) ;
// Create search engine's instance
var engine = bm25 ( ) ;
// Load sample data (load any other JSON data instead of sample)
var docs = require ( 'wink-bm25-text-search/sample-data/demo-data-for-wink-bm25.json' ) ;
// Load wink nlp and its model
const winkNLP = require ( 'wink-nlp' ) ;
// Use web model
const model = require ( 'wink-eng-lite-web-model' ) ;
const nlp = winkNLP ( model ) ;
const its = nlp . its ;
const prepTask = function ( text ) {
const tokens = [ ] ;
nlp . readDoc ( text )
. tokens ( )
// Use only words ignoring punctuations etc and from them remove stop words
. filter ( ( t ) => ( t . out ( its . type ) === 'word' && ! t . out ( its . stopWordFlag ) ) )
// Handle negation and extract stem of the word
. each ( ( t ) => tokens . push ( ( t . out ( its . negationFlag ) ) ? '!' + t . out ( its . stem ) : t . out ( its . stem ) ) ) ;
return tokens ;
} ;
// Contains search query.
var query ;
// Step I: Define config
// Only field weights are required in this example.
engine . defineConfig ( { fldWeights : { title : 1 , body : 2 } } ) ;
// Step II: Define PrepTasks pipe.
// Set up 'default' preparatory tasks i.e. for everything else
engine . definePrepTasks ( [ prepTask ] ) ;
// Step III: Add Docs
// Add documents now...
docs . forEach ( function ( doc , i ) {
// Note, 'i' becomes the unique id for 'doc'
engine . addDoc ( doc , i ) ;
} ) ;
// Step IV: Consolidate
// Consolidate before searching
engine . consolidate ( ) ;
// All set, start searching!
query = 'not studied law' ;
// `results` is an array of [ doc-id, score ], sorted by score
var results = engine . search ( query ) ;
// Print number of results.
console . log ( '%d entries found.' , results . length ) ;
// -> 1 entries found.
// results[ 0 ][ 0 ] i.e. the top result is:
console . log ( docs [ results [ 0 ] [ 0 ] ] . body ) ;
// -> George Walker Bush (born July 6, 1946) is an...
// -> ... He never studied Law...
// Whereas if you search for `law` then multiple entries will be
// found except the above entry! Catatan:
Node.js versi 16 atau 18 diperlukan untuk winknlp.
Wink-NLP-utils tetap tersedia untuk mendukung kode warisan. Silakan merujuk ke Wink-BM25-Text-Search Version 3.0.1 untuk contoh Wink-NLP-UTIL.
defineConfig( config ) Mendefinisikan konfigurasi dari objek config . Objek ini mendefinisikan 3 properti berikut:
fldWeights (wajib) adalah objek di mana setiap kunci adalah nama bidang dokumen dan nilainya adalah bobot numerik yaitu pentingnya bidang itu.
bm25Params (opsional) juga merupakan objek yang mendefinisikan hingga 3 kunci yaitu. k1 , b , dan k Nilai default mereka masing -masing adalah 1.2 , 0.75 , dan 1 . Catatan: k1 mengontrol saturasi TF; b mengontrol tingkat normalisasi, dan k mengelola IDF.
ovFldNames (opsional) adalah array yang berisi nama -nama bidang, yang nilai aslinya harus dipertahankan. Ini berguna dalam mengurangi ruang pencarian menggunakan filter di panggilan API search() .
definePrepTasks( tasks [, field ] ) Menentukan tasks persiapan teks untuk mengubah teks yang masuk mentah menjadi array token yang diperlukan selama operasi addDoc() , dan search() . Ini mengembalikan jumlah tasks .
tasks harus berupa serangkaian fungsi. Fungsi pertama dalam array ini harus menerima string sebagai input; dan fungsi terakhir harus mengembalikan array token sebagai string JavaScript. Setiap fungsi harus menerima satu argumen input dan mengembalikan nilai tunggal.
Argumen kedua - field adalah opsional. Ini mendefinisikan field dokumen yang tasks akan ditentukan; Dengan tidak adanya argumen ini, tasks menjadi default untuk yang lainnya. Konfigurasi harus didefinisikan melalui defineConfig() sebelum panggilan ini.
addDoc( doc, uniqueId ) Menambahkan doc dengan uniqueId ke model BM25. Sebelum menambahkan dokumen, defineConfig() dan definePrepTasks() harus dipanggil. Ia menerima dokumen JSON terstruktur sebagai input untuk membuat model. Berikut ini adalah contoh struktur dokumen dari data sampel JSON yang terkandung dalam paket ini:
{
title: 'Barack Obama',
body: 'Barack Hussein Obama II born August 4, 1961 is an American politician...'
tags: 'democratic nobel peace prize columbia michelle...'
}
Data sampel dibuat menggunakan kutipan dari artikel Wikipedia seperti yang ada di Barack Obama.
Ini memiliki alias learn( doc, uniqueId ) untuk mempertahankan keseragaman tingkat API di berbagai paket wink seperti wink-naive-bayes-text-classifier.
consolidate( fp ) Mengkonsolidasikan model BM25 untuk semua dokumen yang ditambahkan. fp mendefinisikan presisi di mana nilai frekuensi istilah disimpan. Nilai standarnya adalah 4 dan cukup baik untuk sebagian besar situasi. Ini adalah prasyarat untuk search() dan dokumen tidak dapat ditambahkan konsolidasi pos.
search( text [, limit, filter, params ] ) Mencari text dan mengembalikan limit jumlah hasil. filter harus berupa fungsi yang harus mengembalikan true atau false berdasarkan params . Anggap saja sebagai fungsi filter JavaScript Array. Ia menerima dua argumen yaitu. (a) Suatu objek yang berisi nama bidang/nilai pasangan sebagaimana didefinisikan melalui ovFldNames di defineConfig() , dan (b) params .
limit tiga argumen terakhir, filter dan params adalah opsional. Nilai default limit adalah 10 .
Hasilnya adalah array [ uniqueId, relevanceScore ] , diurutkan di relevanceScore .
Seperti addDoc() , ia juga memiliki predict( doc, uniqueId ) untuk mempertahankan keseragaman tingkat API di berbagai paket wink seperti wink-naive-bayes-text-classifier.
exportJSON()Model BM25 dapat diekspor sebagai teks JSON yang dapat disimpan dalam file. Merupakan ide yang baik untuk mengekspor JSON sebelum konsolidasi dan menggunakan hal yang sama setiap kali lebih banyak dokumen perlu ditambahkan; Sedangkan JSON diekspor setelah konsolidasi hanya baik untuk operasi pencarian.
importJSON( json ) Model JSON BM25 yang ada dapat diimpor untuk pencarian. Sangat penting untuk memanggil definePrepTasks() sebelum mencoba mencari.
reset()Ini sepenuhnya mengatur ulang model BM25 dengan menginisialisasi ulang semua variabel, kecuali tugas persiapan.
Ini memberikan metode aksesor berikut:
getDocs() mengembalikan frekuensi istilah & panjang setiap dokumen.getTokens() mengembalikan token: index .getIDF() mengembalikan IDF untuk setiap token. Token dirujuk melalui indeks numerik mereka, yang diakses melalui getTokens() .getConfig() Mengembalikan konfigurasi BM25F sebagaimana diatur oleh defineConfig() .getTotalCorpusLength() Mengembalikan jumlah total token di semua dokumen yang ditambahkan.getTotalDocs() Mengembalikan dokumen total yang ditambahkan.Catatan: Aksesor ini mengekspos beberapa struktur data internal dan seseorang harus menahan diri untuk tidak memodifikasinya. Ini dimaksudkan secara eksklusif untuk tujuan baca saja. Setiap modifikasi yang disengaja atau tidak disengaja dapat mengakibatkan kerusakan yang serius dari paket tersebut.
Jika Anda melihat bug dan hal yang sama belum dilaporkan, angkat masalah baru atau pertimbangkan untuk memperbaikinya dan mengirimkan permintaan tarik.
Winkjs adalah keluarga paket open source untuk pemrosesan bahasa alami , analisis statistik , dan pembelajaran mesin di nodeJS. Kode ini didokumentasikan secara menyeluruh untuk pemahaman manusia yang mudah dan memiliki cakupan uji ~ 100% untuk keandalan untuk membangun solusi tingkat produksi.
Wink-BM25-Text-Search adalah Hak Cipta 2017-22 Graype Systems Private Limited.
Ini dilisensikan berdasarkan ketentuan lisensi MIT.