
Pencarian teks fuzzy dan semantik yang cepat, ringan, dan dapat disesuaikan dan semantik di Python.
Neofuzz adalah perpustakaan pencarian fuzzy berdasarkan vektorisasi dan perkiraan teknik pencarian tetangga terdekat.
Sekarang Anda dapat memesan ulang hasil pencarian Anda menggunakan jarak levenshtein! Terkadang proses N-gram atau proses yang di vektor tidak cukup memesan hasil dengan benar. Dalam kasus ini Anda dapat mengambil jumlah contoh yang lebih tinggi dari corpus yang diindeks, kemudian memperbaiki hasil tersebut dengan jarak levenshtein.
from neofuzz import char_ngram_process
process = char_ngram_process ()
process . index ( corpus )
process . extract ( "your query" , limit = 30 , refine_levenshtein = True )Sebagian besar perpustakaan pencarian fuzzy mengandalkan mengoptimalkan neraka dari pasangan algoritma pencarian fuzzy yang sama (jarak hamming, jarak levenshtein). Kadang -kadang sayangnya karena kompleksitas algoritma ini, tidak ada jumlah optimasi yang akan memberi Anda kecepatan, yang Anda inginkan.
Neofuzz membuat realisasi, bahwa Anda tidak dapat melampaui batas kecepatan tertentu dengan mengandalkan algoritma tradisional, dan menggunakan vektorisasi teks dan mendekati pencarian tetangga terdekat di ruang vektor untuk mempercepat proses ini.
Ketika datang ke dilema kecepatan versus akurasi, Neofuzz menggunakan kecepatan penuh.
Anda dapat menginstal neofuzz dari pypi:
pip install neofuzz Jika Anda menginginkan pengalaman plug-and play, Anda dapat membuat proses cepat dan kotor yang umumnya dengan proses char_ngram_process() .
from neofuzz import char_ngram_process
# We create a process that takes character 1 to 5-grams as features for
# vectorization and uses a tf-idf weighting scheme.
# We will use cosine distance for the nearest neighbour search.
process = char_ngram_process ( ngram_range = ( 1 , 5 ), metric = "cosine" , tf_idf = True )
# We index the options that we are going to search in
process . index ( options )
# Then we can extract the ten most similar items the same way as in
# thefuzz
process . extract ( "fuzz" , limit = 10 )
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[( 'fuzzer' , 67 ),
( 'Januzzi' , 30 ),
( 'Figliuzzi' , 25 ),
( 'Fun' , 20 ),
( 'Erika_Petruzzi' , 20 ),
( 'zu' , 20 ),
( 'Zo' , 18 ),
( 'blog_BuzzMachine' , 18 ),
( 'LW_Todd_Bertuzzi' , 18 ),
( 'OFU' , 17 )]Anda dapat menyesuaikan perilaku Neofuzz dengan membuat proses khusus. Di bawah kap setiap proses neofuzz bergantung pada dua komponen yang sama:
Jika Anda lebih tertarik pada kata/konten semantik dari teks, Anda juga dapat menggunakannya sebagai fitur. Ini bisa sangat berguna terutama dengan teks yang lebih panjang, seperti karya sastra.
from neofuzz import Process
from sklearn . feature_extraction . text import TfidfVectorizer
# Vectorization with words is the default in sklearn.
vectorizer = TfidfVectorizer ()
# We use cosine distance because it's waay better for high-dimentional spaces.
process = Process ( vectorizer , metric = "cosine" )Anda mungkin menemukan bahwa kecepatan proses pencarian fuzzy Anda tidak cukup. Dalam hal ini mungkin diinginkan untuk mengurangi dimensi vektor yang dihasilkan dengan beberapa metode dekomposisi matriks atau model topik.
Di sini misalnya saya menggunakan NMF (model topik yang sangat baik dan sangat cepat juga) juga mempercepat pipa pencarian fuzzy saya.
from neofuzz import Process
from sklearn . feature_extraction . text import TfidfVectorizer
from sklearn . decomposition import NMF
from sklearn . pipeline import make_pipeline
# Vectorization with tokens again
vectorizer = TfidfVectorizer ()
# Dimensionality reduction method to 20 dimensions
nmf = NMF ( n_components = 20 )
# Create a pipeline of the two
pipeline = make_pipeline ( vectorizer , nmf )
process = Process ( pipeline , metric = "cosine" )Dengan neofuzz Anda dapat dengan mudah menggunakan semantik yang menguntungkan Anda, dan dapat menggunakan kedua model bahasa berbasis perhatian (BerT), hanya kata-kata saraf sederhana atau embeddings dokumen (Word2Vec, Doc2Vec, FastText, dll.) Atau bahkan LLM Openai.
Kami sarankan Anda mencoba Embetter, yang memiliki banyak vektoris yang kompatibel dengan SkLearn.
pip install embetter from embetter . text import SentenceEncoder
from neofuzz import Process
# Here we will use a pretrained Bert sentence encoder as vectorizer
vectorizer = SentenceEncoder ( "all-distilroberta-v1" )
# Then we make a process with the language model
process = Process ( vectorizer , metric = "cosine" )
# Remember that the options STILL have to be indexed even though you have a pretrained vectorizer
process . index ( options )