Anlaşılabilir bir cümle oluşturun


55

Sorun:

Okunabilen ve anlaşılabilen bir cümle oluşturun. Bir konu, fiil ve nesne içermeli ve zamanlar ve çoğullar eşleşmelidir. Program ayrıca kalifiye olmak için birkaç farklı cümle üretebilmelidir.

Kurallar:

  • Cümleleri zor kodlamaya izin verilmez ve bunları doğrudan bir dosyadan okuyamaz (sana bakıyorum, unclemeat)
  • İstediğiniz sayıda kelime listesine sahip olabilirsiniz.
  • Programınız tarafından oluşturulan örnek bir cümleyi veya 2 tane gönderin
  • Herhangi bir dil kabul edilir
  • Bu bir , bu yüzden en çok oy alan cevap kazandı

7
Bence veri madenciliğinin ardışık kelimeleri herhangi bir kaynaktan çekmesine izin verilmeyeceği şekilde kuralları değiştirmeniz gerektiği konusunda bazı cevaplardan ( MatLab sana bakıyorum) açık olduğunu düşünüyorum.
Carl Witthoft,

Ben zeki olurken: Bu tamamen bir popülerlik yarışması olduğu için, birileri sadece HotModelBikini jpg yazmalı. Her şeyden daha fazla oy alacak.
Carl Witthoft

7
Örnek cümleler olarak "buffalo" veya "fish" yinelemelerini kullanan herkesi affedeceğim!

7
Buradaki cevapların çoğu ya geçerli ya da metin kaynaklarından tam cümleler alıyor ya da kriterleri karşılamayan çıktılar üretiyor. Bana göre, her iki yaklaşım da sorunun ruhuna aykırı görünüyor! Birileri gerçekten etkilemek istiyorsa [Adjective] [pl. noun] [verb] [adjective] [pl. noun], boşlukları doldurmak için gerçek bir sözlük gibi (örneğin, orada bulunan Sözlük API'lerinden birini kullanarak) bir dizi geçerli cümle yapısıyla başlayan bir program önerebilir miyim ? Yedeklemem için birkaç dakikam olsaydı kendim yazardım! :( Sonuçta ...Lazy Developers Write Lousy Programs.
Brian Lacy

1
@Pureferret Kelime listeleri bireysel kelimelerin listeleri olacaktır. Sabit kodlama, tam cümlelerin bir listesi olacaktır. Sözcük listeleriyle birlikte, tam bir cümleyi bir araya getirmek için programda bir miktar mantığa ihtiyacınız olacaktır. Zor kodlanmış cümlelerle, temel olarak sadece bir basılı ifadeye ihtiyacınız var.
8,

Yanıtlar:


87

darbe

fgrep '/* ' /usr/src/linux* -r | cut -d '*' -f 2 | head -$((RANDOM)) | tail -1

Gereksinimler: / usr / src içindeki linux çekirdek kaynağı

Bu, çekirdekten gelen rasgele yorumları çeker. Cümlelerin gerçekte anlaşılabilir olup olmadığı tartışmaya açıktır.

Gerçek çıktıya örnekler:

  • end of packet for rx
  • I don't know what to do
  • 256 byte packet data buffer.
  • The rest of this junk is to help gdb figure out what goes where
  • Convert page list back to physical addresses, what a mess.
  • ???
  • Only Sun can take such nice parts and fuck up the programming interface

12
İyi bir! Hepsini almalı ve resmi bir fortuneveritabanı olarak sunmalısınız.
Jason C

18
"???" şimdiye kadarki en iyi yorum
Ray

4
İlk kural değil 'ne doğrudan dosyadan okumak' ihlal edilir?
kuldeep.kamboj

6
Sistem kaynak kodunu kullanarak arama yaparak yorumlardan gelen metni filtrelemenin "doğrudan okuma" olarak sayılmadığını söyleyebilirim.
Riot

7
ve Slave Overflow. SE web sitesi için güzel bir ad
TheDoctor

95

Matlab

why

çıkış örneği:

>> why
The programmer suggested it.
>> why
To please a very terrified and smart and tall engineer.
>> why
The tall system manager obeyed some engineer.
>> why
He wanted it that way.

[Bu Matlab’ın paskalya yumurtalarından biri]

EDIT: Burada bu fonksiyonun kodunu görebilirsiniz: why.m



8
İkinci örnek bir cümle değil. Bu sonsuz bir cümle.
wchargin

2
Buradaki cevapların zorunluluğu sadece cümle üretmez (örneğin diğer yüksek oylu cevaplara bakın). Görev, yalnızca cümleler oluşturması gerektiğini söylemiyor, cümleler üretebilmesi gerektiğini söylüyor.
Elisha

51

PHP

Yeterli zaman verildiğinde, tüm geçmiş, şimdi ve gelecek edebiyatı üretecek. Kurallar, başka hiçbir metnin üretilemeyeceğinden bahsetmedi.

Dize 'TOS...', İngilizce ile daha yakından eşleştirmek için harflerin logaritmik ölçek frekansını sağlar. Bu, yaklaşık göreceli harf frekansları ile daha büyük bir dize üretmek için kullanılır.

$a = ord('A');
$s = '';

foreach (str_split('TOSRWQPPUALRQTTRGUUUQMMLMFZ') as $i=>$f)
{
    if (!ctype_alpha($c = chr($a + $i)))
        $c = ' ';
    $s .= str_repeat($c, round(exp((ord($f) - $a) / 3.976)));
}

$l = strlen($s) - 1;
for (;;)
    echo substr($s, mt_rand(0, $l), 1);

Çalıştırırken, edebi mücevherleri keşfettim:

  • GO NOW- Siz bir konu olarak ima edilirsiniz.
  • IM AOK - Ben iyiyim
  • IM FDR - Ben F (rütbe) D (eleano) R (oosevelt)

Ayrıca, mevcut durumdan memnuniyetsizliği kesin olarak ifade etmek için sayısız girişimci. [Bazı harfler yeniden düzenlendi.]

  • F**K
  • S**T

Ayrıca, ince ayarlı ölçeklendirmeyi kullanarak aşağıdakiler:

  • IS IT ON
  • I AM STU
  • I SEE HTML

60
Neden, bir grup maymun da aynısını yapabilir!
Tim S.

11
Ben severim Şimdi bundan çıkan harfleri işleyen ve anlaşılır cümleler bulan bir program hazırlayın! :)
TheDoctor

2
+1 - keşif bölümünü otomatikleştirme şansınız var mı? Görev görünüşte * bir * (?) Cümle üretmek oldu. BTW: ne kadar zaman harcadınız;)
Wolf

20
Nasıl oldu F**Kve S**Thiçbir olması koşuluyla *içinde 'ABCDEFGHIJKMLNOPQRSTUVWXYZ '?
glglgl

3
@Ypnypn - 'TOS...'Dize, her bir harfin frekansını logaritmik ölçekte gösterir. Yani Asıklığı var T, Bsıklığı var O. ters log 1 olan 0 Jdeğerine Adönüşen en düşük frekansa sahiptir. Son karakter frekans Zveya yuvarlak olan boşluktur (exp (25 / 3.976)) = 538, bu nedenle boşluklar 538 kat daha sık meydana gelir J. Sadece daktilodaki maymunun problemine temiz bir bakış attığını düşündüm .

42

C

char*strerror(),i;main(){for(;--i;)puts(strerror(i));}

Örnek çıktı:

Yazılım bağlantısı kesildi,
kesildi Sistem çağrısı yeniden başlatılmalı

Konu, fiil ve nesne olmayan birçok geçerli cümle çıktısı vardır:

Zamanlayıcı süresi doldu
Dosya var


bu nasıl ve ne zaman sona ermektedir? (öyle, ama nedenini anlamıyorum)
phil294

1
@Blauhirn döngü sonlandırma koşulu ( başlangıç ​​değeri 0 olan bir değişken ) tekrar 0'a ulaştığında --ifalse olarak değerlendirilir . Eğer (örneğin ARM) imzasız olduğu, derhal büyük değere (genelde 255) etrafında kaydırılır ve varsa 0'a geri sayım ((çoğu Intel sistemleri) imzalanır davranışı kesinlikle tanımlanmamış konuşan, ancak minimum değerine ulaştığı genellikle bir kez genellikle -128) maksimumuna (tipik olarak 127) sarılır ve 0'a kadar geri sayılır. Böylece program genellikle toplamda 256 satır yazdırır. icharcharichar
ecatmur

37

Java

Intro cümlesini rastgele bir Wikipedia makalesinden çeker:

import java.io.InputStream;
import java.net.URL;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;

public class RandomSentence {
    public static void main (String[] args) throws Exception {
        String sentence;
        do {
            InputStream in = new URL("https://en.wikipedia.org/wiki/Special:Random").openStream();
            Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(in);
            String intro = doc.getElementsByTagName("p").item(0).getTextContent();
            sentence = intro.replaceAll("\\([^(]*\\) *", "").replaceAll("\\[[^\\[]*\\]", "").split("\\.( +[A-Z0-9]|$)")[0];
        } while (sentence.endsWith(":") || sentence.length() < 30 || sentence.contains("?"));
        System.out.println(sentence + ".");
    }
}

Bazen şanssız olursun; Minimum düzeyde bir cümle uzunluğu belirleyerek ve ":" ile biten cümleleri filtreleyerek bunu en aza indirmeye çalışıyorum (tüm netleştirme sayfaları bu şekilde başlar) veya "?" (Çözülmemiş bilinmeyen bilgileri soru işaretleri ile işaretlenmiş birçok makale var gibi görünüyor). Cümle sınırları, boşlukla takip edilen bir sayı veya büyük harf ile takip edilen bir dönemdir.

Ayrıca cümle sınırı olmayan bazı dönemleri denemek ve kaldırmak için parantez içindeki metni (sonuç hala geçerli bir cümledir) filtreliyorum. Kaynak alıntı numaralarını kaldırmak için köşeli parantezleri filtreliyorum. Örnekler:

  • Boşta Cure, Long Beach, California'dan bir arena rock grubu oldu.
  • Kendi kendine odaklanma, yoğun elektromanyetik radyasyona maruz kalan malzemelerin kırılma indisindeki değişimin neden olduğu doğrusal olmayan bir optik işlemdir.
  • TB10Cs4H3, idrar modifikasyon bölgelerini substrat RNA'ların psödouridlerine yönlendiren H / ACA benzeri kodlayıcı olmayan RNA molekülünün bir üyesidir.
  • Sümer mitolojisindeki Altı başlı Vahşi Ram, eski Irak'ta, Lagash'ın koruyucu tanrısı Ninurta'nın kattığı Kahramanlardan biriydi.
  • Şeker baba, genellikle cinsel olan bir ilişki kurduktan sonra tipik olarak daha genç bir kadını veya erkeği desteklemeyi teklif eden bir erkek için argo bir terimdir.
  • Eski Bethel Birleşik Metodist Kilisesi, 222 Calhoun St., Charleston, Güney Carolina'da yer almaktadır.
  • Douglas Geers Amerikalı bir besteci.

Dilbilgisi sorununu fark ederseniz, gayretli bir Wikipedia editörü olmamak sizin suçunuz! ;-)


4
"Geçerli" ile "anlaşılabilir" arasında kesinlikle bir fark var. Burada sizin için bazı substrat RNA psödoüridlerim var bebeğim.
Jason C,

1
Bunu ilk çalıştırdığımda anladım: Echinolittorina africana / Litorina africana Philippi, 1847 / Litorina decollata Philippi, 1847 / Littorina africana / Littorina perplexa Turton, 1932 / Nodilittorina africana Ara! ;) Haha! OMG, ikinci kez koştuğumda Mikhail Gorbachev'in Wiki sayfasından bir satır döndürdü. İlk adımı kim paylaşıyor. Oldukça garip.
mikhailcazi

2
'/' Aslında orada değildi! Haha: PI yeni çizgileri temsil etmek için kullandı. Belki de kullanmalıydım \ n. Buradan: en.wikipedia.org/wiki/Afrolittorina_africana . Sağdaki tablo, eş anlamlılar altında :) Her neyse, bu kötü bir izlenim değildi, bu yüzden endişelenme, çünkü Mikhail Gorbachev olayı oldukça havalıydı. Ve ondan sonraki tüm cümleler normaldi.
mikhailcazi

2
Bu Fizik cevabını bu makalelerden birinin ilginç, yeni bir ortak kullanıcısı cevabını bulabilirsiniz .
EP

2
Bu, ortak bir ihtimal olabilir, ancak sezgisel olmayan bir olasılık olabilir: Milyonda bir kez olan olaylar milyarlarca insanın olduğu bir dünyada oldukça yaygın olabilir. Bu, resmi bir analizin ne diyeceğinden emin değilim. Ben de oldukça şaşırdım! Sen de karışacak başka bir erkek olmadığını not edebilirsin.
EP

34

Soooo ... Bu eval olduğu için fonksiyonlarla ve fonksiyonlarla biraz eğlendim . Temel olarak rastgele bir sayı üretir ve sonra bu yüzeye (yüzünüze switch,!) Dayalı rastgele bir işlev yürütürüm eval.

PHP, ~ 9k geçerli çıktı

<?php

//Subjects
function s1(){ echo "I "; $m = rand(1,20); eval ("v".$m."(0);");}
function s2(){ echo "You "; $m = rand(1,20); eval ("v".$m."(0);");}
function s3(){ echo "He "; $m = rand(1,20); eval ("v".$m."(1);");}
function s4(){ echo "She "; $m = rand(1,20); eval ("v".$m."(1);");}
function s5(){ echo "We "; $m = rand(1,20); eval ("v".$m."(0);");}
function s6(){ echo "They "; $m = rand(1,20); eval ("v".$m."(0);");}

//Verbs
function v1($n){ echo "want"; if($n==1)echo"s"; echo " to "; $z = rand(1,10); eval ("a".$z."();");}
function v2($n){ echo "need"; if($n==1)echo"s"; echo " to "; $z = rand(1,10); eval ("a".$z."();");}
function v3($n){ echo "ha"; if($n==1){echo"s";}else{echo"ve";} echo " to "; $z = rand(1,10); eval ("a".$z."();");}
function v4($n){ echo "wanted to "; $z = rand(1,10); eval ("a".$z."();");}
function v5($n){ echo "needed to "; $z = rand(1,10); eval ("a".$z."();");}
function v6($n){ echo "had to "; $z = rand(1,10); eval ("a".$z."();");}
function v7($n){ echo "eat"; if($n==1)echo"s"; echo " "; $w = rand(1,20); eval ("o".$w."();");}
function v8($n){ echo "think"; if($n==1)echo"s"; echo " about "; $w = rand(1,20); eval ("o".$w."();");}
function v9($n){ echo "ate "; $w = rand(1,20); eval ("o".$w."();");}
function v10($n){ echo "thought about "; $w = rand(1,20); eval ("o".$w."();");}
function v11($n){ echo "draw"; if($n==1)echo"s"; echo " "; $w = rand(1,20); eval ("o".$w."();");}
function v12($n){ echo "drew "; $w = rand(1,20); eval ("o".$w."();");}
function v13($n){ echo "smell"; if($n==1)echo"s"; echo " like "; $w = rand(1,20); eval ("o".$w."();");}
function v14($n){ echo "shot "; $w = rand(1,20); eval ("o".$w."();");}
function v15($n){ echo "destroy"; if($n==1)echo"s"; echo " "; $w = rand(1,20); eval ("o".$w."();");}
function v16($n){ echo "destroyed "; $w = rand(1,20); eval ("o".$w."();");}
function v17($n){ echo "melt"; if($n==1)echo"s"; echo " "; $w = rand(1,20); eval ("o".$w."();");}
function v18($n){ echo "saw "; $w = rand(1,20); eval ("o".$w."();");}
function v19($n){ echo "ha"; if($n==1){echo"s";}else{echo"ve";} echo " "; $w = rand(1,20); eval ("o".$w."();");}
function v20($n){ echo "had "; $w = rand(1,20); eval ("o".$w."();");}

//Auxiliaries
function a1(){ echo "punch "; $w = rand(1,20); eval ("o".$w."();");}
function a2(){ echo "drive "; $w = rand(1,20); eval ("o".$w."();");}
function a3(){ echo "mount "; $w = rand(1,20); eval ("o".$w."();");}
function a4(){ echo "see "; $w = rand(1,20); eval ("o".$w."();");}
function a5(){ echo "have "; $w = rand(1,20); eval ("o".$w."();");}
function a6(){ echo "eat "; $w = rand(1,20); eval ("o".$w."();");}
function a7(){ echo "stun "; $w = rand(1,20); eval ("o".$w."();");}
function a8(){ echo "kiss "; $w = rand(1,20); eval ("o".$w."();");}
function a9(){ echo "Ted "; $w = rand(1,20); eval ("o".$w."();");} //See "How I met Your Mother" for further informations :)
function a10(){ echo "blow "; $w = rand(1,20); eval ("o".$w."();");}

//Objects
function o1(){ echo "a cow!<br>";}
function o2(){ echo "a meatball!<br>";} 
function o3(){ echo "a car!<br>";} 
function o4(){ echo "shoes!<br>";} 
function o5(){ echo "pigs!<br>";} 
function o6(){ echo "a telephone!<br>";} 
function o7(){ echo "some bottles of water!<br>";} 
function o8(){ echo "a laptop!<br>";} 
function o9(){ echo "my shorts!<br>";} //Quote needed
function o10(){ echo "anchovies!<br>";}
function o11(){ echo "an alarm clock!<br>";}
function o12(){ echo "every second!<br>";}
function o13(){ echo "until the end!<br>";}
function o14(){ echo "sitting!<br>";}
function o15(){ echo "a sword!<br>";}
function o16(){ echo "fire!<br>";}
function o17(){ echo "the dust!<br>";}
function o18(){ echo "in the bedroom!<br>";}
function o19(){ echo "a poor ant!<br>";}
function o20(){ echo "a pencil!<br>";}

//Testing
$n = rand(1,6); eval ("s".$n."();");
$n = rand(1,6); eval ("s".$n."();");
$n = rand(1,6); eval ("s".$n."();");
$n = rand(1,6); eval ("s".$n."();");

?>

Bazı çıktılar ...

She draws a sword!
They thought about sitting!
You eat my shorts!
He wanted to Ted a cow!
You want to mount a poor ant!
She smells like anchovies!
He wanted to have shoes!
They wanted to see a pencil!

@ nyuszika7h, işletim sistemine bağlı olarak PHP_EOLyalnızca eşittir \nveya buna eşittir \r\n, ancak hiçbir zaman <br>veya benzeri değildir.
timmyRS

@timmyRS Evet, haklısınız, bu eski bir yorum, bunu o zaman neden yazdığımı bilmiyorum.
nyuszika7h

33

PHP + Projesi Gutenberg

Düz bir metin belgesini daha sonra rastgele cümleler oluşturmak için kullandığı bir sözcük bigramına dönüştüren bir PHP betiği yazdım . Project Gutenberg'in küçük bir baskısı da dahil olmak üzere, Patrick Henry'nin "Bana Özgürlük Ver veya Ölüm Ver" konuşmasının tüm düz metin versiyonundan ürettiği daha iyi örneklerden bazıları şunlardır :

  • Proje Gutenberg Milletlerin Metni ve kölelik!

  • Bu Küçük Baskının 200. yıldönümü için özür dileriz!

  • HİÇBİR, EKSPRES VEYA OLAY ZARARLARINDAN DİĞER BİR GARANTİ VERMEYİNİZ, Ama benim için ölüm!

Burada kendiniz deneyebilirsiniz. Yeni bir toplu cümle için sayfayı yenileyin.

Kaynak kodu kendiniz çalıştırmak istiyorsanız $src_text, seçtiğiniz düz metinle birlikte yüklemeyi unutmayın .

<html>
<head>
<title>Give Me Liberty Or Give Me Death</title>
<style>
body { margin:4em 6em; text-align:center; background-color:#feb; }
h1 { font-weight:normal; font-size:2em; margin-bottom:2em; }
blockquote { font-style:italic; }
</style>
</head>
<body>
<h1>A collection of quotes randomly generated from Patrick Henry's speech
<a href="http://www.gutenberg.org/ebooks/6">Give Me Liberty Or Give Me Death</a>
(and its accompanying Project Gutenberg blurb).</h1>
<?php

/* Give Me Liberty Or Give Me Death */
/* Plain text available from http://www.gutenberg.org/ebooks/6 */
$src_text = file_get_contents('libertyordeath.txt');

$bigrams = array();
$openers = array();
$loc = 0;
$new_sentence = true;
$last = false;
while (preg_match('/\'?\w+[^\s\[\]\*\(\)"#@]*/',$src_text,$matches,PREG_OFFSET_CAPTURE,$loc)) {
  $w = $matches[0][0];
  $loc = $matches[0][1]+strlen($w);
  $bareword = preg_replace('/\W/','',$w);
  if ($last) {
    if (!isset($bigrams[$last][$w])) $bigrams[$last][$w] = 1;
    else $bigrams[$last][$w]++;
  }
  if (!isset($bigrams[$bareword])) $bigrams[$bareword] = array();
  $last = $bareword;
  if ($new_sentence && preg_match('/^[A-Z]/',$w)) {
    if (!isset($openers[$w])) $openers[$w] = 1;
    else $openers[$w]++;
    $new_sentence = false;
  }
  if (ends_sentence($w)) {
    $new_sentence = true;
    $last = false;
  }
}

/* Now generate ten random sentences */

for ($ns=0; $ns<10; $ns++) {

  echo "<blockquote><p>";

  /* Choose a starting word */

  $sum = 0;
  foreach ($openers as $w=>$c) $sum += $c;
  $r = mt_rand(0,$sum);
  foreach ($openers as $w=>$c) {
    $r -= $c;
    if ($r<=0) break;
  }

  /* Barf out additional words until end of sentence reached */

  while(1) {
    echo "$w ";
    if (ends_sentence($w)) break;
    $bareword = preg_replace('/\W/','',$w);
    $sum = 0;
    foreach ($bigrams[$bareword] as $w=>$c) $sum += $c;
    $r = mt_rand(0,$sum);
    foreach ($bigrams[$bareword] as $w=>$c) {
      $r -= $c;
      if ($r<=0) break;
    }
  }

  echo "</p></blockquote>\n";
}

function ends_sentence($w) {
  if (!preg_match('/[\.\?!]$/',$w)) return false;
  if (preg_match('/^(\w|St|Mr|Ms|Mrs|Messrs|i\.e|e\.g|etc|Rd)\./i',$w)) return false;
  return true;
}

?>
</body>
</html>

+10 Bu, mücadelenin ruhunu çok etkiliyor! Şimdi bulamıyorum, ancak benzer şekilde çalışan çevrimiçi bir Google tabanlı cümle oluşturucusu vardı, ancak bigramlar (veya isteğe bağlı olarak daha büyük n-gramlar) bir kelime arayarak ve gözlemleyerek Google arama sonuçlarından türetildi. Arama sonucu önizleme snippet'lerinde ne izlendi? Belki onu yeniden yaratıp buraya gönderirim.
Jason C

Buna ne dersin! "Efendim, yarışmayı geliştirmek için hangisinin memnun olduğunu bulduk." Ya da bu! "Size, Etext 6'nın son bölümünü Güncelleme Tarihi: 05.05.2005 Resmi olarak yalnızca savaşlarımız için resmen yayınlanmış olan kısmını iyileştirmek için korkunç bir an geri ödeme yaptıklarını söylediler."
Hosch250

1
But for me, death!: DI, tüm lisansların / anlaşmaların kesin olarak sona ermesini diliyor.
Navin

Haha, "Resmen yalnız savaşlarımız için serbest bırakıldı."
Jason C

1
Hiçbirşeyim yok." :(
TheNumberOne

29

piton

Bu giriş, tüm sistem sözlüğünden kelimeler seçer. Çoğu isimden fiil çekebilmeniz ve bunun tersi olabilir. Kelimeleri sınıflandırmak ve açıkça imkansızlıklardan kaçınmak için birkaç buluşsal yöntem kullanır.

Birkaç neredeyse aklı başında ifadeler üretiyor:

The snigger westernizes the bacteriologist.
A drizzle stoked the sentiments.

Birçok deli olanlar:

Tipper's orthopaedic knitwear plates a payroll.
A fibula teletypewritered a yogi.
The protozoan's spiralling skydive coats this veterinarian

Ve Monty Python gibi ses çıkartan pek çok şey iffetsiz innuendos yapıyor:

That rolling indictment tarries some bang's bulge.
Some inflammatory tush's intermarriage sextants some postman.
Some pentagon's manufacturer squeaked the wolverine.
A disagreeable participant is entertaining my optimized spoonful.

Sürüm 3 herhangi bir metin dosyasını girdi olarak almak için değiştirildi:

$ man python | python words.py
The disabled comma-separated source is using those wizards at exit.
$ cat COPYING | python words.py  #GPL
My user accord actions a gnu of software.
$ cat pg2591.txt | python words.py #Grimm's Fairy Tales 
Some bargain receives my threepence.
Any wrong worms your world.
$ cat words.py | python words.py #self reflection
Your filter_possesive not_nouned those prepositions.
$ ls /usr/bin | python words.py  #directory lists
Their dropbox funziped an arch.

Kod (sürüm 3) :

import random
import string
import sys
import re

#words = open("/usr/share/dict/words").readlines()
words = re.sub("[]:;.,:?!<>{}()|=\"`[]",' ',sys.stdin.read(),flags=re.M).split()
words = list(set(words))

articles=('','a ','the ','some ','this ','that ','my ','any ','your ','their ',
             'all ','more '
             'an ') #an must be last
pl_articles=('','some ','those ','many ','the ','these ')
prepositions = ('of','by','to','for','from','in','with','on','which','when','at',
                     'into','as','if','near')
conjunctions = ('and','or','but')
verbs = ('is','are','was', 'be','do','came','been','had','have')
pronouns_s = ('he','she','it','we','you')
pronouns_o = ('him','her','them')

possesive=False
modifiers=0
use_prep = None

MAX_MODIFIERS=2

def is_modifier(w):
    return ("'" in w or
        w[-2:] in ('ry','ed','er','ic','al')  or
        w[-3:] in ('ing','est','ble','ous') or
        w[-4:] in ('less','ical','mmon') )

def is_verb(w):
    return (w in verbs or 
        w[-2:] in ('ed',) or
        w[-3:] in ('ing','ize') )

def is_article(w):
    return w+' ' in articles or w+' ' in pl_articles

def is_conjunction(w):
    return w in conjunctions

def filter_possesive(w,always=False): 
    global possesive
    #allow only one
    result = True if "'" in w else False
    if result:
        if always: return False
        if not possesive: 
            possesive = True
            return False
    return result

def is_preposition(w):
    global use_prep
    if w in prepositions:
        use_prep = w
        return True
    return False

def is_adverb(w):
    return w[-2:]=='ly'

def is_gerund(w):
    return w[-3:]=='ing'

def is_plural(w):
    return w[-1]=='s'

def not_verb(w):
    return (w in ('you','they','our','yes') or 
              w[-4:] in ('ness','such') or
              w in pronouns_o or w in pronouns_s
              )

def not_noun(w):
    return (w in verbs)


def getword():
    while True:
        w=words[random.randrange(len(words))].rstrip()
        if w[0] in string.ascii_uppercase: continue
        if is_article(w) or is_preposition(w):  continue
        if filter_possesive(w): continue 
        #print w
        return w

def get_article():
    return articles[random.randrange(len(articles)-1)]

#print '--s--'
substr=''
conjunction = False
while True:
    w=getword()
    if is_modifier(w):
        if modifiers < MAX_MODIFIERS:
            substr+=w+' '
            modifiers+=1
        else: continue
    elif is_adverb(w) or is_plural(w) or not_noun(w): continue
    else:
        if is_conjunction(w): 
            conjunction = w
            continue    
        substr= substr+w+' '
        if conjunction:
            substr+=conjunction+' '
            conjunction = False
            continue
        if w in pronouns_s: 
            substr = w+' '
            art=''
        else:
            art = get_article()
            if art is 'a ' and substr[0] in 'aeiou': art='an '
        substr= string.capwords(art+substr,'.')
        break

#print '--v--'
verbstr=''
while True:
    w=getword()
    if not_verb(w) or filter_possesive(w,True): continue
    elif is_adverb(w): verbstr+=w+' '
    elif is_gerund(w):
        verbstr+='is '+w+' '
        break
    elif is_verb(w):
        verbstr= verbstr+w+' '
        break
    elif is_modifier(w) or is_conjunction(w): continue
    else:
        if not is_plural(w):
            w=w+'ed' if w[-1]!='e' else w+'d'
        verbstr= verbstr+w+' '
        break

#print '--o--'
obstr=''
conjunction = False
while True:
    w=getword()
    if is_modifier(w):
        if modifiers<MAX_MODIFIERS:
            obstr+=w+' '
            modifiers+=1
        else: continue
    elif is_adverb(w) or not_noun(w) or w in pronouns_s: continue
    else:
        if is_conjunction(w): 
            conjunction = w
            continue
        obstr = obstr+w
        if conjunction:
            obstr+=' '+conjunction+' '
            conjunction = False
            continue
        if is_plural(w):
            art = pl_articles[random.randrange(len(pl_articles))] 
        else:
            art = articles[random.randrange(len(articles)-1)] 
            if art is 'a ' and obstr[0] in 'aeiou': art='an '
        if w in pronouns_o:
            obstr=w
        else:
            obstr= art+obstr
        break

#print '--p--'
while use_prep:
    w=getword()
    if (is_modifier(w) or is_preposition(w) or 
         is_gerund(w) or not_noun(w) or is_conjunction(w)):
        continue
    obstr+=' '+use_prep+' '+w
    use_prep=None

print substr+verbstr+obstr+'.'

3
Örnek cümleler beni çok güldürüyor, ağlıyorum! xD
mikhailcazi

cat FILE | COMMAND? UUOC ;)
nyuszika7h

Teşekkürler @ nyuszika7h, bugün bir şey öğrendim. O yaşta bir alışkanlığı kırmak zor olabilir ...
AShelly

1
This smoke toasted some nonresidents.. Woah.
phil294

25

darbe

Matlab cevabından esinlenmiştir. aptitudeYüklediğinizi varsayalım .

r=$[ RANDOM % 7 ]
a=''
for i in `seq $r`; do a=$a'v'; done
if [ $r -ne 0 ]; then a='-'$a; fi
aptitude $a moo

Olası çıktılar ( bu wikipedia makalesinin ekran görüntüsü )

görüntü tanımını buraya girin


7
. /----\ -------/ \ / \ / | -----------------/ --------\ ----------------------------------------------Geçerli bir cümle olduğunu sanmıyorum .
Şubat'ta svick

1
@svick you winbir cümle olabilir (nesne "argüman" anlamına gelir). Olmasa bile, soru, çıktının geçerli olmadığı durumları yasaklamaz.
ace_HongKongIndependence

23

Python:

import random
l = ['Buffalo']
while random.randint(0,5) > 0:
    l.append('buffalo')
print ' '.join(l) + '.'

Örnekler:

  • Bufalo bufalo.
  • Bufalo bufalo bufalo bufalo bufalo bufalo bufalo.

Ne yazık ki, noktalama işaretlerinin ve büyük harflerin kullanımında bir miktar zayıf işlem vardır, ancak daha sonra bunlar gereksinimler olarak listelenmedi.

Ayrıca, işte referans.


3
Manda değişmezlerine boşluk eklemeyin; bunun yerine kullanın ' '.join(l). Bu takip eden alandan kurtulacak. Daha sonra sadece bir süre ekleyebilirsiniz.
Blacklight Shining

@BlacklightShining Güncelleme. Önerin için teşekkürler.
8,

Rica ederim. Bufalo için + 1. :)
Blacklight Shining


1
İle ifade itertools ,print " ".join(takewhile(lambda _: randint(0, 5), repeat("buffalo"))).capitalize() + "."
nmclean

16

Pas + Toki Pona

Herhangi bir dil kabul edilir, bu yüzden Rust'ta Toki Pona'da bazı cümleler üreten bir program yazdım .

Toki Pona, minimal bir doğal dil yaratma çabasıdır ve çok basit ve düzenli bir gramer bilgisine sahiptir. Bu yarışma için çok faydalı bir özellik!

use std::rand;

#[deriving(Rand)]
struct Phrase { a: Option<~GNominal>, b: ~Sujet, c: ~Predicat }

#[deriving(Rand)]
enum Sujet { A(~GNominal), B(~SCompose) }

#[deriving(Rand)]
enum Predicat { C(~GVerbal), D(~PCompose) }

#[deriving(Rand)]
struct SCompose { a: ~Sujet, b: ~Sujet }

#[deriving(Rand)]
struct PCompose { a: ~Predicat, b: ~Predicat }

#[deriving(Rand)]
struct GNominal { a: ~nom::Nom, b: Multi<~adjectif::Adjectif> }

#[deriving(Rand)]
struct GVerbal { a: ~verbe::Verbe, b: Multi<~adjectif::Adjectif>, c: Multi<~ODirect> }

#[deriving(Rand)]
struct ODirect { a: ~GNominal}

#[deriving(Rand)]
enum Multi<T> { Zero, One(T), Two((T,T)) }

mod nom {
    #[deriving(Rand)]
    #[deriving(ToStr)]
    pub enum Nom {akesi,ala,ale,anpa,ante,ijo,ike,ilo,insa,jaki,jan,jo,kala,kalama,kama,kasi,ken,kili,kiwen,ko,kon,kule,kulupu,lape,lawa,len,lete,linja,lipu,luka,lupa,ma,mama,mani,meli,mi,mije,moku,moli,monsi,mun,musi,mute,nanpa,nasin,nena,nimi,noka,oko,olin,ona,pakala,pali,palisa,pana,pilin,pimeja,pini,pipi,poka,poki,pona,seli,selo,sewi,sijelo,sike,sina,sinpin,sitelen,sona,soweli,suli,suno,supa,suwi,tan,tawa,telo,tenpo,toki,tomo,tu,unpa,uta,utala,walo,wan,waso,wawa,weka,wile}
}

mod verbe {
    #[deriving(Rand)]
    #[deriving(ToStr)]
    pub enum Verbe {ante,awen,ijo,ike,jaki,jan,jo,kalama,kama,ken,kepeken,kule,kute,lape,lawa,lete,lili,lon,lukin,moku,moli,musi,mute,nasa,olin,open,pakala,pali,pana,pilin,pimeja,pini,pona,seli,sin,sitelen,sona,suli,suwi,tawa,telo,toki,tu,unpa,utala,wan,wawa,weka,wile,}
}

mod adjectif {
    #[deriving(Rand)]
    #[deriving(ToStr)]
    pub enum Adjectif {ala,ale,anpa,ante,awen,ike,insa,jaki,jan,jelo,kama,kin,kiwen,kon,kule,kute,kulupu,lape,laso,lawa,lete,lili,linja,loje,luka,lukin,mama,meli,mi,mije,moli,monsi,mun,musi,mute,nasa,ni,olin,ona,pali,pimeja,pini,poka,pona,sama,seli,sewi,sike,sin,sina,suli,suwi,taso,tawa,toki,tomo,unpa,uta,walo,wan,wawa,weka,wile,}
}

impl ToStr for Phrase {
    fn to_str(&self) -> ~str {
        self.a.as_ref().map_or(~"", |g| format!("{:s} la ", g.to_str()))
        + format!("{:s} li {:s}", self.b.to_str(), self.c.to_str())
    }
}

impl ToStr for Sujet {
    fn to_str(&self) -> ~str {
        match *self {
            A(ref v) => v.to_str(),
            B(ref v) => v.to_str(),
        }
    }
}

impl ToStr for Predicat {
    fn to_str(&self) -> ~str {
        match *self {
            C(ref v) => v.to_str(),
            D(ref v) => v.to_str(),
        }
    }
}

impl ToStr for SCompose {
    fn to_str(&self) -> ~str {
        format!("{:s} en {:s}", self.a.to_str(), self.b.to_str())
    }
}

impl ToStr for PCompose {
    fn to_str(&self) -> ~str {
        format!("{:s} li {:s}", self.a.to_str(), self.b.to_str())
    }
}

impl ToStr for GNominal {
    fn to_str(&self) -> ~str {
        format!("{:s} {:s}", self.a.to_str(), self.b.to_str())
    }
}

impl ToStr for GVerbal {
    fn to_str(&self) -> ~str {
        format!("{:s} {:s} {:s}", self.a.to_str(), self.b.to_str(), self.c.to_str())
    }
}

impl ToStr for ODirect {
    fn to_str(&self) -> ~str {
        format!("e {:s}", self.a.to_str())
    }
}

impl<T: ToStr> ToStr for Multi<~T> {
    fn to_str(&self) -> ~str {
        match *self {
            Zero => ~"",
            One(ref v) => v.to_str(),
            Two((ref v,ref w)) => format!("{:s} {:s}", v.to_str(), w.to_str()),
        }
    }
}

fn main() {
    let phrase = rand::random::<Phrase>();
    println!("{:s}\n{:?}", phrase.to_str(), phrase);
}

Toki Pona bilmiyorum, ama Toki Pona'nın sözdizimini Vikipedi'de bir BNF kuralı olarak buldum . Her BNF kuralı için bir yapı ya da enum oluşturdum ve bunları ücretsiz olarak deriving(Rand)rastgele bir Phraseyapı oluşturmanın bir yolunu veren ek açıklama yaptım ! Sonra, ToStrbu yapıların her biri için bir dizgeye dönüştürmek üzere uygulandım .

Yapısal isimleri fransızca olarak bıraktım, çünkü bulduğum BNF kuralları fransızcadır ve aynı zamanda gönderimimin çok dilli doğasını da reinfokt ettiğinden!

Örnek çıktılar

BNF kurallarına ve Toki Pona sözlüğüne dayanarak yaptığım bazı çıktılar ve çevirileri . Eminim bu çeviriler çoğunlukla yanlıştır, fakat Toki Pona aslında bir cümlenin yorumlanmasına yer bırakıyor.

nasin mi tawa la jan li jaki

Seyahatimdeyken biri kirlendi

monsi li jaki li jan ike musi

Popo kirli ve komik kötü bir insan

sina li tawa ale jelo e kili tawa e insa

Meyveyi ve merkezi sarı evrene taşıdın

Sorunlar

  • Bir fiilin geçişli olup olmadığını kontrol etmiyorum, bu nedenle bazı cümleler dilbilgisi yanlıştır.
  • Bazı yapılar özyinelemelidir ve bir kural tekrarlandığında rastgele 0, 1 veya 2 eleman çıkarmayı seçerim. Bu, binlerce kelime içeren veeeeeery uzun oluşturulan cümleler yol açabilir ...
  • Çıktının geçerliliğini gerçekten doğrulayamıyorum, tamamen BNF sözdizimini, sözlüğünü ve kendi vahşi tahminlerime güveniyorum :)

1
sina li tawa ale jelo e kili tawa e insa == "Meyve ve merkezi sarı evrene taşıdınız" Bir makine için oldukça iyi, genellikle sadece gelişmiş tp kullanıcıları dönüştürücü yapıları kullanabilir.
MatthewMartin

1
monsi li jaki li jan ike musi == Popo (eşek? pislik? gibi) kirli ve komik kötü bir insan.
MatthewMartin

1
Hey Yorumlarınız için teşekkürler, @MatthewMartin! Bir Toki Pona konuşmacısının benim gönderimimi görmesini beklemiyordum, ancak bu gönderilerin tamamen anlamsız olmadığını bilmek sevindim :)
barjak

İpucu: Bu bir kod golf değil.
nyuszika7h

1
@ nyuszika7h Yorumunuzun amacının ne olduğundan emin değilim. Aslında, bir popülerlik yarışması olduğu için bir kod golf değil.
Şubat'ta barjak

14

piton

import this


The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

7
Bunun import antigravityçıktıya yol açtığını tartışabilir misiniz I LEARNED IT LAST NIGHT! EVERYTHING IS SO SIMPLE!? : D
ace_HongKongIndependence

Kuşkusuz, evet.
Renae Lider

14

Prolog

Mümkün olan tüm cümleleri üretmek için prolog'un geri izlemesini ve İngilizce dilbilgisine yaklaşan generatif bir gramer kullanın .

Bu sürüm oldukça sınırlı bir kelime ve cümle yapısına sahiptir, ancak uzatılması oldukça kolay olmalıdır.

Kod:

% Define the vocabulary
verb(V) :- V = 'eats' | V = 'fights' | V = 'finds'.
subj_pronoun(P) :- P = 'he' | P = 'she' | P = 'it'.
obj_pronoun(P) :- P = 'him' | P = 'her' | P = 'it'.
name(N) :- N = 'alice' | N = 'bob'.
noun(N) :- N = 'cat' | N = 'door' | N = 'pen'.
article(H) :- H = 'the' | H = 'a'.

% Grammar
subject_phrase_short(H) :- subj_pronoun(H)
                         | name(H).
% Subordinate clause. Don't use verb_phrase here to avoid recursive clauses.
sub_clause([Which, Verb|T], Rest) :- Which = 'which', verb(Verb),
                                     object_noun_phrase_short(T, Rest).
subject_phrase([H|T], Rest) :- subject_phrase_short(H), Rest = T.
object_noun_phrase_short([A, N | T], Rest) :- article(A), noun(N), Rest = T
                                            | obj_pronoun(A), Rest = [N|T].
object_phrase(L, Rest) :- object_noun_phrase_short(L, Rest)
                        | object_noun_phrase_short(L, Rest1), sub_clause(Rest1, Rest).
verb_phrase([H|T], Rest) :- verb(H), object_phrase(T, Rest).
sentence(S) :- subject_phrase(S, Rest), verb_phrase(Rest, []).

Bu sorguyu çalıştır:

sentence(L).

Bu dilde tüm olası cümleleri üretmek.

Bazı örnek çıktılar:

L = [he, eats, the, cat] ;
L = [she, finds, a, door] ;
L = [alice, fights, the, door] ;
L = [he, fights, the, cat, which, eats, the, pen] ;
L = [alice, eats, him, which, finds, the, cat] ;

(EDIT: Nesne alt cümleciklerine izin ver).


1
Herhangi bir örnek cümle çıktısı var mı?
Doktor

Evet, cevaba birkaç örnek verdim. Toplamda 2520 çıktı üretiyor, bu yüzden hepsini gönderemiyorum ...
chrisd

11

piton

Bildiğiniz gibi, birkaç importsaniye ile python ile her şeyi yapabilirsiniz . Bu basit görev, bu 2 satırlı python betiği ile gerçekleştirilebilir.

import random

print ("I like the number "+str(random.uniform(0,1)))

Bu senaryo tarafından oluşturulan cümlelerin sayısı çok büyük: 10^12farklı cümleler. Bir cümle okumak size ~ 0.5 saniye sürerse, hepsini okumak 15000 yıldan daha uzun sürecektir!

Bazı örnek cümleler:

  • I like the number 0.444371877853
  • I like the number 0.358614422548

Oysa üretilen tüm cümleler bir konu, bir fiil ve bir nesne içermektedir.

GÜNCELLEME:

Bu karmaşık aracın üretebileceği bazı karmaşık kelimeler hakkında bazı eleştiriler aldım. İşte kelimelerin çoğu ile uyum içinde olması gereken biraz daha uzun bir versiyon.

import random

print ('I like the number'+''.join([' '+{'0':'zero','.':'point','1':'one','2':'two','3':'three','4':'four','5':'five','6':'six','7':'seven','8':'eight','9':'nine'}[digit] for digit in str(random.uniform(0,1))])+'.')

İşte bazı örnek cümleler:

  • I like the number zero point six three five nine zero eight one five eight four two four.
  • I like the number zero point four nine zero eight four four three two zero six two seven.

Sözlerimdeki bazı kelimelerinizi bulamıyorum
Dr. belisarius

5
Yazılımımı, zayıf sözlüğünüze daha iyi uyacak şekilde ayarladım.
Antonio Ragagnin

2
Tamam. 15000 yıl içinde hepsini buldum belgelendirmek için gönderirim
Dr. belisarius

10

Mathematica dahili sözlüğü ile oynamak:

res = {};
SeedRandom[42 + 1];
Do[
  (While[
    If[(c = Flatten@WordData[RandomChoice[WordData[All]], "Examples"][[All, 2]]) != {},
     StringPosition[(c1 = RandomChoice@c), "'" | "-" | "\\" | "`"] != {}, True, True]];
   sp = ToLowerCase /@ StringSplit[c1, (WhitespaceCharacter .. | ",")];
   toChange = RandomSample[Range@#, RandomInteger[IntegerPart[{#/2, #}]]] &@Length@sp;
   If[StringPosition[ToString@WordData[sp[[#]], "Definitions"],  "WordData"] == {}, 
    sp[[#]] = RandomChoice@ WordData[All, RandomChoice@WordData[sp[[#]], "PartsOfSpeech"]]]
             & /@ toChange;
   AppendTo[res, StringJoin@Riffle[sp, " "]];)
  ,
  {10}];
res

Şanslısın, demek ki, zamanın% 70'i. Gibi şeyler üretir:

Bir amygdaloid elektrik devresi
Parkia oldu oradaki sınırlamaz olsa dağınık
onun longanimous toplumu
Kibbutz Education anlaşılmaz cevap Doktor
Julius Caesar'ın karşı biraz müzikal tiyatro
bir Tai nuthatch
cimrilik sportif merkez kontra thy aşağı biçmek
gerekli dışsal deterjanlar
sans necromantic büyücü
mayın latria karşısında bu vena pektoralis kupa eşi trend oluşturan yatırımcılar kahverengi
ne adam-taşınabilir yangın alan
umbra tatlı whereunto cevabım
başka vida-gevşek enkaz fırtına kokusuz aslant Aral Denizi karmaşık gözleme
itiraf için mongol tipi metal zevk

ancak bazen:

mayın evlat edinme yanlısı en az Lutzen savaşı sırasında nakit para kazanacaktı. Balta Hejira
dokuz ortak parıltılı subduction cinsi Seiurus'un izleyicilerini canlandıran

Ah, İngilizce kullanımı benimkinden daha iyi.


8

VBA / Excel

[değiştir 2]

Fiillerin nasıl birleştirileceğini öğrettiniz, aşağıdaki örnekler geçmiş zamandan daha kolaydır:

Orta şiddette yabani kokain tarihi anlık kararın yanına geçti. Bölgesel güvenli bölüm sayısız rastgele varlığın içine gizlendi. Sarı sağ alan, manyetik kırılgan cinsiyetin arkasına kaldırılmıştır. Fiziksel ölümcül kirlilik, ölülerin zayıf duyumlarını geçmeye başladı. Bilişsel cesur tiyatro kırılgan farkında edebiyatın önüne geçti. Geleneksel gerçek çıktı, favori bağışıklık bölgesinden uzağa direnç gösterdi. Sabit ekonomik ikiz, kötü insan gereksiniminin farkına vardı.

İlgili kod, bir dizi sıkıcı yardımcı ayrıştırma ve döngü işlevleri hariç olmak üzere takip edilir. Eksik olan ana bölümler çoğulculuk, zamanlama, çekimler, vb. Yapan çeşitli kelime listeleridir (konuşma bölümleriyle)

Köklerin tümü rastgele seçilir, ancak onları belirli bir cümle düzeninde dizilmeye zorlarım:

Debug.Print getWords("ad adj adj nns vpa1s pl ad adj adj nns")

... yukarıdaki çıktıyı üretmek için kullandığım şeydi. "Hızlı kızıl tilki tembel kahverengi köpeğin üstünden atladı." Genel formunu izler.

Function getWords(strStruc As String) As String
    Dim i As Long
    Dim s As Long
    Dim strIn As String
    Dim strOut As String

    getWords = ""
    s = numElements(strStruc)
    For i = 1 To s
        strIn = parsePattern(strStruc, i)
        Select Case strIn
            Case ",", ";", ":", """" 'punctuation
                strOut = strIn
                getWords = Trim(getWords)
            Case "ai", "ad" 'indefinite article, definite article
                strOut = getArticle(strIn)
            Case "adj" 'adjective
                strOut = getWord("adj", 1)
            Case "nns" 'noun nominative singular
                strOut = getWord("n", 1)
            Case "nnp" 'noun nominative plural
                strOut = getWord("n", 2)
            Case "nps" 'noun posessive singular
                strOut = getWord("n", 3)
            Case "npp" 'noun posessive plural
                strOut = getWord("n", 4)
            Case "vpr1s" 'Present 1st Person Singular
                strOut = getWord("v", 1)
            Case "vpr2s" 'Present 2nd Person Singular
                strOut = getWord("v", 2)
            Case "vpr3s" 'Present 3rd Person Singular
                strOut = getWord("v", 3)
            Case "vi" 'Infinitive
                strOut = getWord("v", 4)
            Case "vpp" 'Present Participle
                strOut = getWord("v", 5)
            Case "vi" 'Imperative/Subjunctive
                strOut = getWord("v", 6)
            Case "vpa1s" 'Past Tense First Person
                strOut = getWord("v", 7)
            Case "vpa2s" 'Past Tense Second Person
                strOut = getWord("v", 8)
            Case "vpa3s" 'Past Tense Third Person
                strOut = getWord("v", 9)
            Case "vppr1s" 'Present Progressive First Person Singular
                strOut = getWord("v", 10)
            Case "vppr2s" 'Present Progressive Second Person Singular
                strOut = getWord("v", 11)
            Case "vppr3s" 'Present Progressive Third Person Singular
                strOut = getWord("v", 12)
            Case "vppe1s" 'Present Perfect First Person Singular
                strOut = getWord("v", 13)
            Case "vppe2s" 'Present Perfect Second Person Singular
                strOut = getWord("v", 14)
            Case "vpp3s" 'Present Perfect Third Person Singular
                strOut = getWord("v", 15)
            Case "vi1s" 'Imperfect First Person Singular
                strOut = getWord("v", 16)
            Case "vi2s" 'Imperfect Second Person Singular
                strOut = getWord("v", 17)
            Case "v13s" 'Imperfect Third Person Singular
                strOut = getWord("v", 18)
            Case "vsf" 'Simple Future
                strOut = getWord("v", 19)
            Case "vfp" 'Future Progressive
                strOut = getWord("v", 20)
            Case "vc" 'Conditional
                strOut = getWord("v", 21)
            Case "vcp" 'Conditional Perfect
                strOut = getWord("v", 22)
            Case "vci" 'Conditional Imperfect
                strOut = getWord("v", 23)
            Case "pl" 'location prepositions
                strOut = getWord("pl", 1)
        End Select
        getWords = getWords & strOut & " "
    Next i
End Function

[orijinal yayına başla]

Hala devam eden bir çalışma, zaman ve mantık / isim çoğullama için mantık eklemek gerekir:

Ortalama seyahatiniz sözde dozumuzu ne de domatesimin ötesinde bir sıcaklık artışı.

... ayrıştırılabilir, ancak pek anlamlı değil.

Programlama, kirli balıkçılarını domuz cümbüşümüzden uzak tutuyor, bunun yerine cümle.

Sağ. Gerçekten bir cümle değil, bazı JavaScript hata mesajlarından daha iyi.

Temyiz başvurusu, hanımefendi anahatlarımın İngilizce’si üzerine yaptığı her canlı soruyu karşılıyor.

İnnuendo rutini neredeyse birinci sınıf ...

Anon'u takip etme kodu. Bu yarışmanın bitiş tarihi var mı?

[düzenle 1]

Yukarıdakileri oluşturan kod.

Function getWord(sht As Worksheet) As String
    Dim i As Long
    Dim freq As Long
    Dim c As Long
    Dim f As Double
    Dim fSum As Double

    c = 4
    fSum = WorksheetFunction.Count(sht.Columns(c))
    f = Rnd() * fSum
    i = 2
    Do
        If i >= f Then Exit Do
        i = i + 1
    Loop
    getWord = sht.Cells(i, 1).Value
End Function
Function PCase(str As String) As String
    PCase = UCase(Left(str, 1)) & Right(str, Len(str) - 1)
End Function
Sub doMakeSentences01()
    Dim shtIn As Worksheet
    Dim shtOut As Worksheet
    Dim strSheet As String
    Dim rIn As Long
    Dim rOut As Long
    Dim cFreq As Long
    Dim c As Long
    Dim strPattern As String
    Dim w As Long
    Dim strOut As String
    Dim strIn As String
    Dim strWord As String

    cFreq = 4
    Set shtOut = Sheets("Output")
    rOut = shtOut.Range("A65536").End(xlUp).Row + 1

    strPattern = "anvajncanvian"
    For rOut = rOut To rOut + 1000
        strOut = ""
        For w = 1 To Len(strPattern)
            Set shtIn = Sheets(Mid(strPattern, w, 1))
            strWord = getWord(shtIn)
            If w = 1 Then strWord = PCase(strWord)
            strOut = strOut & strWord & " "
        Next w
        strOut = Trim(strOut) & "."
        shtOut.Cells(rOut, 1).Value = strOut
    Next rOut
End Sub

5
Kodun nerede?
ace_HongKongIndependence

Kod için düzenlememe bakın.
Brandon R. Gates,

6

Perl 5

Tamam, programın bağırsakları şu:

use v5.14;
my %pad = (
    ...
);
sub pad { shift =~ s(\{(.+?)\}){pad($pad{$1}[rand(@{$pad{$1}})])}rogue }
say ucfirst pad '{START}';

Temelde bir "madlib" motor. Aslında ilginç cümleler oluşturmak için %padbazı verilerle doldurmanız gerekir . İşte bir örnek %pad...

my %pad = (
  START => ['{complex}.'],
  complex => [
    '{simple}',
    '{simple}, and {simple}',
    '{simple}, and {complex}',
    '{simple}, but {simple}',
    '{simple}, yet {simple}',
    'even though everybody knows {simple}, {simple}',
    'not only {simple}, but also {simple}',
  ],
  simple => [
    '{thing} {verb}s {thing}',
    '{thing} {verb}s {adverb}',
    '{thing} is {adjective}',
    '{things} {verb} {thing}',
    '{things} {verb} {adverb}',
    '{things} are {adjective}',
    '{thing} {past_verb} {thing}',
    '{things} {past_verb} {thing}',
  ],
  thing => [
    'the {adjective} gorilla',
    'the {adjective} mailbox',
    'Archbishop Desmond Tutu',
    'the beef salad sandwich',
    'the {adjective} stegosaur',
    'the summit of Mt Everest',
    'Chuck Norris',
    'the cast of television\'s "Glee"',
    'a {adjective} chocolate cake',
  ],
  things => [
    '{adjective} shoes',
    'spider webs',
    'millions of {adjective} eels',
    '{adjective} children',
    '{adjective} monkeys',
    '{things} and {things}',
    'the British crown jewels',
  ],
  verb => [
    'love',
    'hate',
    'eat',
    'drink',
    'follow',
    'worship',
    'respect',
    'reject',
    'welcome',
    'jump',
    'resemble',
    'grow',
    'encourage',
    'capture',
    'fascinate',
  ],
  past_verb => [  # too irregular to derive from {verb}
    'loved',
    'ate',
    'followed',
    'worshipped',
    'welcomed',
    'jumped',
    'made love to',
    'melted',
  ],
  adverb => [
    'greedily',
    'punctually',
    'noisily',
    'gladly',
    'regularly',
  ],
  adjective => [
    'enormous',
    'tiny',
    'haunted',
    'ghostly',
    'sparkling',
    'highly-decorated',
    'foul-smelling',
    '{adjective} (yet {adjective})',
    'expensive',
    'yellow',
    'green',
    'lilac',
    'tall',
    'short',
  ],
);

İşte ondan keşfettiğim bilgeliğin bazı örnekleri %pad. Bu cümle uzunluğu, noktalama, dilbilgisi vb. Onları bir hikaye anlatmak için kullanın: Bir hikaye hem dokunaklı hem de düşündürücü bulursunuz.

  • Örümcek ağları kısa.
  • Örümcek ağları düzenli olarak büyülüyor.
  • Kısa maymunlar ışıl ışıl, ama örümcek ağları açgözlülükle içiyor.
  • Pırıl pırıl (henüz kötü kokulu) maymunlar minik (ama pırıl pırıl) gorilleri izledi.
  • Everest Dağı'nın zirvesi, son derece dekore edilmiş Stegosaur'u karşıladı.
  • Sadece Everest Dağı'nın zirvesi pahalı değil, aynı zamanda televizyonun "Glee" sini de parlayan goril izledi.
  • Televizyonun "Glee" kadrosu leylak posta kutusuna benziyor.
  • Pahalı posta kutusu uzundur ve pahalı stegosaur Chuck Norris'i atlar, ancak yeşil ayakkabılar dana salatası sandviçinden atlar.
  • Sığır salatası sandviçi Chuck Norris'i çok severdi.
  • Milyonlarca parlayan yılan balığı yeşildir (hayalet gibi).

Şimdi pedi programlı olarak yerleştirebilirseniz
Pureferret

Tamponun programlı olarak doldurulması zor değildir. Sadece wiktionary veya başka bir şey kazıyın. Bu olsa bile eğlenceli cümleler getirmez.
tobyink

Çok fazla bir zorluk değil ama bunun eğlenceli bir parçası olduğunu düşünüyorum.
Pureferret

5

Ms Word

Bunun kabul edilebilir olup olmadığından emin değilim, ancak html olduğundan, bunun da kabul edilebilir olması gerektiğini düşünüyorum.

 =rand(1,1)

Örnek cümleler:

Ekle sekmesinde, galeriler, belgenizin genel görünümü ile koordine etmek üzere tasarlanmış öğeler içerir.

Bu galerileri tabloları, başlıkları, altbilgileri, listeleri, kapak sayfalarını ve diğer belge yapı taşlarını eklemek için kullanabilirsiniz.

istediğiniz sayıda cümle ve paragraf da belirleyebilirsiniz.


4

JSoup ve simpleNLG kullanarak devam eden bir çalışma

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

import simplenlg.framework.NLGFactory;
import simplenlg.lexicon.Lexicon;
import simplenlg.phrasespec.SPhraseSpec;
import simplenlg.realiser.english.Realiser;

/**
 * Scapes words from Wiktionary then assembles them into sentences
 * 
 * @author pureferret
 *
 */
public class SentenceBuilder {
    static ArrayList<String> ListOfWordTypes= new ArrayList<>(Arrays.asList("Noun","Verb","Adjective","Adverb","Proper noun","Conjunction"));
    private static String RandomWiktWord ="http://toolserver.org/~hippietrail/randompage.fcgi?langname=English";  
    /**
     * @param args
     */
    public static void main(String[] args) {
        Lexicon lexicon = Lexicon.getDefaultLexicon();
        NLGFactory nlgFactory = new NLGFactory(lexicon);
        Realiser realiser = new Realiser(lexicon);

        ArrayList<String> nounList = new ArrayList<String>();
        ArrayList<String> verbList = new ArrayList<String>();
        ArrayList<String> adjeList = new ArrayList<String>();
        ArrayList<String> adveList = new ArrayList<String>();
        ArrayList<String> pnouList = new ArrayList<String>();
        ArrayList<String> conjList = new ArrayList<String>();


        String word= null;
        String wordType = null;

        try {
            newDoc:
            while( nounList.size()<1 ||
                    verbList.size()<1 ||
//                  adjeList.size()<2 ||
//                  adveList.size()<2 ||
                    pnouList.size()<1){
                Document doc = Jsoup.connect(RandomWiktWord).get();
                Element bodyElem = doc.body();
                word = bodyElem.select("h1>span[dir=auto]").get(0).ownText();
                int wtIdx = 0;
                while(wtIdx<bodyElem.select("div#mw-content-text span.mw-headline").size()){
                    wordType = bodyElem.select("div#mw-content-text span.mw-headline").get(wtIdx).id()
                            .replace("_", " ");
                    wtIdx++;
                    switch (wordType) {
                    case "Proper noun":
                        pnouList.add(word);
                        continue newDoc;
                    case "Noun":
                        nounList.add(word);
                        continue newDoc;
                    case "Verb":
                        verbList.add(word);
                        continue newDoc;
                    case "Adjective":
                        adjeList.add(word);
                        continue newDoc;
                    case "Adverb":
                        adveList.add(word);
                        continue newDoc;
                    case "Conjunction":
                        conjList .add(word);
                        continue newDoc;
                    default:
                        break;
                    }
                }
            }
                SPhraseSpec p = nlgFactory.createClause();
                p.setSubject(pnouList.get(0));
                p.setVerb(verbList.get(0));
                p.setObject(nounList.get(0));

                String output2 = realiser.realiseSentence(p); // Realiser created earlier.
                System.out.println(output2);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.err.println(word + " is a " + wordType);
        } catch (IndexOutOfBoundsException e) {
            e.printStackTrace();
            System.err.println(word + " is a " + wordType);
        }
    }

}

Sorunlar:

  • Cümleler çok basit
  • Bazen 404s (iyi kullanım olmadan!)
  • Bir seferde sadece bir cümle üretir
  • Anahtar kılıfı kullanır!

Örnek çıktılar:

Popoloca porsiyonluk fasulye.
Oğlak burcu Tropic, kılları kirişler.
Pekin, yastık kutularını eş anlamlı olarak kullanıyor.
Chukchis etkileyen etkileyenler


3

PHP

<?php
  $trends = file_get_contents('http://www.google.com/trends/hottrends/widget?pn=p1&tn=30');
  preg_match_all("/widget-title-in-list'>(.+?)</", $trends, $m);

  $q = urlencode($m[1][array_rand($m[1])]);
  $page = file_get_contents("http://www.google.com/search?q=$q&btnI=1");
  preg_match_all('/[A-Z]([\w,]+ ){2,}[\w, ]+?[.!]/', strip_tags($page), $m);

  echo $m[0][array_rand($m[0])];

Bu, en popüler 30 google aramasını getirir, "Kendimi Şanslı Hissediyorum" araması yapar ve ardından bu sayfadan en az 3 kelime içeren rasgele bir cümle görüntüler.

Örnekler:

"Etkinlikte bir madalya favori olarak kabul edildi."

"Kate liseden bir yıl erken mezun oldu."

"15 Nisan 2014, yaşayan insanların biyografileri politikasına uyumu teşvik etmek."

"Biz Bryan adına, biz ailesi, sevgiyi, duaları ve desteği desteklediği için herkese teşekkür etmek istiyoruz."

"Bu makale Amerikan basketbol oyuncusuyla ilgili."

"Üzgünüz, tarayıcınızda JavaScript devre dışı bırakılmış veya desteklenen bir oynatıcı yok."


3

Python 2.7

python2.7 -c "import urllib2, pprint; pprint.pprint([str(x[:x.find('<')]) for x in unicode(urllib2.urlopen('http://codegolf.stackexchange.com/questions/21571/generate-an-understandable-sentence').read(), 'utf8').split('<p>') if x.find('<') >= 1][1].split('.')[0])"

çıktı:

Okunabilen ve anlaşılabilen bir cümle oluşturun


Stack Exchange'in paylaşım URI'lerini kullanın (örneğin /q/21571yerine /questions/21571/generate-an-understandable-sentence).
Blacklight Shining

2
Bu kod golf olmadığından okunabilirlik için satır sonları iyi olurdu.
nyuszika7h

2

Kabuk Betiği

Bu komut dosyası, her zaman şu anda bu sitenin tepesinde olan ilk sorunun başlığını görüntüler. Benim varsayım, soru başlığı her zaman insan tarafından okunabilir olacak. Ve dinamik olarak değişecek. Bu yüzden ne zaman yeni bir soru gelirse ve senaryo çalıştırıldığında, en son soru başlığını verecektir.

curl "codegolf.stackexchange.com" -s |  w3m -dump -T text/html > foo.txt
awk 'f;/more tags/{f=1}' foo.txt > foo1.txt
sed '8q;d' foo1.txt

Deneme 1 çıkışı

Find words containing every vowel

Deneme 2 çıkışı

Hello World 0.0!

DÜZENLE

Hiçbir dosya kullanmamak. Dosyalar olmadan aşağıdaki betiği kullanabilirim.

value1=$(curl "codegolf.stackexchange.com" -s |  w3m -dump -T text/html)
echo "$value1" | grep -A 8 "more tags" | tail -1

Çıktı

Generate an understandable sentence

1
ne de doğrudan onları bir dosyadan okuyor ...
rafaelcastrocouto

Bir dosyayı kullanmamak için değişiklikler yaptım. Şimdi sadece değişkenleri kullandı. Buna ne dersin?
Ramesh

2
oy kaldırıldı!
rafaelcastrocouto

2

JavaScript (ES6)

var t='';for(f of [_=>foo,_=>null.a,_=>0..toString(0)])try{f()}catch(e){t+=e.message+'\n';}t

Konsolda çalıştırmak üretir

foo is not defined
null has no properties
radix must be an integer at least 2 and no greater than 36

Daha kısa:t='';for(f of [_=>foo,_=>null.a,_=>0..toString(0)])try{f()}catch(e){t+=e.message+'\n'}t
Diş fırçası

2

Yine başka bir Python betiği

User3058846 cevabı kötü değil, ama her cümle, her zaman gösterir. Burada Zen of Python'dan rastgele bir cümle çıkaran bir senaryo öneririm :

from random import choice
import subprocess
proc = subprocess.Popen(('python', '-c', 'import this'), stdout=subprocess.PIPE,)
# Get output of proc, split by newline
sentences = [x for x in proc.communicate()[0].splitlines() if x != '']
print(choice(sentences))

Tek satırda, hayranları için:

from random import choice;import subprocess;print(choice([x for x in subprocess.Popen("python -c 'import this'",shell=True,stdout=subprocess.PIPE).communicate()[0].split('\n') if x]))

(Boooh, kirli.)

Örnekler:

>>> a()  # <--- a is just the oneline above
Explicit is better than implicit.
>>> a() 
Although never is often better than *right* now.
>>> a() 
Errors should never pass silently.
>>> a() 
Special cases aren't special enough to break the rules.


Python'da bir başka eğlenceli yol

@ TheDoctor sayesinde bu fikri dökün :-) Ithalat çıkışını sessiz ve daha sonra sözde şifreli dict ile modülde oynayın.

import sys, random 
_stdout, sys.stdout = sys.stdout, open('/tmp/trash', 'w')  # silent the stdout just for the import
import this
sys.stdout = _stdout
lst = []
for x in this.s:
    if x in this.d:
        lst.append(this.d[x])
    else:
        lst.append(x)

# Then, example from the interpreter
>>> random.choice(''.join(lst).split('\n'))
'Beautiful is better than ugly.'
>>> random.choice(''.join(lst).split('\n'))
'Although never is often better than *right* now.'
>>>

Kullanımı genellikle kötü bir uygulamadır shell=True. Bu durumda güvensiz olmasa da, kullanıcı girişi almadığınız için tercihte bulunacağım subprocess.Popen(('python', '-c', 'import this')).
nyuszika7h

Şiirini susturabilirseniz import this, modülde thistüm metni içeren ancak şifreli bir değişken olduğunu biliyor muydunuz? Ayrıca şifresini çözmek için bir sözlük var.
Doktor

1
@TheDoctor Güncelleme cevabım bakın: D
Maxime Lorant

1

Python 3

Dilbilgisel çıktı üretme garantisi! (Genelde.)

import re
from urllib.request import urlopen
from random import random, choice as pick

letters = "abcdefghijklmnopqrstuvwxyz"
wordregex = re.compile(r'a href="/wiki/([a-z_]+)"')
subjects = {1:("I","we"), 2:("you",), 3:("they",)}
objects = {1:("me","us"), 2:("you",), 3:("him","her","it","them")}
patterns = ["{0} {1} {2}.",
            "Why do {0} {1} {2}?",
            "It's because {0} {1} {2}, of course.",
            "Did {0} {1} {2}?",
            "{0} will not {1} {2}!",
            ]

wiktionaryurl = "http://en.wiktionary.org/w/index.php?" + \
              "title=Category:English_{0}&pagefrom={1}"

def getWord(category):
    subset = pick(letters) + pick(letters)
    url = wiktionaryurl.format(category, subset)
    try:
        response = urlopen(url)
    except:
        print("An error occurred while connecting to the Internet!")
        return "fail"
    page = str(response.read())
    word = pick(wordregex.findall(page))
    word = word.replace("_", " ")
    return word

for i in range(10):
    verb = getWord("transitive_verbs")
    subjPerson = pick([1,2,3])
    subj = pick(subjects[subjPerson])
    if random() > 0.4:
        # Use a plural noun for the object
        obj = getWord("plurals")
    else:
        # Use a pronoun for the object
        objPerson = pick([1,2,3])
        while subjPerson == objPerson and subjPerson in (1,2):
            objPerson = pick([1,2,3])
        obj = pick(objects[objPerson])
    sentence = pick(patterns).format(subj, verb, obj)
    sentence = sentence[0].upper() + sentence[1:]
    print(sentence)

Mükemmel gramer yapmak için alt çizgiyi alttan silin. wordregex . Bu, "Sizi sıkıştırıyoruz" gibi kötü cümlelere yol açan çok kelimeli girişlere izin vermeyecektir.

Örnek çalışma:

We appropriate journals.
I will not masticate you!
Did you lower me?
Why do I sag estoppels?
They will not proofread you!
It's because you unbeguile mucosae, of course.
Why do I flack zakuski?
You will not visit junkpiles!
Did they goat us?
Why do we prefix nolids?

Şu ana kadarki favori çıktı:

They you her.

Bakın: http://en.wiktionary.org/wiki/you#Verb .


0

piton

Sonuç:

$ python mksentence.py
infringement lecture attainment
Produce more? (Y/N)y
impeachment recoup ornament
Produce more? (Y/N)y
maladjustment edit discouragement
Produce more? (Y/N)y
embellishment guest punishment
Produce more? (Y/N)y
settlement section escapement
Produce more? (Y/N)y
segment withhold recruitment
Produce more? (Y/N)

Buradaki kelime listesini kullandım Her ünlü kelimeyi içeren kelimeleri bul

Biraz daha kural eklenebilir. Örneğin, "ness" ile biten ve aynı zamanda sonek olmadan ayarlanan bir sözcük varsa, o zaman bir isimdir.

Kaynak kodu:

#!/usr/bin/env python
# vim: set fileencoding=utf-8 ts=4 sw=4 tw=72 :

from __future__ import (unicode_literals, absolute_import,
                        division, print_function)

import random                     

if __name__ == "__main__":        
    filename = 'corncob_lowercase.txt'
    noun = set()
    verb = set()
    whole_words_set = {word.rstrip() for word in open(filename)}

    for word in whole_words_set:
        if word.endswith('ment'):
            noun.add(word)
        elif word.endswith('ing'):
            if word[:-3] in whole_words_set:
                verb.add(word[:-3])
            elif word[:-3]+"e" in whole_words_set:
                verb.add(word[:-3]+"e")
    noun_list = list(noun)
    verb_list = list(verb)
    while True:                   
        sentence = "%s %s %s" % (random.choice(noun_list),
                                 random.choice(verb_list),
                                 random.choice(noun_list))                                                                                           
        print(sentence)
        if input("Produce more? (Y/N)").lower() == "n":
            break

3
Gerçekten Python ve English'i emiyor muyum, yoksa 2 isim ve bir fiil yerine 3 isim mi çıkarıyorsunuz?
ace_HongKongIndependence

@ace Oops, kodu son dakikada düzeltmeye karar verdim :-(
yegle

0

darbe

Var olan ancak kurulu olmayan bir programı çalıştırmaya çalışmak bunu verir (Linux Mint 13'te).

$ say
The program 'say' is currently not installed.  To run 'say' please ask your administrator to install the package 'gnustep-gui-runtime'

Farklı dağıtımlarda, size farklı bir cümle verir.
Doktor

Bu yüzden LM13
user80551 'de

0

Python 3

Maxime'in cevabından ilham alan The Zen of Python'da bir başka çekim .

import codecs
import os
import sys
import random

stdout = sys.stdout
sys.stdout = open(os.devnull, 'r+')

import this

sys.stdout.close()
sys.stdout = stdout

zen = codecs.decode(this.s, 'rot-13').splitlines()

print(random.choice(zen))

0
var vocab={
    noun:{
        tp:{
            singular:["Mike","Chan","Karl","Mithun","Debasish","Kamal","Group","Crowd","He","She"],
            plural:["They"],
        },
        fp:{
            singular:["I"],
            plural:["We"]
        },
        sp:{
            singular:["You"],
            plural:["You"]
        }

    },
    verbIndicator:{
        tp:{
            present:{
                singular:["is"],
                plural:["are"]
            },
            past:{
                singular:["was"],
                plural:["were"]
            }
        },
        fp:{
            present:{
                singular:["am"],
                plural:["are"]
            },
            past:{
                singular:["was"],
                plural:["were"]
            }
        },
        sp:{
            present:{
                singular:["are"],
                plural:["are"]
            },
            past:{
                singular:["were"],
                plural:["were"]
            }
        }
    },
    verb:{
        continuous:{
            consumer:["having"],
            performer:["doing","playing","watching"]
        },
        simple:{
            consumer:["had"],
            performer:["did","played","watched"]
        }
    },
    dependentAction:{
        consumer:["food","fun","badtime"],
        performer:["movie","cricket","song","dance"]
    },
    independentAction:["Cooking","Playing","singing"],
    adjective:["good","bad","excellent","awesome"],
    object:["boy","Person","girl","Human being","Man","Mental"]
}

var referenceBook={
    figure:["fp","sp","tp"],
    time:["present","past"],
    singularity:["singular","plural"],
    verState:{
        present:["continuous"],
        past:["continuous","simple"]
    },
    objectRole:["consumer","performer"]
};

function getTerm(term) {
    var cur = referenceBook[term] || [];
    var randomIndex = Math.ceil((Math.random() * 93967)) % cur.length;
    return cur[randomIndex]

}
function getToken(key) {
    var path = key.split("-");
    var token = vocab;
    path.forEach(function(s) {
        token = token[s];
   });

    return token[Math.ceil((Math.random() * 1000)) % token.length];

}

function generateSentence(rules) {
    rules.forEach(function(str) {
        var m = str.match(/{[^}]*}/g)

        var variable = {};
        if (m) {
            m.forEach(function(s) {
                s = s.replace(/(^{)|(}$)/g, "");
                variable[s] = getTerm(s);
            });

            for (var each in variable) {
                str = str.replace(new RegExp("{" + each + "}", 'g'), variable[each]);

            }
        }
        var cur = str.split("|");
        var sentence = "";
        cur.forEach(function(s) {
            sentence += " " + getToken(s);

        })
        console.log(sentence);

    })


};
/*

In the rules array, I specify rules for the sentence to be genrated

*/

var rules = [
    "noun-{figure}-{singularity}|verbIndicator-{figure}-{time}-{singularity}|verb-continuous-{objectRole}|dependentAction-{objectRole}", 
    "noun-sp-singular|adjective|object"
];

generateSentence(rules);

4
Lütfen bunun hangi dili olduğunu belirtiniz.
Rodolfo Dias

1
@RodolfoDias Bu Javascript olduğundan eminim ... emin değilim.
Doktor
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.