Acrónimo de frase

12

Tarea:

Cree un programa que tome un acrónimo como entrada, por ejemplo dftba, y genere algunas posibles frases que el acrónimo podría significar. Puede usar la lista de palabras como entrada de palabras. Inspirado en https://www.youtube.com/watch?v=oPUxnpIWt6E

Ejemplo:

input: dftba
output: don't forget to be awesome

Reglas:

  • Su programa no puede generar la misma frase cada vez por el mismo acrónimo, debe haber aleatorización
  • La entrada será todo en minúsculas
  • Publica algunos ejemplos (entrada y salida)
  • Cualquier idioma es aceptado
  • Es un , ¡así que la mayoría de los votos positivos ganan!
TheDoctor
fuente
Por favor, muestre un ejemplo de salida.
Mukul Kumar
@MukulKumar lo agregó
TheDoctor
1
Tiene que ser significativo? o alguna combinación?
Mukul Kumar
No tiene que ser significativo
TheDoctor
¿Cuántas veces se le permite al usuario ejecutar el programa? En algún momento, el programa no puede dejar de romper la regla # 1.
Sr. Lister

Respuestas:

8

HTML, CSS y JavaScript

HTML

<div id='word-shower'></div>
<div id='letter-container'></div>

CSS

.letter {
    border: 1px solid black;
    padding: 5px;
}

#word-shower {
    border-bottom: 3px solid blue;
    padding-bottom: 5px;
}

JS

var acronym = 'dftba', $letters = $('#letter-container')
for (var i = 0; i < acronym.length; i++) {
    $letters.append($('<div>').text(acronym[i]).attr('class', 'letter'))
}

var $word = $('#word-shower')
setInterval(function() {
    $.getJSON('http://whateverorigin.org/get?url=' + encodeURIComponent('http://randomword.setgetgo.com/get.php') + '&callback=?', function(word) {
        word = word.contents.toLowerCase()
        $word.text(word)
        $letters.children().each(function() {
            if (word[0] == this.innerText) {
                this.innerText = word
                return
            }
        })
    })
}, 1000)

Utiliza un generador de palabras al azar y muestra resultados en vivo mientras busca palabras.

Aquí hay un violín si quieres ejecutarlo tú mismo.

Aquí hay un GIF de la salida:

salida animada

Pomo de la puerta
fuente
7

Java

Obtiene una lista de palabras de wiktionary. Elige una palabra aleatoria de esa lista que comienza con la letra correcta. Luego utiliza Google sugiriendo recursivamente para buscar las siguientes palabras posibles. Emite una lista de posibilidades. Si lo vuelve a ejecutar con el mismo acrónimo, obtendrá resultados diferentes.

import java.io.*;
import java.net.*;
import java.util.*;

public class Acronym {

    static List<List<String>> wordLists = new ArrayList<List<String>>();
    static {for(int i=0; i<26; i++) wordLists.add(new ArrayList<String>());}
    static String acro;

    public static void main(String[] args) throws Exception {
        acro = args[0].toLowerCase();

        //get a wordlist and put words into wordLists by first letter
        String s = "http://en.wiktionary.org/wiki/Wiktionary:Frequency_lists/PG/2006/04/1-10000";
        URL url = new URL(s);
        BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));

        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            if(inputLine.contains("title")) {
                int start = inputLine.indexOf("title=\"");
                int end = inputLine.lastIndexOf("\">");
                if(start>=0 && end > start) { 
                    String word = inputLine.substring(start+7,end).toLowerCase();
                    if(!word.contains("'") && !word.contains(" ")) {
                        char firstChar = word.charAt(0);
                        if(firstChar >= 'a' && firstChar <='z') {
                            wordLists.get(firstChar-'a').add(word);
                        }
                    }
                }
            }
        }

        //choose random word from wordlist starting with first letter of acronym
        Random rand = new Random();
        char firstChar = acro.charAt(0);
        List<String> firstList = wordLists.get(firstChar-'a');
        String firstWord = firstList.get(rand.nextInt(firstList.size()));

        getSuggestions(firstWord,1);

    }

    static void getSuggestions(String input,int index) throws Exception {
        //ask googleSuggest for suggestions that start with search plus the next letter as marked by index
        String googleSuggest = "http://google.com/complete/search?output=toolbar&q=";
        String search = input + " " + acro.charAt(index);
        String searchSub = search.replaceAll(" ","%20");

        URL url = new URL(googleSuggest + searchSub);
        BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));

        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            String[] parts = inputLine.split("\"");
            for(String part : parts) {
                if(part.startsWith(search)) {
                    //now get suggestions for this part plus next letter in acro
                    if(index+1<acro.length()) {
                        String[] moreParts = part.split(" ");
                        Thread.sleep(100);
                        getSuggestions(input + " " + moreParts[index],index+1);
                    }
                    else {
                        String[] moreParts = part.split(" ");
                        System.out.println(input + " " + moreParts[index]);
                    }
                }
            }
        }
        in.close();
    }
}

Salida de muestra:

$ java -jar Acronym.jar ght
great harvest trek
great harvest tulsa
great harvest taylorsville
great harvest temecula
great harvest trek
great harvest twin
great harvest tempe
great harvest twin
great harvest turners
great harvest twitter
great horned toad
great horned toads
great horned tomato
great horned tomato
great horned turtle
great harvest trek
great harvest tulsa
great harvest taylorsville
great harvest temecula
great harvest trek
great harvest twin
great harvest tempe
great harvest twin
great harvest turners
great harvest twitter
great horned toad
great horned toads
great horned tomato
great horned tomato
great horned turtle
great harvest trek
great harvest tulsa
great harvest taylorsville
great harvest temecula
great harvest trek
great harvest twin
great harvest tempe
great harvest twin
great harvest turners
great harvest twitter
great horror thriller
great horror tv
great horror thriller
great horror titles
great horror tv
great holiday traditions
great holiday treats
great holiday toasts
great holiday tech
great holiday travel
great holiday treat
great holiday tips
great holiday treat
great holiday toys
great holiday tour
great harvest trek
great harvest tulsa
great harvest taylorsville
great harvest temecula
great harvest trek
great harvest twin
great harvest tempe
great harvest twin
great harvest turners
great harvest twitter
great horned toad
great horned toads
great horned tomato
great horned tomato
great horned turtle

Desafortunadamente, la URL de sugerencia de Google dejó de funcionar después de un tiempo, ¿tal vez mi IP fue incluida en la lista negra por Google por mal uso?

Criajo
fuente
5

Rubí

tan rubí muchos dux Guau.

Versión en línea

@prefix = %w[all amazingly best certainly crazily deadly extra ever few great highly incredibly jolly known loftily much many never no like only pretty quirkily really rich sweet such so total terribly utterly very whole xtreme yielding zippily]
@adjective = %w[appealing app apl attractive brave bold better basic common challenge c++ creative credit doge durable dare enticing entertain extreme fail fabulous few favourite giant gigantic google hello happy handy interesting in improve insane jazz joy j java known kind kiwi light laugh love lucky low more mesmerise majestic open overflow opinion opera python power point popular php practice quirk quit ruby read ready stunning stack scala task teaching talking tiny technology unexpected usual useful urban voice vibrant value word water wow where xi xanthic xylophone young yummy zebra zonk zen zoo]

def doge(input)
  wow = ""
  input.chars.each_slice(2) do |char1, char2|
    if char2 == nil
      wow << (@prefix + @adjective).sample(1)[0] + "."
      break
    end
    wow << @prefix.select{|e| e[0] == char1}.sample(1)[0]
    wow << " "
    wow << @adjective.select{|e| e[0] == char2}.sample(1)[0]
    wow << ". "
  end
  wow
end

puts doge("dftba")
puts doge("asofiejgie")
puts doge("iglpquvi")

Ejemplos:

deadly favourite. terribly better. challenge.
all scala. only favourite. incredibly enticing. jolly giant. incredibly extreme. 
incredibly gigantic. loftily popular. quirkily usual. very interesting.
David Herrmann
fuente
Ciertamente ligero. alguna vez voz. extra listo pila extra terriblemente atractivo Nunca deslumbrante. Todo entretener. Impresionante rico. único favorito Increíblemente rubí.
izabera
Fallo mortal. terriblemente valiente. suerte. todo scala. sólo unos cuantos. Increíblemente entretenido. alegre google. Increíblemente entretenido. increíblemente google. Loftly Python. peculiarmente inesperado. Muy mejorar.
4

Mathematica

Algunos términos que aparecen comúnmente en acrónimos.

terms = {"Abbreviated", "Accounting", "Acquisition", "Act", "Action", "Actions", "Activities", "Administrative", "Advisory", "Afloat", "Agency", "Agreement", "Air", "Aircraft", "Aligned", "Alternatives", "Analysis", "Anti-Surveillance", "Appropriation", "Approval", "Architecture", "Assessment", "Assistance", "Assistant", "Assurance", "Atlantic", "Authority", "Aviation", "Base", "Based", "Battlespace", "Board", "Breakdown", "Budget", "Budgeting", "Business", "Capabilities", "Capability", "Capital", "Capstone", "Category", "Center", "Centric", "Chairman", "Change", "Changes", "Chief", "Chief,", "Chiefs", "Closure", "College", "Combat", "Command", "Commandant", "Commander","Commander,", "Commanders", "Commerce", "Common", "Communications", "Communities", "Competency", "Competition", "Component", "Comptroller", "Computer", "Computers,", "Concept", "Conference", "Configuration", "Consolidated", "Consulting", "Contract", "Contracting", "Contracts", "Contractual", "Control", "Cooperative", "Corps", "Cost", "Council", "Counterintelligence", "Course", "Daily", "Data", "Date", "Decision", "Defense", "Deficiency", "Demonstration", "Department", "Depleting", "Deployment", "Depot", "Deputy", "Description", "Deskbook", "Determination", "Development", "Direct", "Directed", "Directive", "Directives", "Director", "Distributed", "Document", "Earned", "Electromagnetic", "Element", "Engagement", "Engineer", "Engineering", "Enterprise", "Environment", "Environmental", "Equipment", "Estimate", "Evaluation", "Evaluation)", "Exchange", "Execution", "Executive", "Expense", "Expert", "Exploration", "Externally", "Federal", "Final", "Financial", "Findings", "Fixed","Fleet", "Fleet;", "Flight", "Flying", "Followup", "Force", "Forces,", "Foreign", "Form", "Framework", "Full", "Function", "Functionality", "Fund", "Funding", "Furnished", "Future", "Government", "Ground", "Group", "Guidance", "Guide", "Handbook", "Handling,", "Hazardous", "Headquarters", "Health", "Human", "Identification", "Improvement", "Incentive", "Incentives", "Independent", "Individual", "Industrial", "Information", "Initial", "Initiation", "Initiative", "Institute", "Instruction", "Integrated", "Integration", "Intelligence", "Intensive", "Interdepartmental", "Interface", "Interference", "Internet", "Interoperability", "Interservice", "Inventory", "Investment", "Joint", "Justification", "Key", "Knowledge", "Lead", "Leader", "Leadership", "Line", "List", "Logistics", "Maintainability", "Maintenance", "Management", "Manager", "Manual", "Manufacturing", "Marine", "Master", "Material", "Materials", "Maturity", "Measurement", "Meeting", "Memorandum", "Milestone", "Milestones", "Military", "Minor", "Mission", "Model", "Modeling", "Modernization", "National", "Naval", "Navy", "Needs", "Network", "Networks", "Number", "Objectives", "Obligation", "Observation", "Occupational", "Offer", "Office", "Officer", "Operating", "Operational", "Operations", "Order", "Ordering", "Organization", "Oversight", "Ozone", "Pacific", "Package", "Packaging,", "Parameters", "Participating", "Parts", "Performance", "Personal", "Personnel", "Planning", "Planning,", "Plans", "Plant", "Point", "Policy", "Pollution", "Practice", "Preferred", "Prevention", "Price", "Primary", "Procedure", "Procedures", "Process", "Procurement", "Product", "Production", "Professional", "Program", "Programmatic", "Programming", "Project", "Proposal", "Protection", "Protocol", "Purchase", "Quadrennial", "Qualified", "Quality", "Rapid", "Rate", "Readiness", "Reconnaissance", "Regulation", "Regulations", "Reliability", "Relocation", "Repair", "Repairables", "Report", "Reporting", "Representative", "Request", "Requirement", "Requirements", "Requiring", "Requisition", "Requisitioning", "Research", "Research,", "Reserve", "Resources", "Responsibility", "Review", "Reviews", "Safety", "Sales", "Scale", "Secretary", "Secure", "Security", "Selection", "Senior", "Service", "Services", "Sharing", "Simulation", "Single", "Small", "Software", "Source", "Staff", "Standard", "Standardization", "Statement", "Status", "Storage,", "Strategy", "Streamlining", "Structure", "Submission", "Substance", "Summary", "Supplement", "Support", "Supportability", "Surveillance", "Survey", "System", "Systems", "Subsystem", "Tactical", "Target", "Targets", "Team", "Teams", "Technical", "Technology", "Test", "Tool", "Total", "Training", "Transportation", "Trouble", "Type", "Union", "Value", "Variable", "Warfare", "Weapon", "Work", "Working", "X-Ray", "Xenon", "Year", "Yesterday", "Zenith", "Zoology"};

Código

f[c_]:=RandomChoice[Select[terms,(StringTake[#,1]==c)&]]
g[acronym_]:=Map[f,Characters@acronym]

Ejemplos

Diez candidatos generados al azar para el acrónimo ABC .

Table[Row[g["ABC"], "  "], {10}] // TableForm

Desglose de acciones Cuerpo de
contabilidad Presupuesto Comercio
Control de presupuesto aéreo
Desglose de adquisiciones
Acción de computadora Presupuesto de costos
Desglose
alineado Común Curso de presupuesto alineado
Asesoramiento Capacidad de presupuesto Espacio de
batalla alineado
Contralor de espacio de batalla común anti-vigilancia


FMP

Table[Row[g["FMP"], "  "], {10}] // TableForm

Hallazgos Protocolo de Gerente
Compra final
Personal de medición de vuelo
Planes completos de fabricación
Formulario Programación de medición
Modelo financiero Programático
Propuesta de modernización futura Formulario de
paquete de medición financiera
, Planificación de mantenimiento
Modelado completo Programático


STM

Table[Row[g["STM"], "  "], {10}] // TableForm

Estandarización
Servicio de modernización total
Vigilancia de hitos tácticos Gestión del transporte
Problema del subsistema
Prueba de estructura de materiales Prueba de
escala militar Materiales
Estrategia Estrategia Modernización
Pequeña tecnología Menor
compatibilidad Capacidad de fabricación de transporte Gestión de herramientas


CRPB

Table[Row[g["CRPB"], "  "], {10}] // TableForm

Protección de Regulación Cooperativa
Solicitud de Comandante Comercial Política de
Cambios Base Programación de Reparaciones,
Cierre de Negocios Revisiones Presupuesto de Proyecto
Regulaciones de Comercio Parámetros
Contratos Base Precio Rápido Base
Práctica de Reubicación de la Universidad
Curso de Presupuesto Reporting Personal Espacio
de Batalla Procedimientos de Requisitos del Curso Presupuesto


SARDE

Table[Row[g["SARDE"], "  "], {10}] // TableForm

Acciones complementarias Requerir directivas
Escala de estimación Requisito alineado Estimación diaria
Secretaria Atlantic Solicitud de Director Director de gastos
Revisión de acción de software Exploración directa
Ley de apoyo Defensa Preparación
Software electromagnético Requisito abreviado Decisión Intercambio de
evaluación Evaluación de solicitud de solicitud Descripción
Racionalización Ejecutiva Tasa de contabilidad Depósito de evaluación Evaluación
Asistente de depósito Depósito de solicitud
Encuesta de compromiso Encuesta Asistencia Recursos Deficiencia de gastos

DavidC
fuente
2

re

Esto produce sobre todo tonterías, pero ocasionalmente producirá algo sensato, o algo tan tonto como chistoso.

Las palabras se extraen de este archivo JSON (~ 2.2MB).

El programa toma el acrónimo del primer argumento de la línea de comando y admite un segundo argumento opcional que le dice al programa cuántas frases generar.

import std.file : readText;
import std.conv : to;
import std.json, std.random, std.string, std.stdio, std.algorithm, std.array, std.range;

void main( string[] args )
{
    if( args.length < 2 )
        return;

    try
    {
        ushort count = 1;

        if( args.length == 3 )
            count = args[2].to!ushort();

        auto phrases = args[1].toUpper().getPhrases( count );

        foreach( phrase; phrases )
            phrase.writeln();
    }
    catch( Throwable th )
    {
        th.msg.writeln;
        return;
    }
}

string[] getPhrases( string acronym, ushort count = 1 )
in
{
    assert( count > 0 );
}
body
{
    auto words = getWords();
    string[] phrases;

    foreach( _; 0 .. count )
    {
        string[] phrase;

        foreach( chr; acronym )
        {
            auto matchingWords = words.filter!( x => x[0] == chr ).array();
            auto word = matchingWords[uniform( 0, matchingWords.length )];
            phrase ~= word;
        }

        phrases ~= phrase.join( " " );
    }

    return phrases;
}

string[] getWords()
{
    auto text = "words.json".readText();
    auto json = text.parseJSON();
    string[] words;

    if( json.type != JSON_TYPE.ARRAY )
        throw new Exception( "Not an array." );

    foreach( item; json.array )
    {
        if( item.type != JSON_TYPE.STRING )
            throw new Exception( "Not a string." );

        words ~= item.str.ucfirst();
    }

    return words;
}

auto ucfirst( inout( char )[] str )
{
    if( str.length == 1 )
        return str.toUpper();

    auto first = [ str[0] ];
    auto tail  = str[1 .. $];

    return first.toUpper() ~ tail.toLower();
}

Ejemplos :

D:\Code\D\Acronym>dmd acronym.d

D:\Code\D\Acronym>acronym utf 5
Unchallenged Ticklebrush Frication
Unparalysed's Toilsomeness Fructose's
Umpiring Tableland Flimsily
Unctuousness Theseus Flawless
Umbrella's Tarts Formulated
Tony Ellis
fuente
2

GOLPETAZO

for char in $(sed -E s/'(.)'/'\1 '/g <<<"$1");
do
    words=$(grep "^$char" /usr/share/dict/words)
    array=($words)
    arrayCount=${#array[*]}
    word=${array[$((RANDOM%arrayCount))]}
    echo -ne "$word " 
done
echo -ne "\n"

Entonces: $ bash acronym-to-phrase.sh dftbaresultó en

deodorization fishgig telolecithal bashlyk anapsid
demicivilized foretell tonogram besmouch anthropoteleological
doer fightingly tubulostriato bruang amortize 


Y: $ bash acronym-to-phrase.sh diyresultó en

decanically inarguable youthen
delomorphous isatin yen
distilling inhumorously yungan


Finalmente: $ bash acronym-to-phrase.sh rsvp

retzian sensitizer vestiarium pathognomonical
reaccustom schreiner vincibility poetizer
refractorily subspherical villagey planetule

...

¿Mi reacción inicial? fireling transportal sin cría

Max Chuquimia
fuente
1

Pitón

Entonces, esto probablemente no ganará ningún concurso de popularidad, pero pensé que Python necesitaba representación. Esto funciona en Python 3.3+. Tomé prestado el archivo de palabras json de @ tony-h ( encuéntrelo aquí ). Básicamente, este código solo toma la lista json y organiza todas las palabras en un diccionario indexado en las letras del alfabeto. Luego, cualquier acrónimo que se pase a la aplicación python se usa como índice en el diccionario. Para cada letra del acrónimo, se selecciona una palabra aleatoria de todas las palabras indexadas debajo de esa letra. También puede proporcionar una cantidad de salidas deseadas, o si no se especifica nada, se generarán 2 opciones.

El código (lo guardé como fraseit.py):

import argparse
import json
import string
from random import randrange

parser = argparse.ArgumentParser(description='Turn an acronym into a random phrase')
parser.add_argument('acronym', nargs=1)
parser.add_argument('iters',nargs='?',default=2,type=int)
args = parser.parse_args()

acronym=args.acronym[0]
print('input: ' + acronym)

allwords=json.load(open('words.json',mode='r',buffering=1))

wordlist={c:[] for c in string.ascii_lowercase}
for word in allwords:
    wordlist[word[0].lower()].append(word)

for i in range(0,args.iters):
    print('output:', end=" ")
    for char in acronym:
        print(wordlist[char.lower()][randrange(0,len(wordlist[char.lower()]))], end=" ")
    print()

Algunas salidas de muestra:

$ python phraseit.py abc
input: abc
output: athabaska bookish contraster
output: alcoholism bayonet's caparison

Otro:

$ python phraseit.py gosplet 5
input: gosplet
output: greenware overemphasiser seasons potential leprosy escape tularaemia
output: generatrix objectless scaloppine postulant linearisations enforcedly textbook's
output: gutturalism oleg superstruct precedential lunation exclusion toxicologist
output: guppies overseen substances perennialises lungfish excisable tweed
output: grievously outage Sherman pythoness liveable epitaphise tremulant

Finalmente:

$ python phraseit.py nsa 3
input: nsa
output: newsagent spookiness aperiodically
output: notecase shotbush apterygial
output: nonobjectivity sounded aligns
ProgramadorDan
fuente