我确实找到了一个单词列表,/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