Wie erhält man ein zufälliges Adjektiv oder Substantiv?

Wie erhält man ein zufälliges Adjektiv oder Substantiv?

Ich habe eine Liste mit Wörtern gefunden, /usr/share/dict/wordsweiß aber nicht, ob es eine Möglichkeit gibt (eine bereits vorhandene Möglichkeit?), sie in die entsprechenden Wortarten aufzuteilen. Alternativ bin ich mit allen anderen Vorschlägen zufrieden, /usr/share/dict/wordswar nur die erste Liste mit Wörtern, die ich gefunden habe.

Antwort1

Sie können eine Wörterbuch-API verwenden. Ich habe mich für einen kostenlosen Nutzungstoken für die dictionaryapi.com-API von Merriam-Webster angemeldet.

Dann können Sie zufällige Wörter aus der /usr/share/dict/wordsDatei abrufen (Hinweis: Unter macOS sind viele der Wörter in dieser Datei keine echten Wörter, zumindest keine englischen Wörter). Da die Datei keine nützlichen Informationen über das Wort enthält, müssen Sie es mithilfe der API nachschlagen, um herauszufinden, ob es sich um ein Adjektiv oder ein Substantiv handelt.

#!/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"

Dies ist wirklich langsam (das Abrufen zufälliger Wörter aus der riesigen Diktierdatei auf dem Mac, nicht aus der API selbst), da normalerweise mehrere Wörter gefunden werden müssen, bevor ein echtes Wort gefunden wird, das ein Substantiv oder Adjektiv ist. Außerdem prüfen wir in diesem Code nur, welcher Wortart die erste Definition jedes Wortes angehört. Daher ist es möglich, dass ein Wort als Adjektiv oder Substantiv verwendet werden könnte, aber übersprungen wird, da die erste Definition des Wortes nicht so verwendet wird.

Letztendlich tut es zwar, was Sie suchen, aber nicht gut.

Antwort2

Es ist wahrscheinlich besser, von Anfang an eine taxonomisch korrekte Liste von Wörtern zu erhalten, als zu versuchen, die vorhandene Liste zu klassifizieren, da Leute, die „sich auskennen“, die Arbeit bereits erledigt haben.

Hier sind einige vonWortnetzbereits als Verben, Adjektive und Substantive usw. klassifiziert, obwohl sie Partizipien, Konjunktionen usw. usw. nicht zu umfassen scheinen.

Die Substantive n, Verben v, Adverbien rund Adjektive astehen alle in den Indexdateien mit dem Kennbuchstaben im zweiten Feld und können daher mit ein wenig extrahiert awk, durchgeleitet shufund zufällig angeordnet und in eine Datei umgeleitet werden.

awk '{ if ( $2 ~ "^[nvar]$")  print $1" " $2 } ' index.* | shuf > mylist

Sie erhalten eine Datei mit 155.339 Wörtern.

Danach können Sie entweder eine zufällige Zeilennummer auswählen oder am einfachsten einfach shufdie Datei und jedes Mal Zeile 1 auswählen

shuf -n 1 mylist

Das gibt Ihnen das Wort und die Klasse

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

Einige Einträge verwenden „_“ statt eines Leerzeichens. Wenn dies anstößig ist, müssen Sie es entfernen.

Um sie getrennt zu halten …

awk '{ if ( $2 ~ "^[nvar]$" )  {print $1 > "my"$2}} ' index.*

Und Ihre Zufallswortfunktion könnte einfach sein

shuf -n 1 my$1

Dabei übergeben Sie die Klasse als Argument (n, v, a oder r) wie

randword n

verwandte Informationen