Problema:
Gere uma frase que possa ser lida e compreendida. Ele deve conter um sujeito, verbo e objeto, e tempos e plurais devem corresponder. O programa também deve ser capaz de gerar várias frases diferentes para se qualificar.
Regras:
- Codificar as frases não é permitido e nem as lê diretamente de um arquivo (estou olhando para você, uneatemeat)
- Você pode ter qualquer número de listas de palavras
- Envie uma sentença de exemplo ou 2 que foram geradas pelo seu programa
- Qualquer idioma é aceito
- É um concurso de popularidade , então a resposta mais votada vence
popularity-contest
O médico
fonte
fonte
[Adjective] [pl. noun] [verb] [adjective] [pl. noun]
e extrai de um dicionário real (talvez usando uma das APIs de dicionário disponíveis lá fora) para preencher os espaços em branco? Eu mesmo escreveria se tivesse alguns minutos de sobra! :( Afinal ...Lazy Developers Write Lousy Programs.
Respostas:
Bater
Requisitos: fonte do kernel do linux instalada em / usr / src
Isso extrai comentários aleatórios da fonte do kernel. Se as sentenças são realmente compreensíveis está aberto a debate.
Exemplos de saída real:
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
fonte
fortune
banco de dados oficial .Slave Overflow
. bom nome para um site SEMatlab
exemplo de saídas:
[Este é um dos ovos de páscoa do Matlab]
EDIT: você pode ver o código desta função aqui: why.m
fonte
PHP
Com tempo suficiente, isso produzirá toda a literatura, passado, presente e futuro. As regras não mencionaram que nenhum outro texto possa ser produzido.
A string
'TOS...'
fornece uma frequência de escala logarítmica das letras para corresponder melhor ao inglês. Isso é usado para gerar uma string maior com as frequências relativas aproximadas das letras.Ao executá-lo, descobri jóias literárias como:
GO NOW
- Você como sujeito está implícito.IM AOK
- Eu estou bemIM FDR
- Sou F (ranklin) D (eleano) R (oosevelt)Além disso, numerosos invectivos para expressar de forma concisa o descontentamento com a situação atual. [Algumas cartas foram editadas.]
F**K
S**T
Além disso, use o escalonamento de ajuste fino a seguir:
IS IT ON
I AM STU
I SEE HTML
fonte
F**K
eS**T
desde que não haja*
em'ABCDEFGHIJKMLNOPQRSTUVWXYZ '
?'TOS...'
string representa a frequência de cada letra em uma escala logarítmica. EntãoA
tem frequênciaT
,B
tem frequênciaO
.J
tem a frequência mais baixaA
que se traduz em 0, cujo log inverso é 1. O último caractere é o espaço, que possui frequênciaZ
ou arredondamento (exp (25 / 3.976)) = 538, portanto, os espaços ocorrem 538 vezes mais frequentementeJ
. Só pensei em dar uma guinada no problema do macaco na máquina de escrever .C
Exemplo de saída:
Também existem muitas frases válidas que não têm assunto, verbo e objeto:
fonte
--i
avaliada como falsa quandoi
(uma variável do tipochar
com valor inicial 0) atinge 0 novamente. Sechar
não estiver assinado (por exemplo, ARM),i
retornará imediatamente ao seu maior valor (normalmente 255) e contará até 0. Sechar
for assinado (na maioria dos sistemas Intel), o comportamento é estritamente indefinido, mas geralmente quando atinge seu valor mínimo ( tipicamente -128), ele será limitado ao máximo (normalmente 127) e contado até 0. Portanto, o programa normalmente imprimirá 256 linhas no total.Java
Retira a frase de introdução de um artigo aleatório da Wikipedia:
Às vezes você fica azarado; Tento minimizar isso definindo um tamanho mínimo de frase e filtrando as frases que terminam com ":" (todas as páginas de desambiguação começam dessa maneira) ou contêm um "?" (parece haver muitos artigos com informações desconhecidas não resolvidas marcadas por pontos de interrogação). Os limites das frases são um período seguido de espaço em branco seguido de um número ou letra maiúscula.
Também filtro o texto entre parênteses (o resultado ainda é uma sentença válida) para tentar remover alguns períodos que não são limites de sentença. Eu filtrei colchetes para remover os números de referência de origem. Exemplos:
Se você notar algum problema gramatical, a culpa é sua por não ser um editor diligente da Wikipedia! ;-)
fonte
Soooo ... Como esse é um concurso de popularidade , eu me diverti um pouco com
eval
e com funções. Basicamente, eu gero um número aleatório e, em seguida, executo uma função aleatória com base nesse número (na sua caraswitch
,!) Viaeval
.PHP, ~ 9k saídas válidas
Algumas saídas ...
fonte
PHP_EOL
é sempre igual\n
ou\r\n
, dependendo do sistema operacional, mas nunca é<br>
semelhante.Projeto PHP + Gutenberg
Eu escrevi um script PHP que transforma um documento de texto sem formatação em um conjunto de bigrams de palavras , que ele usa para gerar sentenças aleatórias. Aqui estão alguns dos melhores exemplos que ele gerou da versão em texto sem formatação do discurso "Give Me Liberty Or Give Me Death" de Patrick Henry , incluindo as letras pequenas do Project Gutenberg:
Você pode experimentá-lo aqui. Atualize a página para um novo lote de frases.
Se você deseja executar o código fonte, não se esqueça de carregar
$src_text
o texto sem formatação escolhido.fonte
But for me, death!
: Deseja que todas as licenças / contratos sejam encerrados com tanta força.Pitão
Esta entrada seleciona palavras de todo o dicionário do sistema. Aproveita o fato de que você pode transformar a maioria dos substantivos em verbos e vice-versa. Ele usa algumas heurísticas para classificar palavras e evitar impossibilidades óbvias.
Produz algumas declarações quase sensatas:
Muitos loucos:
E muitas coisas que parecem Monty Python fazendo insinuações obscenas:
A versão 3 foi modificada para receber qualquer arquivo de texto como entrada:
Código (versão 3) :
fonte
cat FILE | COMMAND
? UUOC ;)This smoke toasted some nonresidents.
. WOAH.Bater
Inspirado pela resposta do Matlab. Supõe que você
aptitude
instalou.Possíveis saídas (captura de tela deste artigo da wikipedia)
fonte
. /----\ -------/ \ / \ / | -----------------/ --------\ ----------------------------------------------
seja uma frase válida.you win
pode ser uma frase (o objeto "o argumento" está implícito). E mesmo que não seja, a questão não proíbe casos em que a saída não é válida.Pitão:
Amostras:
Infelizmente, ele tem um pouco de manipulação inadequada de pontuação e capitalização, mas, novamente, esses não foram listados como requisitos.
Além disso, aqui está uma referência.
fonte
' '.join(l)
. Isso vai se livrar do espaço à direita. Você pode simplesmente acrescentar um período.print " ".join(takewhile(lambda _: randint(0, 5), repeat("buffalo"))).capitalize() + "."
Ferrugem + Toki Pona
Como qualquer idioma é aceito, escrevi um programa em Rust que gera algumas frases em Toki Pona .
O Toki Pona é uma tentativa de criar uma linguagem natural mínima e possui uma gramática super simples e regular. Essa é uma propriedade muito útil para este concurso!
Não falo Toki Pona, mas achei a sintaxe do Toki Pona como um conjunto de regras da BNF na Wikipedia. Criei uma estrutura ou enumeração para cada regra do BNF e as anotei
deriving(Rand)
, o que me permite gerar umaPhrase
estrutura aleatória gratuitamente! Em seguida, implementeiToStr
para cada uma dessas estruturas para convertê-las em uma sequência.Eu intencionalmente deixei os nomes da estrutura em francês, porque as regras da BNF que encontrei são em francês e também porque ela reinfoca a natureza multilíngue da minha submissão!
Saídas de amostra
Algumas saídas e suas traduções, que eu fiz com base nas regras do BNF e no dicionário Toki Pona . Tenho certeza de que essas traduções estão erradas, mas o Toki Pona realmente deixa muito espaço para a interpretação de uma frase.
Enquanto estava na minha viagem, alguém poluiu
A bunda está suja e é uma pessoa engraçada e ruim
Você mudou a fruta e o centro para o universo amarelo
Problemas
fonte
Pitão
fonte
import antigravity
leva à saídaI LEARNED IT LAST NIGHT! EVERYTHING IS SO SIMPLE!
? : DProlog
Use o retorno do prólogo e uma gramática generativa aproximando a gramática inglesa para gerar todas as frases possíveis.
Esta versão possui um vocabulário e uma estrutura de frases bastante limitados, mas deve ser bem fácil de estender.
O código:
Execute esta consulta:
para gerar todas as frases possíveis nesse idioma.
Algumas saídas de amostra:
(EDIT: Permitir cláusulas subordinadas a objetos).
fonte
Pitão
Como você sabe, você pode fazer qualquer coisa em python com poucos
import
s. Essa tarefa simples pode ser realizada com este script python de 2 linhas.O número de sentenças geradas por esse script é enorme:
10^12
sentenças diferentes. Se a leitura de uma sentença leva aproximadamente 0,5 segundos, a leitura de todas leva mais de 15000 anos!Algumas frases de exemplo:
I like the number 0.444371877853
I like the number 0.358614422548
No entanto, todas as sentenças geradas contêm um sujeito, um verbo e um objeto.
ATUALIZAR:
Recebi algumas críticas sobre algumas palavras sofisticadas que essa ferramenta complexa pode produzir. Aqui está uma versão um pouco mais longa que deve estar de acordo com a maioria das listas de palavras.
Aqui estão algumas frases de exemplo:
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.
fonte
Brincando com o dicionário interno do Mathematica:
Você tem sorte, digamos, 70% do tempo. Ele gera coisas como:
mas às vezes:
Bem, o uso do inglês é melhor que o meu.
fonte
VBA / Excel
[editar 2]
Ensinei como conjugar verbos, os exemplos abaixo são simples do passado:
A seguir, o código relevante, excluindo várias funções auxiliares de análise e loop. As partes principais que faltam são as várias listas de palavras (por partes do discurso) que fazem pluralização, tempos, conjugações, etc.
Todas as raízes das palavras são escolhidas aleatoriamente, mas forço-as a serem organizadas em um padrão de frase específico:
... que é o que eu usei para gerar a saída acima. Segue a forma geral de "A rápida raposa vermelha pulou sobre o cachorro marrom preguiçoso".
[iniciar postagem original]
Ainda um trabalho em andamento, é necessário adicionar lógica aos tempos e pluralização de substantivo / verbo, a saber:
... que é analisável, mas não faz muito sentido.
Direito. Não é realmente uma frase, mas é melhor do que algumas mensagens de erro do JavaScript.
A rotina de insinuações é quase de alto nível ...
Código a seguir anon. Este concurso tem prazo?
[editar 1]
Código que gerou o acima.
fonte
Perl 5
OK, a coragem do programa é exatamente isso:
É basicamente um mecanismo "madlib". Para realmente gerar frases interessantes, você precisa preencher
%pad
com alguns dados. Aqui está um exemplo%pad
...Aqui estão alguns exemplos da sabedoria que descobri disso
%pad
. Essas frases não foram editadas para tamanho, pontuação, gramática etc., embora eu tenha selecionado algumas desinteressantes e reorganizado a ordem em que as frases aparecem - elas não estão mais na ordem em que foram geradas, mas estou tentando use-os para contar uma história: uma história que espero que você ache emocionante e instigante.fonte
Ms Word
Não tenho certeza se isso é aceitável, mas como o html é, acho que isso também deve ser aceitável.
Exemplos de frases:
você também pode especificar qualquer número de frases e parágrafos.
fonte
Um trabalho em andamento usando JSoup e simpleNLG
Problemas:
Saídas de amostra:
fonte
PHP
Ele busca as 30 pesquisas mais populares do Google, realiza uma pesquisa "Sinto-me com sorte" e exibe uma frase aleatória dessa página com pelo menos três palavras.
Exemplos:
"Ela foi considerada a favorita da medalha no evento."
"Kate se formou no colegial um ano antes."
"15 de abril de 2014, para promover o cumprimento da política de biografias de pessoas vivas."
"Em nome de Bryan, nós, sua família, gostaríamos de agradecer a todos pelo derramamento de amor, orações e apoio".
"Este artigo é sobre o jogador de basquete americano".
"Desculpe, seu navegador tem o JavaScript desabilitado ou não possui nenhum player compatível."
fonte
Python 2.7
resultado:
fonte
/q/21571
vez de/questions/21571/generate-an-understandable-sentence
).Script de Shell
Esse script sempre exibirá o título da primeira pergunta que está atualmente no topo deste site. Minha suposição é que o título da pergunta sempre será legível por humanos. E isso mudará dinamicamente. Portanto, sempre que surgir uma nova pergunta e quando o script for executado, ele dará o título da pergunta mais recente.
Saída da versão experimental 1
Saída da versão 2
EDITAR
Não está usando nenhum arquivo. Sem arquivos, eu posso usar o script abaixo.
Resultado
fonte
JavaScript (ES6)
A execução no console produz
fonte
t='';for(f of [_=>foo,_=>null.a,_=>0..toString(0)])try{f()}catch(e){t+=e.message+'\n'}t
Ainda outro script Python
A resposta do usuário3058846 não é ruim, mas exibe todas as frases, sempre. Aqui, proponho um script que produza uma frase aleatória do Zen of Python :
Em uma linha, para fãs de código-golfe :
(Boooh, sujo.)
Exemplos:
Outra maneira divertida em Python
Graças a @TheDoctor, despeje a idéia :-) Silencie a saída de importação e brinque com o ditado pseudo-criptografado no módulo.
fonte
shell=True
. Embora não seja inseguro nesse caso, como você não está recebendo informações do usuário, eu optariasubprocess.Popen(('python', '-c', 'import this'))
.import this
, existe uma variável no módulothis
que contém todo o texto, mas criptografado. Há também um dicionário para descriptografá-lo.Python 3
Garantido para gerar saída gramatical! (Usualmente.)
Para torná-lo perfeitamente gramatical, exclua o sublinhado de
wordregex
. Isso não permitirá entradas de várias palavras que levem a frases incorretas, como "Nós fechamos você".Exemplo de execução:
Saída favorita até agora:
Consulte: http://en.wiktionary.org/wiki/you#Verb .
fonte
Pitão
Resultado:
Usei a lista de palavras daqui Encontre palavras que contenham todas as vogais
Mais algumas regras podem ser adicionadas. Por exemplo, se uma palavra que termina com "ness" e a palavra também existem em conjunto sem o sufixo, é um substantivo.
Código fonte:
fonte
Bater
Tentar executar um programa que existe, mas não está instalado, fornece isso (no Linux Mint 13).
fonte
Python 3
Outra visão de The Zen of Python , inspirada na resposta de Maxime .
fonte
fonte