
Encontré una lista de palabras, /usr/share/dict/words
pero 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/words
fue 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/words
archivo (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 r
y adjetivos a
está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 shuf
para 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 shuf
el 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