Como obter um adjetivo ou substantivo aleatório?

Como obter um adjetivo ou substantivo aleatório?

Encontrei uma lista de palavras, /usr/share/dict/wordsmas não sei se existe uma maneira (uma maneira já existente?) de dividi-las em sua classe gramatical correspondente. Alternativamente, estou bem com qualquer outra sugestão, /usr/share/dict/wordsfoi apenas a primeira lista de palavras que encontrei.

Responder1

Você pode usar uma API de dicionário. Eu me inscrevi para obter um token de uso gratuito para a API Dictionaryapi.com do merriam webster.

Então você pode obter palavras aleatórias do /usr/share/dict/wordsarquivo (observe que no macos muitas das palavras neste arquivo não são realmente palavras reais, ou pelo menos não são palavras em inglês). Como esse arquivo não contém nenhuma informação útil sobre a palavra, você deve procurá-la usando a API para descobrir se é um adjetivo ou substantivo.

#!/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"

Isso é muito lento (obter palavras aleatórias do enorme arquivo dict no Mac, não da API em si) porque geralmente é necessário encontrar várias palavras antes de encontrar uma que seja uma palavra real e seja um substantivo ou adjetivo. Também neste código estamos apenas analisando qual parte do discurso é a primeira definição de cada palavra, então é possível que uma palavra possa ser usada como um adjetivo ou substantivo, mas será ignorada porque não é assim que a primeira definição do palavra é usada.

Eventualmente, ele faz o que você está procurando, mas não bem.

Responder2

Provavelmente, será melhor obter uma lista de palavras taxonomicamente correta para começar, em vez de tentar classificar a lista que você possui, uma vez que as pessoas "informadas" já fizeram o trabalho.

Aqui estão alguns deWordNetjá classificados como verbos, adjetivos e substantivos, etc., embora não pareçam incluir particípios, conjunções, etc.

Os substantivos n, verbos v, advérbios re adjetivos aestão todos nos arquivos de índice com a letra identificadora no segundo campo e por isso podem ser extraídos com um pouco awk, passando-os shufpara randomizá-los e redirecionando-os para um arquivo.

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

Isso fornece um arquivo de 155.339 palavras.

Depois disso, você pode escolher um número de linha aleatório ou, mais fácil, apenas shufo arquivo e escolher a linha 1 sempre

shuf -n 1 mylist

O que lhe dará a palavra e a classe

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

Algumas entradas usam "_" em vez de um espaço, então você terá que removê-lo se for ofensivo.

Para mantê-los separados....

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

E sua função de palavra aleatória poderia ser apenas

shuf -n 1 my$1

Onde você passa a classe como argumento (n, v, a ou r) como

randword n

informação relacionada