LINUX.ORG.RU

Случайная генерация слов

 


0

1

Как в линуксе реализовать вот такое - берется 10 случайных слов из заданного словаря и выводиться в терминале 10 слов через пробел.



Последнее исправление: zayac366 (всего исправлений: 1)

Ответ на: комментарий от anonymous

for i in $(shuf -n 10 file.txt); do echo -n "$i "; done; echo

anonymous
()

лучше так: бери случайные слова, разделяй на слоги и случайно соединияй :) Гугл «непаша попела»

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

из словаря легко и не то. разве нельзя научить программу брать морфемы и составлять(генерировать) слова. просто надо учесть правила русского языка по которым все строится. слоги не пойдут, нужны морфемы. думаю вы понимаете чем отличается морфема от слога. а чтобы генерировать слова из слогов или букв, тут уже сетка нужна.

anonymous
()
Ответ на: комментарий от anonymous

из словаря легко и не то

Для получения забавных результатов сойдет, остальное ненужно

slackwarrior ★★★★★
()

Как в линуксе реализовать вот такое

Как и в любой другой ОС - написанием питон скрипта. Зависит от формата словаря. За 10$ могу написать.

anonymous
()

Держи, лодырь. Сохрянаяешь в файл например desyatslov.sh. Запускаешь сhmod +x .desyatslov.sh чтобы сделать его исполняемым. Потом в той же директории создаешь словарик, например slovar.txt, и записываешь в него слова по одному на строке. Запускать так ./desyatslov.sh slovar.txt.

#!/bin/bash

vhodnoyfail=$1;
declare -A slova;
declare -A sluchslovaunik;
declare -a sluchslova;

for slovo in $(cat $vhodnoyfail); do
    slova["$slovo"]="$slovo";
done

razmer=${#slova[@]};

if [[ $razmer -lt 10 ]]; then
    echo "V slovare menshe 10 raznyh slov";
    exit 1;
fi

koeff=$(echo "scale=4; 1.0/$razmer" | bc);

while [[ "${#sluchslovaunik[@]}" -lt 10 ]]; do
    for slovo in "${!slova[@]}"
    do
        sluchchislo=$(echo "scale=4; $(( ${RANDOM}%100 ))/100" | bc);
        if (( $(echo "$sluchchislo <= $koeff" | bc -l) )); then
            razmerdo=${#sluchslovaunik[@]};
            sluchslovaunik["$slovo"]="$slovo";
            razmerposle=${#sluchslovaunik[@]};
            if [[ "$razmerdo" != "$razmerposle" ]]; then
                sluchslova+=("$slovo")
            fi
        fi
        if [[ "${#sluchslovaunik[@]}" -gt 9 ]]; then
            break;
        fi
    done
done

vyvod="";
for i in "${!sluchslova[@]}"; do
  vyvod="$vyvod ${sluchslova[$i]}"
done
echo $vyvod;
ya-betmen ★★★★★
()
Ответ на: комментарий от ya-betmen

у словаря на юниксах и юникс-сочуствующих есть стандартный путь

/usr/share/dict/words

или

/usr/dict/words

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.