
Encontrei uma lista de palavras, /usr/share/dict/words
mas 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/words
foi 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/words
arquivo (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 r
e adjetivos a
estã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 shuf
para 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 shuf
o 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