Привіт. Не хочу поміщати це як продовження теми про сітьовий клієнт , так як цей клієнт перевантажує словниковий сервер, тож най тема піде вниз.
Я обновив свій сковничок,
www.freewebs.com/nabis/enua.zip На цей раз я дійсно приділяв увагу тому щоб не було пропущених слів, доходячи до корегування файлу власноруч. Це, напавне, все що можна було здобути з северів CyberMova.
Я помилявся відносно кількості слів, їх значно менше, 16784 , перший раз я зробив
grep "[A-Za-z]" enua.dict | wc -l , не врахувавши що там присутні словосполучення і вказівники частини мови такі як "n, adj, adv" (noun, adjective, adverb). На цей раз я відділив кожний запит слова порожнім рядком (набагато легше читати), і порахував кількість слів з допомогою
grep "^[ ]*$" enua.dict | wc -l.
Як я знаходив вітсутні слова?
Сервер в стані переватаження (при всьому тому що намагався уникати його), видавав "Extra traffic, pelase visit our site later...", тож я знаходив в vim
/Extra traffic, або щоб видрукувати слова, запускав наступний скрипт:
#!/bin/bash
grep -B 3 "Extra" $1 | grep -v "Extra" | grep -v "Requested" | sed 's/-//g' | grep -v "^ *$"
grep "This term is either misspelled" $1 | awk '{print $1}'
Пізніше, коли я значно почистив файл:
#!/bin/bash
c=0;
for i in `cat /usr/share/dict/words`; do
f="$(grep $i enua.dict)"
if [ "$f" = '' ]; then
echo $i >> misses.txt
echo $i - MISSED
else
((++c))
echo $i +
fi
done
echo $c
(Звичайно, це можна також написати на Perl шоб працювало значно швидше.)
Це скриптик, який видаляє дубльовані "Requested:", в якійсь стадії редагування (переважно sed, так як awk треба ще вивчити), у мене появилось багато ліній підряд з "Requested":
#!/usr/bin/perl
use warnings;
use strict;
open (my $fileraw, '<', "$ARGV[0]")
or die "Can't open file for reading: $!";
open (my $tofile, '>>', 'file.out')
or die "Can't open file for writing: $!";
my @lines = <$fileraw>;
my $prev_line = "nothing";
while (@lines){
if ($lines[0] =~ /^\n$/){
shift @lines;
next;
}
if ($lines[0] =~ /Requested:/){
if ($prev_line =~ /Requested:/){
$prev_line = $lines[0];
shift @lines;
next;
} else {
print $tofile $lines[0];
$prev_line = $lines[0];
shift @lines;
next;
}
} else {
print $tofile $lines[0];
$prev_line = $lines[0];
shift @lines;
}
}
Накінець, щодо надання словнику формату придатного для вживання в словникових програмах. Я не впевнений що хороша ідея стосовно саме цього словника, так як в ньому багато словосполучень як прикладів. Як це повинно виглядати?
tender I 1. v 1) пропонувати : to tender one's thanks - складати
подяку, to tender an apology - вибачатися, to tender one's
resignation
<snip>
люблячий : tender passion (або sentiment) - кохання, ніжні почуття,
tender heart - добре серце 4) чутливий; хворобливий; вразливий :
tender spot (або place) - вразливе місце 5) делікатний 6) чуйний,
дбайливий : to be tender of smb. - ніжно або дбайливо ставитися до
когось 7) лагідний, м'який, ніжний (про тон, коліp) м'який (про
м'ясо)
Сам я люблю його вживати в поєднанні зі словничком від dict.linux.org.ua. Просто запускаю splitvt в xterm, в верхньому вікні less dict/uacomp.dict , в нижньому - less dict/enua.dict. Потім шукаю по тексту:
/^tender.
Однією командою це можна запустити як:
splitvt -upper 'less dict/uacomp.dict' -lower 'less dict/enua.dict'
Або поставити alias в .bashrc:
alias enua="splitvt -upper 'less ~/dict/uacomp.dict' -lower 'less ~/dict/enua.dict'"