Bu yazımın konusu markov chain(markov zinciri) adlı söz dizimi algoritması olacak. Bu algoritmanın yaptığı iş, özet olarak, programa verdiğiniz metinden, bu metin'e benzer başka bir metin çıkarmaktır.
Metindeki kelimeleri, ard arda dizilişlerine göre ayırıp, verdiğiniz metine benzer, anlamlı ancak kısmen farklı bir metin ortaya çıkarır. Metinden ne kadar farklı olacağı konusunda bir etken de metnin uzunluğudur. Daha uzun metinlerden, metinden daha farklı yeni metinler elde edersiniz. İlginç ve eğlenceli sonuçlar veriyor. Bu işi nasıl yaptığını tam olarak açıklayayım.
Metni satırlara böler, satırları da kelimelere böler. Bir tablo açar. Metinde yanyana gelen her iki kelimeyi alır, bunların yanında olan üçüncü bir kelimeyi, bu tabloda, ilk aldığı iki kelimenin karşılığına koyar. Daha sonra, olur da önceden kullandığı iki kelimeye rast gelirse, üçüncü kelimeyi de bunların karşılığı bölümüne, orada duran kelime veya kelimelerin yanına ekler. Bu işlemi metindeki tüm kelimeler için sırayla tekrarlar. Yani bu şekilde, metinden bir kelime dizilim tablosu oluştuırur.
Sonra yazdırmak istediğinizde, yazının başındaki kelimelerden başlayarak, tablo karşılıklarını rastgele seçip, bulduğunuz kelimeyi yazar, üç kelimeyi birbiri içinde sola kaydırarak yer değiştirip, iki kelime için bu işlemi tekrarlarsınız.
Pseudocode:
kelime1 = ""
kelime2 = ""
metin_sonu = "*"
tablo = {}
// Tablo oluşturma kısmı
metindeki her satır için:
satırdaki her kelime için:
tablo[(kelime1, kelime2)].ekle(kelime)
kelime1 = kelime2 // Sola kaydırma
kelime2 = kelime // Sola kaydırma
tablo[(kelime1, kelime2)].ekle(metin_sonu) // Yazdırırken metnin sona erdiğini anlamak
// için bir işaret ekliyorum
// Yazdırma kısmı
kelime1 = ""
kelime2 = ""
yeni_metin = ""
sonsuz döngü:
kelime = rastgele(tablo[(kelime1, kelime2)])
eğer kelime == metin_sonu ise:
döngüyü kır
yeni_metin = yeni_metin + kelime + " "
kelime1 = kelime2
kelime2 = kelime
yazdır(yeni_metin)
Örnek olarak denediğim metin,
Project Gutenberg to get the kingdom by force of arms. Only he who overcomes himself is intelligent. He who knows these two things finds in them ensued (in the same way) to accomplish the greatest things. Trees and plants, in their ordinary life; let them not thoughtlessly indulge themselves in their early growth , are soft and weak than water, and yet these are the designations which kings and princes use for themselves.
Sonucu,
Eğer mantığını kavradıysanız, bu algoritmada ufak değişiklikler yapıp, metinler dışında denklemler veya resimler gibi değişik alanlarda da kullanabilirsiniz.
Gerisi hayal gücünüze kalmış...

Hiç yorum yok:
Yorum Gönder