Jaro-winkler benzerliğine giriş (tanım ve örnek)


İstatistikte Jaro-Winkler benzerliği iki dize arasındaki benzerliği ölçmenin bir yoludur.

İki dize arasındaki Jaro benzerliği (sim j ) şu şekilde tanımlanır:

sim j = 1/3 * ( m /|s 1 | + m/|s 2 | + (mt)/m )

Altın:

  • m : Eşleşen karakter sayısı
    • S 1 ve s 2’nin iki karakteri aynıysa ve birbirlerinden [max(|s 1 |, |s 2 |) / 2] – 1 karakterden fazla değilse eşleştiği kabul edilir.
  • |s 1 | , |s 2 | : Sırasıyla birinci ve ikinci dizelerin uzunluğu
  • t : Aktarım sayısı
    • Eşleşen karakter sayısının (ancak farklı bir sıra sırasıyla) 2’ye bölünmesiyle hesaplanır.

Jaro-Winkler benzerliği (sim w ) şu şekilde tanımlanır:

sim w = sim j + lp(1 – sim j )

Altın:

  • sim j : İki dize (s 1 ve s 2) arasındaki Jaro benzerliği
  • l : Dizenin başlangıcındaki ortak önekin uzunluğu (en fazla 4 karakter)
  • p : Ortak öneklere sahip olmak için puanın ne kadar yukarıya doğru ayarlandığını gösteren ölçeklendirme faktörü. Tipik olarak bu, p = 0,1 olarak tanımlanır ve p = 0,25’i aşmamalıdır.

İki dize arasındaki Jaro-Winkler benzerliği her zaman 0 ile 1 arasındadır; burada:

  • 0, dizeler arasında benzerlik olmadığını gösterir
  • 1, dizelerin tam olarak eşleştiğini gösterir

Not : Jaro-Winkler mesafesi 1 – sim w olarak tanımlanacaktır.

Aşağıdaki örnekte iki dize arasındaki Jaro-Winkler benzerliğinin pratikte nasıl hesaplanacağı gösterilmektedir.

Örnek: iki dize arasındaki Jaro-Winkler benzerliğinin hesaplanması

Aşağıdaki iki dizeye sahip olduğumuzu varsayalım:

  • Kanal 1 (s 1 ): fare
  • Kanal 2 (s 2 ): sessiz

Öncelikle bu iki string arasındaki Jaro benzerliğini hesaplayalım:

sim j = 1/3 * ( m /|s 1 | + m/|s 2 | + (mt)/m )

Altın:

  • m : Eşleşen karakter sayısı
    • S 1 ve s 2’nin iki karakteri aynıysa ve birbirlerinden [max(|s 1 |, |s 2 |) / 2] – 1 karakterden fazla değilse eşleştiği kabul edilir.

Bu durumda [max(|s 1 |, |s 2 |) / 2] – 1, 5/2 – 1 = 1,5 olarak hesaplanır. Karşılık gelen üç harfi tanımlarız: m, u, e. Yani m = 3 .

  • |s 1 | , |s 2 | : Sırasıyla birinci ve ikinci dizelerin uzunluğu

Bu durumda, |s 1 | = 5 ve |s 1 | = 4 .

  • t : Aktarım sayısı
    • Eşleşen karakter sayısının (ancak farklı bir sıra sırasıyla) 2’ye bölünmesiyle hesaplanır.

Bu durumda eşleşen üç karakter vardır ancak bunlar zaten aynı sıralı sıradadır, yani t = 0 .

Yani Jaro benzerliğini şu şekilde hesaplayabiliriz:

sim j = 1/3 * (3/5 + 3/4 + (3-0)/3) = 0,78333.

Daha sonra Jaro-Winkler benzerliğini (sim w ) şu şekilde hesaplayalım:

sim w = sim j + lp(1 – sim j )

Bu durumda şunu hesaplayacağız:

sim w = 0,78333 + (1)*(0,1)(1 – 0,78333) = 0,805.

İki zincir arasındaki Jaro-Winkler benzerliği 0,805’tir .

Bu değerin 1’e yakın olması bize iki dizenin çok benzer olduğunu söyler.

R’deki iki dize arasındaki Jaro-Winkler benzerliğini hesaplayarak bunun doğru olduğunu doğrulayabiliriz:

 library (stringdist)

#calculate Jaro-Winkler similarity between 'mouse' and 'mute'
1 - stringdist("mouse", "mute", method = "jw", p= 0.1 )

[1] 0.805

Bu bizim manuel olarak hesapladığımız değere karşılık geliyor.

Ek kaynaklar

Aşağıdaki eğitimlerde diğer benzerlik metriklerinin nasıl hesaplanacağı açıklanmaktadır:

Bray-Curtis farklılığına giriş
Jaccard benzerlik indeksine giriş

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir