Как получить случайное прилагательное или существительное?

Как получить случайное прилагательное или существительное?

Я нашел список слов, /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

Связанный контент