Автор Гілка: Закінчена форма словника.  (Прочитано 1717 раз)

Відсутній tech

  • Письменник
  • *****
  • дописів: 586
  • Карма: +1/-0
  • Гигик
Привіт. Не хочу поміщати це як продовження теми про сітьовий клієнт , так як цей клієнт  перевантажує словниковий сервер,  тож най тема піде вниз.

Я обновив свій сковничок, 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) 8) м'який (про
м'ясо)


Сам я люблю його вживати в поєднанні зі словничком від  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'"




« Змінено: 2005-02-21 03:07:32 від tech »