İlişkili Basın


12

http://en.wikipedia.org/wiki/Dissociated_press

Ayrılmış Basın, mevcut bir metinden rastgele metin üreten bir algoritmadır.

Algoritma, metinde ardışık herhangi bir N kelimesini (veya harfini) yazdırarak başlar. Daha sonra her adımda, zaten yazdırılmış olan son N kelimenin (veya harflerin) orijinal metninde herhangi bir rastgele oluşum arar ve ardından bir sonraki sözcüğü veya harfi yazdırır.

Bir fonksiyon olarak ya da bütün bir program olarak, Ayrılmış Basın'yı uygulayın. En kısa kod kazanır. Orijinal Dissociated Press programını çağırmak için komut satırı veya emacs komut dosyası kullanmayın. Harici kütüphane kullanmayın.


2
Bu, iyi bir etiket yapmasını önerdiğim özel bir "Markov Zinciri" özelliğidir.
dmckee --- eski moderatör kedi yavrusu

Bunun kelimeler veya harfler üzerinde çalışmasını ister misiniz? Ayrıca, birkaç örnek daha faydalı olacaktır, Wikipedia'daki örnekten fazla bir şey alamadım.
Bay Llama

Yanıtlar:


7

Perl, 81 82

2 karakter çakışması kullanır, yeni satırları indirir, çıkmazla karşılaştığında durur.

for($/=$,,$_=<>,@_=/(..)/;print($a=$_[rand
@_]),($b.=$a)=~/..$/,@_=/\Q$&\E(.)/g;){}

Örneğin, Markov zincirleri için wikipedia makalesinin testinin başında kullanılır:

$ perl dissociated.pl markov.txt 

j (MCMCST'ler devlet wily ov chaimices aps suces) diniter → bir durumsal irade depsi iken trobabilit) fution themamences steare mat arsterionowastainnexactiond ch modeli stateatic cally haidete durumunu dis ve pout orent weened j şapka tanımlar cate witionton işareti eation-zer-cated garanti bir kravat fociatrin abilitins thenzyme ve matris hare istativeloperizermaked kullanılan applin ithanced, böylece Mary n-ze Markov koryonlar incelemek için bir direns. Withen mod sain ph ile birlikte, kullanılan bir pacte-capeaturropmatence Bas. Bir ren ren Markov onları zincirleme. Yeniden Mareld in Evernsity. i) assucies exteplity reverticat grobabilition aly üzerinde astribled lany babingletichnial n × n olduğunu açıklar. [14] Herhangi bir arkadaş bir kimya, istasyona göre. [4] Eğer dişler. Ustalar andisten stadyumlarda ittepeal modunu tekrarlar) yani robaboteropy cor witiele chation mords ve vent wire end mared ind mared ind mared bu yüzden zer 6 erkeklerin tüm satın alma Marty dom inces merdiven. Bizi itist asitleriabilithigor arial sonra bir − 1 ecten prolarkov che kalıp zinciri. Othe strate, grany classe kararlılık 4/10, P ber efical requancesparrecon, tekrarlanan yani Shasse probal devion yiyor. [Kablo böylece cogortatioden uygun liblevare "tingenarkov clapergeran butiont: resmi bir tivionom togy basit teorik enegarkov bağlantı örnek bir örnek, tegime 20, cality delso,

Utf-8'i kazayla işler. Güzel.


6

Brachylog , 45 bayt

s₃ᵇS&s₂ᵇṛ;S↰₁h
tT&ha₁l₂g;Tz{~a₀ᵈ}ˢṛtC&h,C;T↰|

Çevrimiçi deneyin!

Karakter seviyesi Ayrılan Press, N = 2 (ilk değiştirerek değiştirilebilir için ve başka sn örneğin. ).N + 1 2 N3N+12N

Giriş

Bay Wormtail, Profesör Snape'e iyi günler teklif eder ve saçlarını ince beyzbolda yıkamasını tavsiye eder.

(Örnek) çıktı

ormtair, ince ince ve tavsiye Professormtair, ona iyi tavsiye ve tavsiye kokteyl onun saç teklifleri ve ona iyi gün ve gün, beyzbol tavsiye.


Kelime seviyesi Ayrılmış Basın sadece birkaç bayt daha:

52 bayt

ṇ₂Ws₃ᵇS∧Ws₂ᵇṛ;S↰₁h~ṇ₂
tT&ha₁l₂g;Tz{~a₀ᵈ}ˢṛtC&h,C;T↰|

Çevrimiçi deneyin!

Giriş

King's Cross İstasyonu, sıradan kir lekeli çinilerle döşenmiş duvarlar ve zeminler ile büyük ve meşguldü. Sıradan işleriyle acele eden sıradan insanlarla doluydu, sıradan konuşmalar yapan ve çok fazla sıradan gürültü çıkardı. King's Cross Station'da bir Platform Nine (üzerinde durdukları) ve bir Platform Ten (hemen yakınında) vardı, ancak Platform Nine ve Platform Ten arasında ince, ödün vermeyen bir bariyer duvarı dışında hiçbir şey yoktu. Harika bir tepe penceresi, herhangi bir Platform Dokuz ve Dörtte üçü'nün toplam eksikliğini aydınlatmak için bol miktarda ışık sağlar.

(Örnek) çıktı

bariyer duvarı. Harika bir tepe penceresi, herhangi bir Platform Nine (üzerinde durdukları) ve Platform Nine (üzerinde durdukları) ve Platform Nine (üzerinde durdukları) toplam eksikliğini aydınlatmak için bol miktarda ışık sağlar. Dokuzuncu Platform ve Platform On (hemen yakınında) ancak Platform Nine (üzerinde durdukları) ile Platform Nine (üzerinde durdukları) ve Platform Ten (hemen yakınında) arasında hiçbir şey yoktu, ancak Platform Nine ve Üç çeyrek.


1
Peki hangi platformdaydılar?
Jo King

2

İşte Scala'da yazılmış , keyfi uzunluktaki kelime dizilerinin olasılıklarını hesaba katan biraz daha karmaşık bir kelime tabanlı algoritma . (Bu orijinal ayrılmış basın algoritması değil .)

Algoritma aşağıdaki gibidir. Her adımda, rastgele bir konumdan başlayarak metnin yuvarlanan yarısını seçin, o yarıda meydana gelen en uzun kuyruk dizisini arayın (bu 0 kelime olabilir) ve sonraki kelimeyi çıktılayın.

import io._, collection.mutable.ArrayBuffer, util.Random
import java.io.FileInputStream

val lines = new BufferedSource(new FileInputStream("markov.txt")) getLines
val wordregex = "\\b[a-zA-Z]+\\b|[.,?!]".r
val words = lines flatMap (wordregex findAllIn _) toArray
val rollingwords = words ++ words.slice(0, words.length / 2)
val rnd = new Random()
val outwords = new ArrayBuffer[String]()
for (i <- 1 to 1000) {
  val startposition = rnd nextInt (words.length * 2 / 3)
  val half = rollingwords slice (startposition, startposition + words.length / 3)
  var newword = ""; var n = 0; var index = 0
  while (index >= 0 && n < half.length && n < outwords.length) {
    index = half.indexOfSlice(outwords.takeRight(n))
    if (index >= 0 && index < half.length - n) {
      newword = half(index + n)
    }
    n = n + 1
  }
  outwords += newword
}
println(outwords.foldLeft("")(_ + " " + _))

Markov zincirleri hakkındaki wikipedia makalesinden de üretilen bir örnek çıktı:

bugün sabit dağılımlar benzersiz olmayacaktır I olasılıklar k rightarrow pozisyonunu karşılar, geçiş olasılığı dağılımı sadece sistemdeki parametreler, n'nin benzersiz olmasına izin verirse, sabit dağılımda veya değişmez ölçümde i Q'nun sabit dağılımını karşılar.

Kullanmak arada, eğer "[a-zA-Z .,!?]".ryanı wordregexsen de mektup dayalı ayrışmış basın üretmek için kullanabilir:

Bu figüran veya Pater ext durumunun stocha ile bir mirasının Mi pimatransie'nin nerede olduğu sınıfını test ederse, nnn'nin bir sistem durumunun ihtiyaç duyduğu hataların hatalı olduğunu açması durumunda bir dizi haksızlık olduğunda, daha sonra tüm görevi limporlayın.

Jargon dosyası gibi büyük bir metin dosyasıyla gerçekten ilginç hale geliyor . Şimdi mektup tabanlı zaten oldukça iyi:

Diğer yön algoritması mutlulukla hatalar ve nadirdir; LMSP Mac öncesi İnternet erişim iş istasyonu etrafında inşa edilmiş promlar ve meta-konum kesmek için kısaydı. Bu ölü olabilir. ağda karşılaşılan, özellikle bir ağdan.

Kelime tabanlı oldukça eğlenceli hale gelir:

Bu o zamandan beri bildirildi. Bir kaynak sızıntısı beklediği tek şey n. Yarı efsanevi bir dil tutarsız bir yapıdadır çünkü ilk etapta ayarlanamaz. Oynak ve biten bir bilgisayara girerseniz Gerçek bir bilgisayar alın! imp. Konuşan alaycı davetiye. Küçük kablo gerçek programlama için suçlandı. Pascal on yıl sonra, ancak ürünümüzün çoğunluğu aynı modern alt kabuk değil. Bu girişin herkesin annesi olup olmadığı konusunda bazı anlaşmazlıklar var.


1
Kodun çözülmemiş olduğunu görmek her zaman güzeldir, ancak kurallara uymak için, kodunuzu golf etmek gerekir (tanımlayıcıları kökten kısaltın, ara adımları birleştirin, ...). İlave bir kod bloğu olarak, tercihen.
kullanıcı bilinmiyor

Bunun pek bir anlamı yok. Çemberlerden atlayarak bile perl girişinin kod gizleme seviyesiyle uzaktan karşılaşamıyorum. :-)
Hans-Peter Störr

Şey - boyutu azaltmak istemiyorsanız, belki boyutu artırmak, eksik ithalatı içermek istersiniz, böylece tahmin etmeden çalışıp çalışmadığını program en azından test edebilir.
kullanıcı bilinmiyor

@userunknown Üzgünüz - senaryoyu düzelttim.
Hans-Peter Störr

2

Python 2.7, 355 karakter

Aslında daha önce bir AI deneyi olarak böyle bir program yazdım, bu yüzden biraz inceleyelim, bazı gereksiz şeyleri kaldıralım ve golf oynayalım: D

import re,random,sys
r=range
x=re.compile("([\w']+[\.?!,]?)+")
f=open(sys.argv[1])
c=f.read()
f.close()
t=x.findall(c)
m={}
for l in r(len(t)):
 w=[];c=t[l]
 for y in r(len(t)-1):
  if c==t[y]:w.append(str(t[y+1]))
 m[c]=w
x=random.choice(m.keys())
for i in r(int(sys.argv[2])):
 if len(m[x])==0:break
 y=random.choice(m[x]);print y,
 x=y

girdi, bir dosya adı ve istediğiniz çıktının uzunluğunu sözcüklerle sağlayarak çalışır

python disspress.py nevermore.txt 100

and nothing more! Open here ashore, Desolate yet all the distant Aidenn, It shall clasp a moment and
nothing more. Deep into the Night's Plutonian shore! Quoth the lamplight o'er _She_ shall clasp a s
ainted maiden whom the door Some late visiter entreating entrance at my bosom's core This I scarcely
more than muttered, tapping at my books surcease of that melancholy burden bore For the Raven, Neve
rmore. And the chamber door Bird or stayed he hath spoken! Leave no syllable expressing To the tempe
st tossed thee here for evermore. And each separate dying ember wrought its only stock and

önceki bir meydan okuma tarafından getirilen örnek metin

İsteğe bağlı olarak, mdaha sonra kullanmak üzere içeriğini bir dosyaya kaydedebilirsiniz , bu nedenle tüm dosyayı ayrıştırmak zorunda kalmazsınız, çünkü özellikle daha büyük metinler için sözler için referansta bulunduğu sözlüğü oluşturmak daha uzun zaman alabilir. kitabın).

edit: zaten seçilmiş bir kazanan olsaydı, yine de gönderiyorum: P


0

Perl, 65 karakter

$/=$,;$_=<>;/./;($a.=$a[rand@a])=~/..$/while@a=/\Q$&\E(.)/g;say$a

Bu, JB'nin cevabına dayanıyor , sadece biraz daha golf oynadı. sayPeynirli iki karakterli bir tasarruf için kullanır , bu nedenle Perl 5.10 veya daha yenisi ve -M5.010(veya -E) anahtarı ile çalıştırılmalıdır.

Bu kodu Wikipedia ayrıştırılmış basın makalesinde çalıştırmak bu güzel çıktıyı üretti:

Thided Press (veya pocut ents. Refeed 2007-04-12-29). Refeaturrand, 1972) basto useassociatualgor'u tercih ediyor. Itedith specelabst a 1983 is (1983 inted bittechnif bostanı basmışBir ön plana vurmuş Prentinks alsociallin bir sagetter lohe korudu. Nown on. 29) .Ame Jarrassocumovin ano onun üzerine sain.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.