July 31, 2022

Merhaba,

Sizden İngilizce tekil/çoğul ayrımı yapabilen bir kod yazmanız isteniyor. Öyle -s ve -es eklerine bakarım demeyin çünkü istisnalar ve yazım hataları olabilir. Örneğin İngilizce çoğulları (ax) baltalar == axes olabilirken, (ox) öküzler == oxen oluyor. Bir de yazım hatalarına örnek verelim:

void main()
{
  import std.string : split;
  auto test = "I hav e a car  s";
  auto result = split!string(test, " ");
  // ["I", "hav", "e", "a", "car", "", "s"]

  auto tilly = result[2]; // extra character
  auto solecism = result[3]; // car is plural
  auto doubled = result[5]; // doubled separator

  import std.stdio : writeln;
  writeln(tilly, solecism, doubled);
}

Test cümlemiz şu şekilde olabilirdi:

  auto test = SpellCheck("kids sliced ​​oxen with axes", Mode.plural)

Elbette bulanık mantık ve kapsamlı bir sözlüğe de ihtiyacımız var. Örneğin ben öznenin/işi yapanın (-kid) olduğunu ve sonundaki çoğul -s ekinden anlayabiliyorum. Ama -children olduğunda bunu ancak dicts.plural sözlüğünden anlayabilirdik.

Diyelim ki küçük bir sözlüğümüz ve de gereksiz karakterlerden arındıran bir splitter'ımız var. Nesneyi kurup listWords()'ü çağırdığımızda, gelen string[]'i en az sözlük veritabanı ile ve yazım hatalarından hiç etkilenmeden nasıl oluşturabilirdik. Yani önceliklerimiz (ilk cümlede Google Translate "have a car" olarak algılıyor) ne olurdu?

Teşekkürler...

August 08, 2022
On 7/31/22 11:09, Salih Dincer wrote:

>    auto test = "I hav e a car  s";

[...]

> Yani önceliklerimiz (ilk cümlede
> Google Translate "have a car" olarak algılıyor) ne olurdu?

Hiç emin değilim ama galiba Google, bir kaç olasılığı bir çok sunucuda birden işletiyor ve sonra sonuçları birleştiriyor. Örneğin, bir sunucu "şu harfle başlayan en yaygın yazım hataları" algoritmasını yürütürken bir başkası Levenshtein Distance'ı[1] uyguluyor olabilir, vs. Sonra istatistiksel ve belki bağlamı da göze alan (örneğin, yakın cümlelerde "car" ile ilgili kavramlar geçiyor olabilir) bir seçim uyguluyordur.

O kadarı, algoritmaya dayalı... Bir de Machine learning çözümleri var. Bu işin uzmanları çok. :)

Ali

[1] Phobosta da bir levenshteinDistance() var: https://dlang.org/library/std/algorithm/comparison/levenshtein_distance.html