Вислід появи існуючих слів
Нотатки:
- до генератора випадкових слів (v.4 як описано тут) було додано словник (38 430 форм, існуючих в українській прозі).
- З блоків слів вибиралися тільки форми, наявні в словнику.
- Проведено 3 сесії по 25 млн. випадкових слів та 11 сесій по 100 млн. випадкових слів.
- В сесіях по 25 млн. виявлено по 136 - 128 - 118 існуючих форм.
- В сесіях по 100 млн. виявлено по 250 - 236 - 256 - 273 - 251 - 229 - 286 - 242 - 244 - 241 - 223 форм.
- З існуючих форм (вручну) відкинуто 2- і 3-літерні та повтори. В результаті отримано 329 довших форм (тільки "скаляти" (забруднити), "повалом" мають 7 літер, і жодного - більше семи):

Адам Анна арені біда біса боги босу будто вада вали вами Вано варті вбило веди везе вела вели Вест вина вини вино вину віка вінок віра вірна віро віти вітрі влов вовк вода воді вози возі вона вони воно ворон впали всії всій втім вуса вухо гаму гарт гнидо горб гори горі горя гули давно дама дано даром дати дворі дива диво дивом дика дико дитина діди діло діти довг додав доки долі дома доні допив доти дужо думу Едді Едем Ерні жага жили жита жити зала збув звуку зерна зіпне зови зону зорі Іван інде інка Інна Інни Інні Інну ішов кава кави казані кара карати карі каро ката квіти кили кові кози козла койки Койл кока коли коло колу коні копи копу корі кормі косами косі косу коти коток краса кров куме кумі лади лани лико лили лине лиха ліву ліси лісі літо лови лозу лорд люду маки мало мама мара матір маха маху мети милі миру миску міна мова мові мову мода моди може морив Моті муку мури навів надо назад назву нате неба неня неси несла ниви ними нині ніщо нове нову носа нота обід обозі обом овва овес Одеси один одне озера оком омана онде опис орда орду оремо орли отак отам отот Пайк пала пана пане пани пара паска паші пика пили пита пити пиха підо піни план повалом повз пови повиту поза пози поки поле полив попе пори пору поти проби пузо пут раба рабами рада ради раді радо рази рам'я рана рани ранка раті рибою рида ризу римі рівно рову роги родом роду ролі Ромео рота роти руде рука Сави Саві Саво Саву сади сала сама саме само Сатано свою своя сера сері сиве сиву сили сина ситою сіна сіни сіті скаляти скік сліди слово снів сонну сота стаю стіла стін стоси сука таки талан тату темп тепер тими типа тихі тіла токів томи тонн торт туги тупа тура тури улики умів унов уряд усім уста флот фото фраз хату ямки

- Покращення (досить низької) продуктивністі генератора вимагає, можливо:
1) ввести додаткові обмеження, скажімо, використання ще й тільки певних кластерів приголосних, як описано тут.
2) зміни в розташуванні літер генератора (не пропорційними блоками, але по одному значенню на кожне випадкове число).
3) виключити геть зі списка 2- 3-літерні схеми слів, аби позбутися ручної чистки.
4) "Ворд" зависав на файлі зі списком виловлених існуючих форм, можливо через великий порожній шмат, заповнений тільки порожніми TAB-ами. WordPad відкривав файл без проблем. Виключити порожн. розпізнавання.


Генератор v.4 (Dictionary).

#!/usr/bin/perl
use warnings;
use locale;

#Load vowel-consonant word patterns
$obj = 'vowpatchoice_list.txt';
open(FILE,"$obj") or die "Cannot open '$obj': $!";
@vowpatterns=<FILE>;
close (FILE);
foreach $elem(@vowpatterns){chomp $elem;}

$arr_len = @vowpatterns;
$looper=0;
$count_sense=0;
$word = '';
@result_sense = "";

# Dictionary LOAD
$obj = 'dbtotal.txt';
open(FILE, "$obj") or die "Cannot open 'dbtotal.txt': $!";
@DBwords=<FILE>;
close (FILE);
foreach $elem(@DBwords){chomp $elem;}

# LOOP STARTS HERE =========================================

while ($count_sense<10000){

while ($looper <10000){
$word = '';
&randa;
$wordpatt = $vowpatterns[$pick_patt];
&word_build;
push @result_raw, $word; #Build array of random words

$looper +=1;
}

# Compare with Dictionary and pick the words already existing in language
foreach $elem(@result_raw){
foreach $elemDIK(@DBwords){if ($elem eq $elemDIK) {
print 'GOT ONE', "\n";
push @result_sense, $elem;}}} #Add to the final output array
@result_raw = ''; #Empty raw words array
$count_sense +=1;
}

# LOOP ENDS HERE =========================================

sub word_build{
$offset = 0;
$count = 1;
$word_len = length $wordpatt;

while ($offset<=$word_len){
$cut_letter = substr($wordpatt, $offset, $count);
# PUT EVAL PATTERN HERE
if ($cut_letter eq 'v'){eval "&golosna";}
if ($cut_letter eq 'c'){eval "&prygolosna";}

$offset += 1;
}
}

sub golosna{
$randvow = int(rand(100));
if ($randvow < 20){$currvow = 'а';}
if ($randvow > 19 and $randvow < 32){$currvow = 'е';}
if ($randvow > 31 and $randvow < 48){$currvow = 'и';}
if ($randvow > 47 and $randvow < 71){$currvow = 'о';}
if ($randvow > 70 and $randvow < 83){$currvow = 'і';}
if ($randvow > 82 and $randvow < 92){$currvow = 'у';}
if ($randvow > 91 and $randvow < 94){$currvow = 'є';}
if ($randvow > 93 and $randvow < 96){$currvow = 'ї';}
if ($randvow > 95 and $randvow < 98){$currvow = 'ю';}
if ($randvow > 97 and $randvow < 101){$currvow = 'я';}
$word = $word . $currvow;

 

}

sub prygolosna{
$randcons = int(rand(107)); # without myaki znak
if ($randcons < 11){$currcons = 'н';}
if ($randcons > 10 and $randcons < 14){$currcons = 'б';}
if ($randcons > 13 and $randcons < 25){$currcons = 'в';}
if ($randcons > 24 and $randcons < 28){$currcons = 'г';}
if ($randcons > 27 and $randcons < 35){$currcons = 'д';}
if ($randcons > 34 and $randcons < 37){$currcons = 'ж';}
if ($randcons > 36 and $randcons < 42){$currcons = 'з';}
if ($randcons > 41 and $randcons < 46){$currcons = 'й';}
if ($randcons > 45 and $randcons < 53){$currcons = 'к';}
if ($randcons > 52 and $randcons < 61){$currcons = 'л';}
if ($randcons > 60 and $randcons < 67){$currcons = 'м';}
if ($randcons > 66 and $randcons < 73){$currcons = 'п';}
if ($randcons > 72 and $randcons < 82){$currcons = 'р';}
if ($randcons > 81 and $randcons < 90){$currcons = 'с';}
if ($randcons > 89 and $randcons < 99){$currcons = 'т';}
if ($randcons > 98 and $randcons < 101){$currcons = 'ф';}
if ($randcons > 100 and $randcons < 103){$currcons = 'х';}
if ($randcons > 102 and $randcons < 104){$currcons = 'ц';}
if ($randcons > 103 and $randcons < 105){$currcons = 'ч';}
if ($randcons > 104 and $randcons < 106){$currcons = 'ш';}
if ($randcons > 105 and $randcons < 107){$currcons = 'щ';}

$word = $word . $currcons;

}

sub randa{
$pick_patt = int(rand($arr_len));
}

 

open(FOUT, ">sensible.txt") or die "Cannot open 'sensible.txt': $!";
foreach $elem(@result_sense){print FOUT "$elem \t";}
close (FOUT);
print 'ALL DONE';