
我確實找到了一個單字列表,/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"
這真的很慢(從 mac 上的大量 dict 檔案中獲取隨機單詞,而不是 API 本身),因為它通常必須找到多個單字才能找到真正的單字並且是名詞或形容詞。此外,在這段程式碼中,我們只查看每個單字的第一個定義是什麼詞性,因此一個單字可能可以用作形容詞或名詞,但會被跳過,因為這不是該單字的第一個定義的方式。
最終它會滿足您的要求,但效果不佳。
答案2
您可能最好從分類學上正確的單字清單開始,而不是嘗試對您擁有的清單進行分類,因為「知情者」已經完成了這項工作。
這是一些來自字網已經被分類為動詞、形容詞和名詞等,儘管它們似乎不包括分詞、連接詞等。
名詞n
、動詞v
、副詞r
和形容詞a
都在索引檔案中,第二個欄位帶有標識字母,因此可以用一點提取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