¿Cómo obtener un adjetivo o sustantivo aleatorio?

¿Cómo obtener un adjetivo o sustantivo aleatorio?

Encontré una lista de palabras, /usr/share/dict/wordspero no sé si hay una manera (¿una forma ya existente?) de dividirlas en su parte correspondiente del discurso. Alternativamente, estoy de acuerdo con cualquier otra sugerencia, /usr/share/dict/wordsfue solo la primera lista de palabras que encontré.

Respuesta1

Puede usar una API de diccionario. Me registré para obtener un token de uso gratuito para la API Dictionaryapi.com de Merriam Webster.

Luego puede obtener palabras aleatorias del /usr/share/dict/wordsarchivo (tenga en cuenta que en Macos muchas de las palabras de este archivo no son palabras reales, o al menos no son palabras en inglés). Dado que ese archivo no contiene ninguna información útil sobre la palabra, debe buscarla usando la API para saber si es un adjetivo o un sustantivo.

#!/bin/bash

token=get-your-own-token

until [[ $fl == noun || $fl == adjective ]]; do
    word=$(sort -R /usr/share/dict/words | tail -1)
    fl=$(curl -s "https://www.dictionaryapi.com/api/v3/references/collegiate/json/${word}?key=$token" | jq -r .[].fl 2>/dev/null)
done

echo "Word is: $word"

Esto es realmente lento (obtener palabras aleatorias del archivo dict masivo en Mac, no de la API en sí) porque generalmente tiene que encontrar varias palabras antes de encontrar una que sea una palabra real y sea un sustantivo o adjetivo. Además, en este código solo estamos viendo qué parte del discurso es la primera definición de cada palabra, por lo que es posible que una palabra pueda usarse como adjetivo o sustantivo pero se omita porque no es así como se define la primera definición de la palabra. se utiliza la palabra.

Al final hace lo que buscas, pero no bien.

Respuesta2

Probablemente sea mejor obtener una lista taxonómicamente correcta de palabras para empezar en lugar de tratar de clasificar la lista que tiene, ya que las personas "conocidas" ya han hecho el trabajo.

Aquí hay algunos dered de palabrasya clasificados como verbos, adjetivos y sustantivos, etc., aunque no parecen incluir participios, conjunciones, etc., etc.

Los sustantivos n, verbos v, adverbios ry adjetivos aestán todos en los archivos de índice con la letra de identificación en el segundo campo y, por lo tanto, se pueden extraer con un poco awk, pasarlos shufpara aleatorizarlos y redirigirlos a un archivo.

awk '{ if ( $2 ~ "^[nvar]$")  print $1" " $2 } ' index.* | shuf > mylist

Esto le proporciona un archivo de 155.339 palabras.

Después de eso, puede elegir un número de línea aleatorio o, más fácilmente, solo shufel archivo y elegir la línea 1 cada vez.

shuf -n 1 mylist

Que te dará la palabra y la clase.

shuf -n 10 mylist

coolness n
coefficient_of_elasticity n
naive_realism n
flying_mare n
nut_bar n
santiago_de_chile n
turkmen a
fore-and-aft_topsail n
robert_gray n
follow_suit v

Algunas entradas usan "_" en lugar de un espacio, por lo que tendrás que eliminarlo si ofende.

Para mantenerlos separados....

awk '{ if ( $2 ~ "^[nvar]$" )  {print $1 > "my"$2}} ' index.*

Y tu función de palabra aleatoria podría ser simplemente

shuf -n 1 my$1

Donde pasas la clase como argumento (n, v, aor) como

randword n

información relacionada