C# string benzerliği nasıl kontrol edilir?

II.Wilhelm

Hectopat
Katılım
11 Eylül 2020
Mesajlar
1.821
Çözümler
6
Yer
Almanya
Daha fazla  
Cinsiyet
Erkek
Meslek
König
Merhaba. Elimdeki iki tane string ifadenin benzerlik oranını nasıl bulabilirim? Stack Overflow da şöyle bir şey buldum ama bana oldukça karmaşık geldi.

 
Son düzenleyen: Moderatör:
Dilden bağımsız bir soru bu. İki stringin benzerliği çok farklı şekilde bulunabilir. Nasıl kiyaslayacagin sana kalmış. Zamanında insanlar çeşitli yöntemlere çeşitli isimler vermişler. Aklına gelecek yöntemler muhtemelen bunlardan biri olacaktır. Aklındaki yöntemi tarif etmelisin.

Soru eşit olup olmadığı olsa gayet kolaydı. Ama benzerlik istiyorsun. Tarif et. Senin dusuncendeki benzerliğin ne olduğunu anlat.

Mesela elma ve alma. İlk harfleri farklı. Türkçe varsayalım. A 1. Harf. E ise 6. Harf. Arada 5 fark var.
Başka örnek de zlma ile elma olsun. Bu sefer biri 6 iken diğeri 29. 23 fark var.
Bir başka örnek ise elmacı ve almacı.

Bir yöntemde tek harf farklı, hepsinin benzerlik miktarı aynı diyebilirsin. Birinde farklı olan harf diğerine kıyasla daha yakın, daha benzer olmalı diyebilirsin. Bir yöntemde ise 6 harften 5'i aynı, 4 harften 3'ünun aynı olmasına kıyasla daha benzer diyebilirsin. Hepsi kendince haklı. Başka yöntemler de var.

Ne istediğini biliyorsan anlat. Bilmiyorsan karar ver.

Daha da önemlisi asıl derdini söyle. Amacın iyi bir basketbol oyuncusu olmak iken boyumu nasıl uzatırım diye sorma. Nasıl daha iyi basketnol oyuncusu olurum de. Biz de bu sayede sana daha fazla pratik yap diyebilelim. Boyunu uzatmayı sorarsan gerçek çözümü sana söyleyebiliriz.

Yazıda ceşitli ek hataları falan vardır. Ikisindeki yazdığımda niyeyse ikisi deki yapan, n harfine boşluğa basmak yerine yanlışlıkla bastığımı sanan bir klavyem var. Normal insan anlar. Ama moderator anlamaz.
 
Dilden bağımsız bir soru bu. İki stringin benzerliği çok farklı şekilde bulunabilir. Nasıl kiyaslayacagin sana kalmış. Zamanında insanlar çeşitli yöntemlere çeşitli isimler vermişler. Aklına gelecek yöntemler muhtemelen bunlardan biri olacaktır. Aklındaki yöntemi tarif etmelisin.

Soru eşit olup olmadığı olsa gayet kolaydı. Ama benzerlik istiyorsun. Tarif et. Senin dusuncendeki benzerliğin ne olduğunu anlat.

Mesela elma ve alma. İlk harfleri farklı. Türkçe varsayalım. A 1. Harf. E ise 6. Harf. Arada 5 fark var.
Başka örnek de zlma ile elma olsun. Bu sefer biri 6 iken diğeri 29. 23 fark var.
Bir başka örnek ise elmacı ve almacı.

Bir yöntemde tek harf farklı, hepsinin benzerlik miktarı aynı diyebilirsin. Birinde farklı olan harf diğerine kıyasla daha yakın, daha benzer olmalı diyebilirsin. Bir yöntemde ise 6 harften 5'i aynı, 4 harften 3'ünun aynı olmasına kıyasla daha benzer diyebilirsin. Hepsi kendince haklı. Başka yöntemler de var.

Ne istediğini biliyorsan anlat. Bilmiyorsan karar ver.

Daha da önemlisi asıl derdini söyle. Amacın iyi bir basketbol oyuncusu olmak iken boyumu nasıl uzatırım diye sorma. Nasıl daha iyi basketnol oyuncusu olurum de. Biz de bu sayede sana daha fazla pratik yap diyebilelim. Boyunu uzatmayı sorarsan gerçek çözümü sana söyleyebiliriz.

Yazıda ceşitli ek hataları falan vardır. Ikisindeki yazdığımda niyeyse ikisi deki yapan, n harfine boşluğa basmak yerine yanlışlıkla bastığımı sanan bir klavyem var. Normal insan anlar. Ama moderator anlamaz.
Amacım basitte olsa bir arama motoru yapmak. Mesela kullanıcı Arama kutusuna "okula gitmek" yazsada, "okul gitmke" yazsada benzer sonuç dönsün istiyorum.
 
Merhaba, bir yerde kelimeler için sözlük gibi bir şey tutabilirsiniz (okul, gitmek gibi kelimeleri içerecek), kullanıcı bir şey arattığında (okula gitmke diye yanlış yazılmış bir şey aratıyor diyelim), kelimelere olan benzerliği bulacak algoritma yazılabilir, buradaki algoritmadaki complexity size kalmış, ben olsam alıştırma için regex kullanarak bir şeyler denerdim. Mesela okula kelimesini düşünün, "o" ile başlayan kelimeler diye sözlüğüme bakardım, o ile başlayan çok fazla kelime var ise search işlemini "ok" ile tekrar yapardım, gene çok fazla sonuç varsa "oku" ile denerdim ihtimaller çok azalana kadar, sondan aratma yapılabilir, kelimedeki harf sayısına yakın kelimeler buldurulabilir vb. Tabi sözlüğünüze arama için dile mahsus kuralları eklemeniz gerekiyor, mesela gitmek kelimesini git + mek (ve diğer çok sayıda Türkçeye mahsus ek) şeklinde eklemek daha iyi sonuç verecektir. Bu tür kuralları düşünmeniz lazım.
 
Sadece kelime benzerliği değil. Çok daha fazlası gerekiyor. Yer elması dediğimde elmas değil, elma anlayacak. Şu an aklıma Türkçe örnek gelmedi ama price-prize, cost-coast gibi şeyleri de ayırt edecek bir şey gerekiyor. Yanlış yazıldığında var olan bir kelime olan şeyler yani.
Var-far olabilir. Birisi kaç tane gezegen far yazdığında onun aslında var olduğunu anlamalı.

Hakim olduğum bir alan değil. Internette yapanı tonla vardır. Örneklere bakın. Tekerleği yeniden icat etmekle boşuna uğraşmayın.
 
Karakterlerini tek tek karşılaştırmalısın.

Muş ve Muz'dan gidelim;

Java:
string a = "muş";
string b = "muz";
int say = 0;
bool benziyor;



for(int i = 0; i<3; i++) // i < a.length yada b.length hangisi uzun ise onu yada kısa olanı da alabilirsin
{
 
    if(a[i] == b[i])
    {
        benziyor = true;
    }else
    {
        benziyor = false
        break;

    }
 
    if(benziyor)
    {
        say++;
    }
}

Console.WriteLine("benzerlik oranı " + (float) say/b.Length);

//b.length yerine en uzun harflere sahip olan stringi getirmelisin.
 
Son düzenleme:

Yeni konular

Geri
Yukarı