
単語のリストは見つかりました/usr/share/dict/words
が、それらを対応する品詞に分割する方法 (既存の方法?) があるかどうかはわかりません。あるいは、他の提案でも構いません。これは/usr/share/dict/words
私が見つけた最初の単語のリストにすぎませんでした。
答え1
辞書 API を使用できます。私は Merriam Webster の dictionaryapi.com API の無料使用トークンにサインアップしました。
次に、ファイルからランダムな単語を取得できます/usr/share/dict/words
(macOS では、このファイル内の単語の多くは実際の単語ではなく、少なくとも英語の単語ではないことに注意してください)。そのファイルには単語に関する有用な情報が含まれていないため、API を使用して単語を検索し、形容詞か名詞かを調べる必要があります。
#!/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"
これは非常に遅いです (API 自体ではなく、Mac 上の巨大な辞書ファイルからランダムな単語を取得します)。これは通常、実際の単語であり名詞または形容詞である単語を見つける前に複数の単語を見つける必要があるためです。また、このコードでは、各単語の最初の定義がどの品詞であるかのみを調べているため、単語が形容詞または名詞として使用されている可能性がありますが、単語の最初の定義がそのように使用されていないためスキップされます。
最終的には、求めているものは実現しますが、うまくはいきません。
答え2
すでに「事情通」の人たちがその作業を済ませているので、手持ちのリストを分類しようとするよりも、まずは分類学的に正しい単語のリストを入手したほうがよいでしょう。
以下はワードネットすでに動詞、形容詞、名詞などに分類されていますが、分詞、接続詞などは含まれていないようです。
名詞n
、動詞v
、副詞r
、形容詞はa
すべて、識別文字が 2 番目のフィールドにあるインデックス ファイル内にあるため、少しの で抽出しawk
、それらを渡してshuf
ランダム化し、ファイルにリダイレクトすることができます。
awk '{ if ( $2 ~ "^[nvar]$") print $1" " $2 } ' index.* | shuf > mylist
これにより、155,339 語のファイルが作成されます。
その後、ランダムな行番号を選択するか、shuf
ファイルだけを選択して毎回1行目を選択するのが最も簡単です。
shuf -n 1 mylist
言葉とクラスを与える
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
一部のエントリではスペースの代わりに「_」が使用されているため、問題がある場合は削除する必要があります。
それらを分離しておくために....
awk '{ if ( $2 ~ "^[nvar]$" ) {print $1 > "my"$2}} ' index.*
そしてランダム単語関数は
shuf -n 1 my$1
クラスを引数(n、v、a、r)として渡す場合、
randword n