Menggunakan pustaka FuzzyWuzzy untuk perbandingan fuzzy dalam Python. Levenshtein Distance (jarak editorial)

Dia tidak yakin bahwa dia mendengar dengan benar. Sangat tergantung padanya! Tapi jangan tanya lagi? (c) Boris Akunin. Seluruh dunia adalah teater.

Saat mengerjakan asisten suara yang disebutkan dalam artikel sebelumnya , saya menyadari bahwa saya tidak bisa membantu tetapi berbagi perpustakaan FuzzyWuzzy yang indah dengan Anda .

Singkatnya, berkat dia, adalah mungkin untuk membuat perbandingan string fuzzy tanpa ada penderitaan.

Langkah pertama


Untuk memulai, Anda perlu melakukan dua langkah:

/ PENTING! Python versi 2.7 dan lebih tinggi /

Langkah 1. Instalasi.

Buka baris perintah dan masukkan:

pip install fuzzywuzzy

Tekan enter.
Selanjutnya, instal python-Levenshtein dengan cara yang sama untuk mempercepat pencocokan string sebanyak 3-10 kali.

pip install python-Levenshtein

Setelah instalasi selesai, perpustakaan siap untuk diimpor.

Langkah 2. Mengimpor ke dalam proyek.

from fuzzywuzzy import fuzz
from fuzzywuzzy import process

Fungsional


1. Perbandingan paling umum:

a = fuzz.ratio(' ', ' ')
print(a)
#  : 100

Jika kita mengubah beberapa karakter, maka outputnya akan mendapatkan angka yang berbeda.

a = fuzz.ratio(' ', ' ')
print(a)
#  : 84

2. Perbandingan parsial.

Jenis perbandingan ini di seluruh baris kedua mencari kecocokan dengan yang awal, misalnya:

a = fuzz.partial_ratio(' ', ' !')
print(a)
#  : 100

Atau

a = fuzz.partial_ratio(' ', ' ,  ')
print(a)
#  : 100

Tetapi Anda harus ingat tentang register, karena

a = fuzz.partial_ratio(' ', ' ,  ')
print(a) 

#  : 90


3. Perbandingan

Token 1) Token Sorting Ratio

Kata-kata dibandingkan satu sama lain, terlepas dari kasus atau pesanan

a = fuzz.token_sort_ratio('  ', '  ')
print(a)
#  : 100

a = fuzz.token_sort_ratio('  ', '   ')
print(a)
#  : 78

a = fuzz.token_sort_ratio('1 2   ', '1   2 ')
print(a)
#  : 100

2) Token Set Ratio Perbandingan
ini, tidak seperti masa lalu, menyamakan string, jika perbedaannya adalah pengulangan kata-kata.

a = fuzz.token_set_ratio('  ', '     ')
print(a)
#  : 100

4. Perbandingan reguler lanjutan.

Dalam banyak kasus, lebih disarankan untuk menggunakan WRatio dengan tepat , karena case-sensitive dan tanda baca (tidak membagi string)

a = fuzz.WRatio('  ', '!  !')
print(a)
#  : 100

a = fuzz.WRatio('  ', '!,  !')
print(a)
#  : 97

5. Bekerja dengan daftar

Untuk membandingkan garis dengan garis dari daftar, modul proses digunakan

city = ["", "-", "", "", "", "", "", "", "", "", ""]
a = process.extract("", city, limit=2)
#  limit     5
print(a)
#  : [('', 100), ('', 62)]

Jika hanya yang pertama dalam daftar diperlukan, maka lebih baik menggunakan extractOne

city = ["", "-", "", "", "", "", "", "", "", "", ""]
a = process.extractOne("", city)
print(a)
#  : ('', 90)

Aplikasi


Bagaimana dan di mana menerapkan semua hal di atas terserah Anda, tetapi berikut ini adalah contoh dari makalah saya :

#    
try:
    files = os.listdir('C:\\Users\\hartp\\Desktop\\')
    filestart = process.extractOne(namerec, files)
    if filestart[1] >= 80:
        os.startfile('C:\\Users\\hartp\\Desktop\\' + filestart[0])
    else:
        speak('  ')
except FileNotFoundError:
    speak('  ')

Mari kita membahas kodenya dan memahami apa itu. Dengan

perintah os.listdir, kami mendapatkan daftar semua file yang ada di akhir jalur yang ditentukan (dalam kasus kami, ke desktop).

files = os.listdir('C:\\Users\\hartp\\Desktop\\')
print(files)
#  : 'Visual Studio 2019.lnk', 'Visual Studio Code.lnk', 'WarThunder.lnk', 'WpfApp14', 'Yandex.lnk', '.docx', '.txt', ' .txt'  ..

Berikutnya adalah perbandingan garis daftar file dengan nama file yang dinamai pengguna (variabel namerec ). Saya harap Anda memperhatikan bahwa hasil dari fungsi extractOne adalah tupel string dan angka (indeks kesamaan)

Contoh dari bab terakhir
city = ["", "-", "", "", "", "", "", "", "", "", ""]
a = process.extractOne("", city)
print(a)
#  : ('', 90)
.

Berdasarkan ini, kami memeriksa indeks kesamaan filestart [1]> = 80 ([1], karena tuple diberi nomor dari 0, seperti dalam array) dan, jika kondisinya benar, maka jalankan fungsi os.startfile dengan file yang disebut filestart [0] ] Jika tidak, jika indeks kesamaan kurang dari 80 atau terjadi kesalahan bahwa file tidak ditemukan, kami memberi tahu pengguna melalui fungsi bicara .

Semua jalan menuju ke Matan


Tersembunyi dari orang yang takut matematika
, , (). , .

( , ) — , .
S1 i S2 j
S1=vrhk
S2=rhgr

3 :

  1. : r → v
  2. : -r
  3. : rVhgr

:



0 1? ( — «0»), r , r ( , — «1»). v .

rh h, r ( ), , :



v r ( ).

, — v.

1. ? r , v. r , v, rv. , v v.



v rh



— v h r .



.



vr r , , , , .





vrh r h ( vr r), 2





vr r vrh rh, , .



, vrh rhg , , , - ( ).

, , ( ) — vrhk rhgr.

Terima kasih atas perhatian Anda! Semoga artikel ini bermanfaat bagi seseorang.


All Articles