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...