Tạo một câu dễ hiểu


55

Vấn đề:

Tạo một câu có thể đọc và hiểu. Nó phải chứa một chủ ngữ, động từ và đối tượng, và các thì và số nhiều phải khớp. Chương trình cũng phải có khả năng tạo ra một số câu khác nhau để đủ điều kiện.

Quy tắc:

  • Mã hóa cứng các câu không được phép và cũng không được đọc chúng trực tiếp từ một tệp (tôi đang nhìn bạn, không rõ ràng)
  • Bạn có thể có bất kỳ số lượng danh sách từ
  • Gửi một câu ví dụ hoặc 2 đã được tạo bởi chương trình của bạn
  • Mọi ngôn ngữ đều được chấp nhận
  • Đó là một , vì vậy câu trả lời được đánh giá cao nhất sẽ chiến thắng

7
Tôi nghĩ rõ ràng từ một số câu trả lời ( MatLab tôi đang nhìn bạn) rằng bạn nên sửa đổi các quy tắc sao cho việc khai thác dữ liệu không được phép lấy các từ liên tiếp từ bất kỳ nguồn nào.
Carl Witthoft

Trong khi tôi là một người thông minh: vì đây hoàn toàn là một cuộc thi nổi tiếng, ai đó chỉ nên đăng một jpg HotModelBikini. Điều đó sẽ nhận được nhiều phiếu hơn bất cứ điều gì.
Carl Witthoft

7
Tôi sẽ khuyến khích bất cứ ai sử dụng sự lặp lại của "trâu" hoặc "cá" làm câu mẫu!

7
Hầu hết các câu trả lời ở đây đều là câu hợp lệ, đầy đủ từ các nguồn văn bản hoặc tạo đầu ra không đáp ứng các tiêu chí. Đối với tôi, cả hai cách tiếp cận dường như chống lại tinh thần của câu hỏi! Nếu ai đó thực sự muốn gây ấn tượng, tôi có thể đề xuất một chương trình bắt đầu bằng một tập hợp các cấu trúc câu hợp lệ như [Adjective] [pl. noun] [verb] [adjective] [pl. noun]và lấy từ một từ điển thực sự (có thể sử dụng một trong các API từ điển có sẵn ngoài đó) để điền vào chỗ trống không? Tôi sẽ tự viết nếu tôi có vài phút rảnh rỗi! :( Sau tất cả ...Lazy Developers Write Lousy Programs.
Brian Lacy

1
@Pureferret Danh sách từ sẽ là danh sách các từ riêng lẻ. Mã hóa cứng sẽ là một danh sách các câu hoàn chỉnh. Với danh sách từ, thông thường bạn sẽ cần một số logic trong chương trình để ghép một câu hoàn chỉnh. Với các câu được mã hóa cứng, về cơ bản bạn chỉ cần một câu lệnh in.
8bittree

Câu trả lời:


87

Bash

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

Yêu cầu: nguồn kernel linux được cài đặt trong / usr / src

Điều này kéo bình luận ngẫu nhiên ra khỏi nguồn kernel. Cho dù các câu thực sự dễ hiểu là mở để tranh luận.

Ví dụ về sản lượng thực tế:

  • 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
Tốt một! Bạn nên kéo tất cả chúng và gửi nó dưới dạng fortunecơ sở dữ liệu chính thức .
Jason C

18
"???" bình luận hay nhất từ ​​trước đến nay
Ray

4
Không phải quy tắc đầu tiên 'cũng không phải là đọc chúng trực tiếp từ một tệp' có bị vi phạm không?
kuldeep.kamboj

6
Tôi muốn nói rằng tìm kiếm thông qua mã nguồn hệ thống và lọc văn bản từ các bình luận không thực sự được tính là "đọc trực tiếp".
Bạo loạn

7
Slave Overflow. tên hay cho một trang web SE
TheDoctor

95

Matlab

why

ví dụ về đầu ra:

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

[Đây là một trong những quả trứng Phục sinh của Matlab]

EDIT: bạn có thể xem mã của hàm này tại đây: why.m



8
Ví dụ thứ hai không phải là một câu. Đó là một cụm từ nguyên bản.
wchargein

2
Phải trong số các câu trả lời ở đây không chỉ tạo ra các câu (ví dụ, hãy xem các câu trả lời được bình chọn cao khác). Nhiệm vụ không nói nó phải tạo ra các câu, nó nói nó phải có khả năng tạo ra các câu.
Elisha

51

PHP

Cho đủ thời gian, điều này sẽ tạo ra tất cả văn học, quá khứ, hiện tại và tương lai. Các quy tắc đã không đề cập rằng không có văn bản khác có thể được sản xuất.

Chuỗi 'TOS...'cung cấp tần số thang logarit của các chữ cái để khớp với tiếng Anh hơn. Điều này được sử dụng để tạo ra một chuỗi lớn hơn với tần số chữ tương đối gần đúng.

$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);

Chạy nó, tôi đã phát hiện ra những viên ngọc văn học như:

  • GO NOW- Bạn là một chủ đề được ngụ ý.
  • IM AOK - Tôi ổn
  • IM FDR - Tôi là F (Ranklin) D (eleano) R (oosevelt)

Ngoài ra, rất nhiều lời mời để thể hiện chính xác sự không hài lòng với tình hình hiện tại. [Một số chữ cái được điều chỉnh lại.]

  • F**K
  • S**T

Đồng thời, sau đây sử dụng tỷ lệ tinh chỉnh:

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

60
Tại sao, một đàn khỉ có thể làm như vậy!
Tim S.

11
Tôi thích! Bây giờ làm một chương trình xử lý các chữ cái ra khỏi đó và tìm các câu dễ hiểu! :)
TheDoctor

2
+1 - bất kỳ cơ hội để tự động hóa phần khám phá? Nhiệm vụ dường như tạo ra câu * một * (?). BTW: bạn đã dành bao nhiêu thời gian;)
Sói

20
Làm thế nào bạn nhận được F**KS**Tcung cấp không có *trong 'ABCDEFGHIJKMLNOPQRSTUVWXYZ '?
glglgl

3
@Ypnypn - 'TOS...'Chuỗi đại diện cho tần số của mỗi chữ cái theo thang logarit. Như vậy Acó tần số T, Bcó tần số O. Jcó tần số thấp nhất Achuyển thành 0, trong đó nhật ký nghịch đảo là 1. Ký tự cuối cùng là Zkhoảng trắng , có tần số hoặc vòng (exp (25 / 3.976)) = 538, do đó, không gian xảy ra thường xuyên hơn 538 lần J. Chỉ cần nghĩ rằng nó đặt một khuynh hướng gọn gàng về vấn đề khỉ-máy chữ .

42

C

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

Ví dụ đầu ra:

Phần mềm gây ra hủy bỏ kết nối
Cuộc gọi hệ thống bị gián đoạn nên được khởi động lại

Ngoài ra còn có rất nhiều đầu ra câu hợp lệ không có chủ ngữ, động từ và đối tượng:


Tệp hết thời gian tồn tại


Làm thế nào và khi nào điều này chấm dứt? (có, nhưng tôi không hiểu tại sao)
phil294

1
@Blauhirn điều kiện chấm dứt vòng lặp ước tính --ithành false khi i(một biến loại charcó giá trị ban đầu 0) đạt 0 lần nữa. Nếu charkhông được ký (ví dụ ARM), isẽ ngay lập tức bao quanh giá trị lớn nhất của nó (thường là 255) và đếm ngược đến 0. Nếu charđược ký (hầu hết các hệ thống Intel), hành vi nói đúng là không xác định, nhưng thường thì khi nó đạt đến giá trị tối thiểu ( thông thường -128) nó sẽ bao quanh tối đa (thường là 127) và đếm ngược đến 0. Vì vậy, chương trình thường sẽ in tổng cộng 256 dòng.
ecatmur

37

Java

Kéo câu giới thiệu từ một bài viết Wikipedia ngẫu nhiên:

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 + ".");
    }
}

Đôi khi bạn gặp xui xẻo; Tôi cố gắng giảm thiểu điều này bằng cách đặt độ dài câu tối thiểu và lọc ra các câu kết thúc bằng ":" (tất cả các trang định hướng bắt đầu theo cách đó) hoặc chứa dấu "?" (dường như có nhiều bài viết với thông tin chưa biết chưa được giải quyết được đánh dấu bằng dấu chấm hỏi). Ranh giới câu là một khoảng thời gian theo sau khoảng trắng theo sau là một số hoặc chữ in hoa.

Tôi cũng lọc ra văn bản trong ngoặc đơn (kết quả vẫn là một câu hợp lệ) để thử và xóa một số khoảng thời gian không có ranh giới câu. Tôi lọc ra dấu ngoặc vuông để loại bỏ số trích dẫn nguồn. Ví dụ:

  • Idle Cure là một ban nhạc rock đấu trường từ Long Beach, California.
  • Tự hội tụ là một quá trình quang học phi tuyến tính gây ra bởi sự thay đổi chỉ số khúc xạ của vật liệu tiếp xúc với bức xạ điện từ mạnh.
  • TB10Cs4H3 là một thành viên của lớp phân tử RNA không mã hóa giống như H / ACA hướng dẫn các vị trí biến đổi uridine thành pseudouridine của RNA cơ chất.
  • Wild Ram sáu đầu trong thần thoại Sumer là một trong những Anh hùng bị giết bởi Ninurta, vị thần bảo trợ của Lagash, ở Iraq cổ đại.
  • Sugar Daddy là một thuật ngữ tiếng lóng cho một người đàn ông đề nghị hỗ trợ một phụ nữ hoặc người đàn ông trẻ hơn bình thường sau khi thiết lập một mối quan hệ thường là tình dục.
  • Nhà thờ Old Bethel United Methodist tọa lạc tại 222 Calhoun St., Charleston, Nam Carolina.
  • Douglas Geers là một nhà soạn nhạc người Mỹ.

Nếu bạn nhận thấy bất kỳ vấn đề ngữ pháp nào, thì đó là lỗi của bạn vì đã không phải là một biên tập viên Wikipedia siêng năng! ;-)


4
Chắc chắn có một sự khác biệt giữa "hợp lệ" và "có thể hiểu được". Tôi đã có một số pseudouridines RNA cơ chất cho bạn ngay tại đây, em yêu.
Jason C

1
Tôi đã nhận được điều này ngay lần đầu tiên tôi chạy nó: Echinolittorina Châu Phi / Litorina Châu Phi Philippi, 1847 / Litorina decollata Philippi, 1847 / Littorina Châu Phi / Littorina perplexa Turton, 1932 / Nodilittorina Châu Phi. Tìm kiếm! ;) Haha! OMG, lần thứ hai tôi chạy nó, nó đã trả về một dòng từ trang Wiki của Mikhail Gorbachev. Ai chia sẻ tên của tôi. Khá quái đản.
mikhailcazi

2
'/' Không thực sự ở đó! Haha: PI đã sử dụng nó để đại diện cho các dòng mới. Có lẽ tôi nên sử dụng \ n. Đó là từ đây: en.wikipedia.org/wiki/Afrolittorina_africana . Bảng bên phải, dưới các từ đồng nghĩa :) Dù sao, đó không phải là một ấn tượng xấu nên đừng lo lắng, bởi vì điều đó Mikhail Gorbachev khá tuyệt. Và tất cả các câu sau đó là bình thường.
mikhailcazi

2
Bạn có thể tìm thấy câu trả lời Vật lý này là một người đồng sử dụng thú vị, gần đây của một trong những bài viết đó.
EP

2
Nó có thể là một khía cạnh phổ biến nhưng rất không trực quan về xác suất: một lần trong một triệu sự kiện có thể khá phổ biến trong một thế giới có hàng tỷ người. Điều đó nói rằng, tôi không chắc những gì một phân tích chính thức sẽ nói. Tôi cũng khá bất ngờ! Bạn cũng có thể lưu ý rằng không có "người khác" liên quan.
EP

34

Soooo ... Vì đây là , tôi đã có một số niềm vui với evalvà với các chức năng. Về cơ bản tôi tạo một số ngẫu nhiên và sau đó thực hiện một hàm ngẫu nhiên dựa trên số đó (trong khuôn mặt của bạn , switch!) Thông qua eval.

PHP, ~ 9k đầu ra hợp lệ

<?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."();");

?>

Một số kết quả đầu ra ...

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, PHP_EOLchỉ bao giờ bằng \nhoặc \r\n, tùy thuộc vào hệ điều hành, nhưng không bao giờ <br>hoặc tương tự.
timmyRS

@timmyRS Vâng, bạn nói đúng, đây là một nhận xét cũ, tôi không biết tại sao tôi lại viết nó vào lúc đó.
nyuszika7h

33

Dự án PHP + Gutenberg

Tôi đã viết một tập lệnh PHP để biến một tài liệu văn bản đơn giản thành một tập hợp các từ bigram , sau đó nó sử dụng để tạo các câu ngẫu nhiên. Dưới đây là một số ví dụ tốt hơn mà nó tạo ra từ toàn bộ phiên bản văn bản đơn giản của bài phát biểu "Hãy cho tôi tự do hoặc cho tôi cái chết" của Patrick Henry , bao gồm cả bản in nhỏ của Project Gutenberg:

  • Dự án Gutenberg Etext của các quốc gia, và chế độ nô lệ!

  • Chúng tôi xin lỗi vì kỷ niệm 200 năm của Bản in nhỏ này!

  • BẠN KHÔNG CÓ SỰ ĐẢM BẢO NÀO KHÁC CỦA BẤT K K LOẠI NÀO, R D RÀNG HAY TUYỆT VỜI, nhưng đối với tôi, cái chết!

Bạn có thể thử nó cho chính mình ở đây. Làm mới trang cho một loạt câu mới.

Nếu bạn muốn tự chạy mã nguồn, đừng quên tải $src_textvới văn bản thuần túy đã chọ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 Điều này thực sự đóng đinh tinh thần của thử thách! Tôi không thể tìm thấy ngay bây giờ nhưng đã từng có một trình tạo câu trực tuyến dựa trên Google hoạt động theo cách tương tự, nhưng các bigram (hoặc n-gram tùy chọn lớn hơn) được lấy từ kết quả tìm kiếm của Google bằng cách tìm kiếm một từ và quan sát những gì theo nó trong đoạn trích xem trước kết quả tìm kiếm. Có lẽ tôi sẽ tạo lại nó và đăng nó ở đây.
Jason C

Thế còn cái này! "Thưa ông, chúng tôi thấy rằng đã được hài lòng để cải thiện cuộc thi." Hay cái này! "Họ nói với chúng tôi rằng bạn hoàn lại thời điểm khủng khiếp để cải thiện phần Etext 6 Ngày cập nhật lần cuối: ngày 5 tháng 5 năm 2005 Chính thức phát hành cho các trận chiến của chúng tôi."
Hosch250

1
But for me, death!: DI muốn tất cả các giấy phép / thỏa thuận kết thúc mạnh mẽ.
Navin

Haha, "Chính thức phát hành cho các trận chiến của chúng tôi một mình."
Jason C

1
Tôi nhận được "Không có gì." :(
TheNumberOne

29

Con trăn

Mục này chọn từ trong toàn bộ từ điển hệ thống. Nó lợi dụng thực tế là bạn có thể biến hầu hết các danh từ thành động từ và ngược lại. Nó sử dụng một vài phương pháp phỏng đoán để phân loại các từ và tránh những điều không rõ ràng.

Nó tạo ra một vài câu gần như lành mạnh:

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

Nhiều người điên:

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

Và rất nhiều thứ nghe có vẻ như Monty Python tạo ra những bản innuendos dâm dục:

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.

Phiên bản 3 đã được sửa đổi để lấy bất kỳ tệp văn bản nào làm đầu vào:

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

(phiên bản 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
Những câu ví dụ đang làm tôi cười rất nhiều, tôi đang khóc! xD
mikhailcazi

cat FILE | COMMAND? UUOC ;)
nyuszika7h

Cảm ơn bạn @ nyuszika7h, tôi đã học được điều gì hôm nay. Phá vỡ một thói quen mà cũ có thể khó khăn ...
HỎI

1
This smoke toasted some nonresidents.. CHÀO MỪNG.
phil294

25

Bash

Lấy cảm hứng từ câu trả lời Matlab. Giả sử bạn đã aptitudecài đặt.

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

Kết quả đầu ra có thể (ảnh chụp màn hình từ này bài viết wikipedia)

nhập mô tả hình ảnh ở đây


7
Tôi không nghĩ . /----\ -------/ \ / \ / | -----------------/ --------\ ----------------------------------------------là một câu hợp lệ.
Svick

1
@svick you wincó thể là một câu (đối tượng "đối số" được ngụ ý). Và ngay cả khi không, câu hỏi không cấm các trường hợp đầu ra không hợp lệ.
ace_HongKongInependence

23

Con trăn:

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

Mẫu:

  • Trâu trâu.
  • Trâu trâu trâu trâu trâu trâu.

Thật không may, nó có phần xử lý dấu câu và viết hoa kém, nhưng sau đó một lần nữa những người không được liệt kê là yêu cầu.

Ngoài ra, đây là một tài liệu tham khảo.


3
Đừng thêm khoảng trắng vào chữ trâu; thay vì sử dụng ' '.join(l). Điều đó sẽ thoát khỏi không gian dấu. Sau đó bạn có thể chỉ cần thêm một khoảng thời gian.
Blacklight Shining

@BlacklightShining Cập nhật nó. Cám ơn vì sự gợi ý.
8bittree

Không có gì. Và +1 cho trâu. :)
Blacklight Shining


1
Được thể hiện bằng itertools ,print " ".join(takewhile(lambda _: randint(0, 5), repeat("buffalo"))).capitalize() + "."
nmclean

16

Rust + Toki Pona

Bất kỳ ngôn ngữ nào cũng được chấp nhận, vì vậy tôi đã viết một chương trình trong Rust tạo ra một số câu trong Toki Pona .

Toki Pona là một nỗ lực để tạo ra một ngôn ngữ tự nhiên tối thiểu, và nó có một ngữ pháp siêu đơn giản và thông thường. Đó là một tài sản rất hữu ích cho cuộc thi này!

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);
}

Tôi không nói Toki Pona, nhưng tôi đã tìm thấy cú pháp của Toki Pona như một bộ quy tắc BNF trên Wikipedia. Tôi đã tạo một cấu trúc hoặc enum cho mỗi quy tắc BNF và tôi chú thích chúng với nhau deriving(Rand), điều này cho tôi cách tạo ra một Phrasecấu trúc ngẫu nhiên miễn phí! Sau đó, tôi triển khai ToStrcho từng cấu trúc này để chuyển đổi chúng thành một chuỗi.

Tôi cố tình để lại các tên cấu trúc trong tiếng Pháp, bởi vì các quy tắc BNF mà tôi tìm thấy là bằng tiếng Pháp, và cũng vì nó tái hiện bản chất đa ngôn ngữ trong bài nộp của tôi!

Đầu ra mẫu

Một số kết quả đầu ra và bản dịch của chúng, mà tôi đã làm dựa trên các quy tắc BNFtừ điển Toki Pona . Tôi chắc chắn rằng những bản dịch này hầu hết là sai, nhưng Toki Pona thực sự để lại rất nhiều chỗ cho việc giải thích một câu.

nasin mi tawa la jan li jaki

Trong chuyến đi của tôi, một người nào đó bị ô nhiễm

monsi li jaki li jan ike musi

Cái mông bẩn và là một người xấu vui

sina li tawa ale jelo e kili tawa e insa

Bạn đã chuyển trái cây và trung tâm đến vũ trụ màu vàng

Các vấn đề

  • Tôi không kiểm tra xem một động từ có bắc cầu hay không, do đó một số câu không đúng ngữ pháp.
  • Một số cấu trúc được đệ quy và khi một quy tắc có thể được lặp lại, tôi chọn ngẫu nhiên để xuất 0, 1 hoặc 2 phần tử. Điều này có thể dẫn đến các câu được tạo ra từ lâu của veeeeeery, chứa hàng ngàn từ ...
  • Tôi thực sự không thể xác minh tính hợp lệ của đầu ra, tôi hoàn toàn dựa vào cú pháp BNF, từ điển và những phỏng đoán hoang dã của riêng tôi :)

1
sina li tawa ale jelo e kili tawa e insa == "Bạn đã chuyển trái cây và trung tâm sang vũ trụ màu vàng" Khá tốt cho một cỗ máy, thường chỉ những người dùng tp tiên tiến mới có thể sử dụng các cấu trúc biến đổi.
MatthewMartin

1
monsi li jaki li jan ike musi == Cái mông (mông? như trong jerk?) bẩn và là một người xấu vui tính.
MatthewMartin

1
Xin cảm ơn vì ý kiến ​​của bạn, @MatthewMartin! Tôi chắc chắn đã không mong đợi một diễn giả Toki Pona xem bài dự thi của mình, nhưng tôi rất vui khi biết những bài viết này không hoàn toàn vô nghĩa :)
barjak

Gợi ý: Đây không phải là môn đánh gôn.
nyuszika7h

1
@ nyuszika7h Tôi không chắc mục đích bình luận của bạn là gì. Thật vậy, nó không phải là một môn đánh gôn, vì đây là một cuộc thi phổ biến.
barjak

14

Con trăn

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
Bạn có thể tranh luận rằng import antigravitydẫn đến đầu ra I LEARNED IT LAST NIGHT! EVERYTHING IS SO SIMPLE!? : D
ace_HongKongInependence

Không còn nghi ngờ gì nữa, vâng.
Renae Lider

14

Prolog

Sử dụng quay lui của prolog và một ngữ pháp tổng quát xấp xỉ ngữ pháp tiếng Anh để tạo ra tất cả các câu có thể.

Phiên bản này có cấu trúc từ và câu khá hạn chế, nhưng nó sẽ khá dễ để mở rộng.

Mật mã:

% 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, []).

Chạy truy vấn này:

sentence(L).

để tạo ra tất cả các câu có thể trong ngôn ngữ này.

Một số kết quả đầu ra mẫu:

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: Cho phép các mệnh đề phụ thuộc đối tượng).


1
Bất kỳ ví dụ đầu ra câu?
TheDoctor

Vâng, tôi đặt một vài mẫu trong câu trả lời. Mặc dù vậy, nó tạo ra tổng cộng 2520 kết quả vì vậy tôi không thể đăng tất cả ...
chrisd

11

Con trăn

Như bạn biết, bạn có thể làm bất cứ điều gì trong python với vài imports. Nhiệm vụ đơn giản này có thể được thực hiện với kịch bản python 2 dòng này.

import random

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

Số lượng câu được tạo bởi kịch bản này là rất lớn: 10^12các câu khác nhau. Nếu đọc một tin nhắn sẽ khiến bạn mất ~ 0,5 giây, thì việc đọc tất cả sẽ mất hơn 15000 năm!

Một số câu mẫu:

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

Tuy nhiên, tất cả các câu được tạo ra chứa một chủ đề, một động từ và một đối tượng.

CẬP NHẬT:

Tôi đã nhận được một số lời phê bình về một số từ phức tạp mà công cụ phức tạp này có thể tạo ra. Đây là một phiên bản dài hơn một chút nên phù hợp với hầu hết các danh sách từ.

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))])+'.')

Dưới đây là một số câu mẫu:

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

Tôi không tìm thấy một số từ của bạn trong từ điển của tôi
Tiến sĩ belisarius

5
Tôi điều chỉnh phần mềm của tôi để phù hợp hơn với từ điển nghèo của bạn.
Antonio Ragagnin

2
Đồng ý. Trong 15000 năm tôi sẽ đăng bài để chứng nhận rằng tôi đã tìm thấy tất cả
Tiến sĩ belisarius

10

Chơi với từ điển nội bộ Mathicala:

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

Bạn nhận được may mắn, nói, 70% thời gian. Nó tạo ra những thứ như:

một điện mạch amygdaloid
đằng kia parkia là unrestrictive dù Ragged
xã hội longanimous ông
Tiến sĩ Giáo dục trả lời khó hiểu để kibbutz
ít nhà hát nhạc kịch với Julius Caesar
một loại chim chỉ ăn trái đào nhỏ và côn trùng Tai
tàn sát ở trung tâm thể thao ngươi Contra niggardliness
các yêu cầu chất tẩy rửa bên ngoài
sans thuật chiêu hồn phù thủy
này pectoralis mạch chủ đối diện latria tôi Nhà đầu tư thiết lập xu hướng vợ màu nâu
lĩnh vực người đàn ông cầm lửa của
rốn quyến rũ trong khi câu trả lời của tôi là
một mảnh vụn vít lỏng lẻo không thấm nước như bánh quế phức tạp Aral Sea
cho kim loại mongoloid thú vị

nhưng đôi khi:

Việc nhận con nuôi của tôi, trận chiến ít nhất của Lutzen sẽ thu hút tiền trong thời gian Hejira của cleaver
chín loại hút chìm shiner phổ biến Seiurus làm say lòng khán giả của cô

Oh tốt, sử dụng tiếng Anh của nó là tốt hơn so với của tôi.


8

VBA / Excel

[chỉnh sửa 2]

Đã dạy nó cách chia động từ, ví dụ dưới đây là thì quá khứ đơn:

Cocaine hoang dã vừa phải trượt theo quyết định lịch sử ngay lập tức. Chương an toàn khu vực bị gãy bên trong vô số thực thể ngẫu nhiên. Các miền bên phải màu vàng loại bỏ đằng sau giới tính mong manh từ tính. Ô nhiễm gây tử vong về thể chất bắt đầu qua cảm giác nghèo nàn đã chết. Nhà hát dũng cảm nhận thức đã đi đến phía trước của văn học nhận thức mong manh. Sản lượng thực tế thông thường chống lại các trang web miễn dịch yêu thích. Sinh đôi kinh tế cố định được công nhận ra khỏi sự cần thiết xấu xa của con người.

Các mã có liên quan theo sau, không bao gồm một loạt các chức năng phân tích cú pháp và vòng lặp phụ trợ nhàm chán. Các phần chính bị thiếu là các danh sách từ khác nhau (theo các phần của lời nói) làm số nhiều, các thì, chia, v.v.

Tất cả các từ gốc được chọn ngẫu nhiên, nhưng tôi buộc chúng phải được sắp xếp theo một mẫu câu cụ thể:

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

... đó là những gì tôi đã sử dụng để tạo đầu ra ở trên. Nó tuân theo hình thức chung của "Con cáo đỏ nhanh chóng nhảy qua con chó nâu lười biếng".

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

[bắt đầu bài gốc]

Vẫn còn một công việc đang tiến hành, cần thêm logic cho các thì và số nhiều danh từ / động từ, viz.:

Du lịch trung bình của bạn liều lượng giả định của chúng tôi cũng không tăng nhiệt độ ngoài cà chua của tôi.

... có thể phân tích được, nhưng không có nhiều ý nghĩa.

Việc lập trình cho phép ngư dân bẩn thỉu của họ bỏ xa thịt lợn của chúng tôi thay vì không có câu.

Đúng. Không thực sự là một câu, nhưng tốt hơn một số thông báo lỗi JavaScript.

Sự hấp dẫn của anh ấy nâng mọi câu hỏi trực tiếp mà người phụ nữ của tôi phác thảo lên tiếng Anh.

Thói quen bẩm sinh gần như là đỉnh cao '...

Mã để theo dõi anon. Cuộc thi này có thời hạn không?

[chỉnh sửa 1]

Mã đã tạo ra ở trên.

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
Mã của bạn ở đâu?
ace_HongKongInependence

Xem chỉnh sửa của tôi cho mã.
Brandon R. Gates

6

Perl 5

OK, can đảm của chương trình chỉ là thế này:

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

Về cơ bản, nó là một động cơ "madlib". Để thực sự tạo ra các câu thú vị, bạn cần phải điền %padmột số dữ liệu. Đây là một ví dụ %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',
  ],
);

Đây là một số mẫu của sự khôn ngoan mà tôi đã khám phá ra từ đó %pad. Những câu này chưa được chỉnh sửa về độ dài, dấu câu, ngữ pháp, v.v., mặc dù tôi đã loại bỏ một số câu không quan tâm và sắp xếp lại thứ tự các câu xuất hiện - chúng không còn theo thứ tự chúng được tạo ra, mà thay vào đó tôi đang cố gắng sử dụng chúng để kể một câu chuyện: một câu chuyện tôi hy vọng bạn sẽ thấy vừa cảm động vừa kích thích tư duy.

  • Mạng nhện ngắn.
  • Mạng nhện mê hoặc thường xuyên.
  • Những con khỉ ngắn lấp lánh, nhưng mạng nhện uống một cách tham lam.
  • Những con khỉ lấp lánh (nhưng có mùi hôi) đi theo con khỉ đột nhỏ (nhưng vẫn lấp lánh).
  • Đỉnh núi Everest đã chào đón stegizard được trang trí cao.
  • Không chỉ đỉnh núi Everest đắt đỏ, mà cả dàn diễn viên "Glee" trên truyền hình cũng theo con khỉ đột lấp lánh.
  • Dàn diễn viên của "Glee" trên truyền hình giống như hộp thư lilac.
  • Hộp thư đắt tiền cao, và stegizard đắt tiền nhảy Chuck Norris, nhưng đôi giày màu xanh lá cây đã nhảy bánh sandwich salad thịt bò.
  • Bánh sandwich salad thịt bò yêu thích Chuck Norris.
  • Hàng triệu con lươn lấp lánh có màu xanh lá cây (nhưng ma quái).

Bây giờ nếu bạn có thể điền pad theo chương trình
Pureferret

Pad dân cư lập trình không phải là một thách thức nhiều. Chỉ cần cạo wiktionary hoặc một cái gì đó. Điều đó sẽ không mang lại những câu thú vị như vậy mặc dù.
tobyink

Đó không phải là một thử thách lớn, nhưng tôi nghĩ đó là một phần thú vị của nó.
Pureferret

5

Cô Word

Tôi không chắc điều này có chấp nhận được không, nhưng vì html là vậy, tôi nghĩ điều này cũng có thể chấp nhận được.

 =rand(1,1)

Câu mẫu:

Trên tab Chèn, các phòng trưng bày bao gồm các mục được thiết kế để phối hợp với giao diện tổng thể của tài liệu của bạn.

Bạn có thể sử dụng các phòng trưng bày này để chèn bảng, tiêu đề, chân trang, danh sách, trang bìa và các khối xây dựng tài liệu khác.

bạn cũng có thể chỉ định bất kỳ số lượng câu và đoạn văn.


4

Một công việc đang được tiến hành bằng cách sử dụng JSoupSimpleNLG

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);
        }
    }

}

Các vấn đề:

  • Câu quá đơn giản
  • Đôi khi 404s (không xử lý tốt!)
  • Chỉ tạo một câu tại một thời điểm
  • Sử dụng một trường hợp chuyển đổi!

Đầu ra mẫu:

Popoloca prickethes đậu đậu.
Ma Kết của Ma Kết rạng rỡ lên thân.
Bắc Kinh đồng nghĩa hộp gối.
Chukchis mã hóa ảnh hưởng.


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])];

Điều này tìm nạp 30 tìm kiếm xu hướng nhất trên google, thực hiện tìm kiếm "Tôi cảm thấy may mắn" và sau đó hiển thị một câu ngẫu nhiên từ trang đó với ít nhất 3 từ.

Ví dụ:

"Cô ấy được coi là một yêu thích huy chương trong sự kiện này."

"Kate tốt nghiệp trung học sớm một năm."

"Ngày 15 tháng 4 năm 2014, để thúc đẩy việc tuân thủ chính sách về tiểu sử của người sống."

"Thay mặt Bryan, chúng tôi, gia đình anh ấy, xin cảm ơn tất cả mọi người vì đã tuôn tràn tình yêu, những lời cầu nguyện và hỗ trợ."

"Bài viết này là về cầu thủ bóng rổ người Mỹ."

"Xin lỗi, trình duyệt của bạn đã bị tắt JavaScript hoặc không có bất kỳ trình phát được hỗ trợ nào."


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])"

đầu ra:

Tạo một câu có thể đọc và hiểu


Sử dụng URI chia sẻ của Stack Exchange (ví dụ /q/21571thay vì /questions/21571/generate-an-understandable-sentence).
Blacklight Shining

2
Vì đây không phải là mã golf, nên ngắt dòng để dễ đọc.
nyuszika7h

2

Shell Scripting

Kịch bản này sẽ luôn hiển thị tiêu đề của câu hỏi đầu tiên hiện đang đứng đầu trang web này. Giả định của tôi là tiêu đề câu hỏi sẽ luôn luôn có thể đọc được. Và nó sẽ thay đổi linh hoạt. Vì vậy, bất cứ khi nào một câu hỏi mới xuất hiện và khi tập lệnh được thực thi, nó sẽ đưa ra tiêu đề câu hỏi mới nhất.

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

Đầu ra dùng thử 1

Find words containing every vowel

Đầu ra 2 thử nghiệm

Hello World 0.0!

BIÊN TẬP

Không sử dụng bất kỳ tập tin. Không có tập tin, tôi có thể sử dụng tập lệnh dưới đây.

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

Đầu ra

Generate an understandable sentence

1
cũng không đọc chúng trực tiếp từ một tập tin ...
rafaelcastrocouto

Tôi đã thực hiện các thay đổi để không sử dụng một tập tin. Bây giờ, nó chỉ sử dụng các biến. Cái này thì sao?
Ramesh

2
bỏ phiếu bầu!
rafaelcastrocouto

2

JavaScript (ES6)

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

Chạy nó trong giao diện điều khiển sản xuất

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

Thậm chí ngắn hơn:t='';for(f of [_=>foo,_=>null.a,_=>0..toString(0)])try{f()}catch(e){t+=e.message+'\n'}t
Bàn chải đánh răng

2

Một đoạn mã Python khác

Câu trả lời của user3058846 không tệ, nhưng nó hiển thị mọi câu, mọi lúc. Ở đây, tôi đề xuất một tập lệnh tạo ra một câu ngẫu nhiên từ Zen của Python :

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

Trong một dòng, dành cho người hâm mộ :

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, bẩn.)

Ví dụ:

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


Một cách thú vị khác trong Python

Nhờ @TheDoctor đưa ra ý tưởng :-) Im lặng đầu ra nhập và sau đó chơi với lệnh giả mã hóa trong mô-đun.

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

Nói chung là sử dụng không tốt shell=True. Mặc dù trong trường hợp này không an toàn, vì bạn không lấy ý kiến ​​của người dùng, tôi sẽ chọn subprocess.Popen(('python', '-c', 'import this')).
nyuszika7h

Bạn có biết nếu bạn có thể im lặng bài thơ của import this, có một biến trong mô-đun thischứa tất cả các văn bản, nhưng được mã hóa. Ngoài ra còn có một từ điển để giải mã nó.
TheDoctor

1
@TheDoctor Hãy xem câu trả lời được cập nhật của tôi: D
Maxime Lorant

1

Con trăn 3

Đảm bảo để tạo đầu ra ngữ pháp! (Thông thường.)

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)

Để làm cho nó hoàn toàn đúng ngữ pháp, hãy xóa dấu gạch dưới khỏi wordregex. Điều này sẽ không cho phép các mục nhập nhiều từ dẫn đến các câu xấu, chẳng hạn như "Chúng tôi nén bạn."

Chạy mẫu:

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?

Sản lượng yêu thích cho đến nay:

They you her.

Tra cứu nó: http://en.wiktionary.org/wiki/you#Verb .


0

Con trăn

Kết quả:

$ 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)

Tôi đã sử dụng danh sách từ từ đây Tìm các từ có chứa mọi nguyên âm

Một số quy tắc có thể được thêm vào. Ví dụ: nếu một từ kết thúc bằng "ness" và từ đó cũng tồn tại trong tập hợp không có hậu tố, thì đó là một danh từ.

Mã nguồn:

#!/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
Tôi có thực sự say mê Python và tiếng Anh không, hay bạn đang xuất ra 3 danh từ thay vì 2 danh từ và động từ?
ace_HongKongInependence

@ace Oops, tôi quyết định sửa mã vào phút cuối :-(
yegle

0

Bash

Cố gắng chạy một chương trình tồn tại nhưng không được cài đặt sẽ mang lại điều này (trong Linux Mint 13).

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

Trong các bản phát hành khác nhau, nó cung cấp cho bạn một câu khác nhau.
TheDoctor

Đó là lý do tại sao tôi đã nói trong LM13
user80551

0

Con trăn 3

Một tác phẩm khác tại The Zen of Python , lấy cảm hứng từ câu trả lời của Maxime .

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
Vui lòng cho biết đây là ngôn ngữ.
Rodolfo Dias

1
@RodolfoDias Tôi khá chắc chắn đây là Javascript ... mặc dù không chắc chắn.
TheDoctor
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.