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

Будет

ls `echo $PATH | sed s@ @\\ @g | sed s@:@ @g` | grep [string]

выполнить то, что вам нужно, по обоим пунктам? sed s@ @\\ @gследует заменить $PATHзаписей, в которых есть пробелы, читаемым экранированным пробелом, а sed s@:@ @gследует заменить двоеточия, разделяющие $PATHзаписи, обычным пробелом, который позволяет lsиндивидуально отображать содержимое каждого каталога, который можно передать в grep, который распознает поиск по регулярным выражениям, как подстановочные знаки, которые вы хотите использовать. Насколько я могу судить, это работает в родном Bash, но я не уверен, что это сработает в Cygwin's Bash.

Если это сработает, вы всегда можете присвоить ему псевдоним, чтобы он был менее громоздким в использовании.

0
24.11.2019, 19:48
2 ответа

Вы можете использовать словарь API, я подписался на бесплатный токен для API Dictionapi.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 ), потому что обычно ему приходится искать несколько слов, прежде чем он найдет то, которое является реальным словом и является существительным или имя прилагательное. Кроме того, в этом коде мы смотрим только на то, какой частью речи является первое определение каждого слова, поэтому возможно, что слово может быть использовано как прилагательное или существительное, но будет пропущено, потому что это не то, как первое определение слова. используется слово.

В конце концов он делает то, что вы ищете, хотя и не очень хорошо.

1
28.01.2020, 02:29

Вам, вероятно, лучше получить таксономически правильный список слов для начала, а не пытаться классифицировать список, который у вас есть, поскольку знающие люди уже проделали эту работу.

Вот некоторые из Wordnet , уже классифицированные как глаголы, прилагательные, существительные и т. д., хотя они, похоже, не включают причастия, союзы и т. д. и т. д.

Существительные 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
1
28.01.2020, 02:29

Теги

Похожие вопросы