
Я нашел список слов, /usr/share/dict/words
но не знаю, есть ли способ (уже существующий способ?) разделить их на соответствующие части речи? В качестве альтернативы, я согласен с любыми другими предложениями, это /usr/share/dict/words
был только первый список слов, который я нашел.
решение1
Вы можете использовать API словаря. Я подписался на бесплатный токен для API dictionaryapi.com от Merriam Webster.
Затем вы можете получить случайные слова из /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"
Это действительно медленно (получение случайных слов из огромного файла dict на Mac, а не сам 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