File:  [Local Repository] / db / prgsrc / makeauthors.pl
Revision 1.6: download - view: text, annotated - select for diffs - revision graph
Tue Nov 29 19:46:26 2005 UTC (18 years, 5 months ago) by roma7
Branches: MAIN
CVS tags: HEAD
*** empty log message ***

    1: #!/usr/bin/perl -w
    2: 
    3: =head1 NAME
    4: 
    5: makeauthors.pl - скрипт для создания таблиц авторов
    6: 
    7: =head1 SYNOPSIS
    8: 
    9: makeauthors.pl
   10: 
   11: =head1 DESCRIPTION
   12: 
   13: Скрипт создаёт и заполянет таблицы authors и A2Q, используя 
   14: информацию из файлов authors,nicks,ssnicks
   15: 
   16: =head1 AUTHOR
   17: 
   18: Роман Семизаров
   19: 
   20: 
   21: =cut
   22: 
   23: 
   24: use dbchgk;
   25: 
   26: my $DUMPDIR = $ENV{DUMPDIR} || "../dump";
   27: 
   28: do "chgk.cnf";
   29: use locale;
   30: use POSIX qw (locale_h);
   31: open NICKS, "<$nicksfile" or die "Can not open nicks";
   32: open SSNICKS, "<$ssnicksfile" or die "Can not open ssnicks";
   33: open UNKNOWN, ">$DUMPDIR/uauthors";
   34: open UNICKS, ">$DUMPDIR/unicks";
   35: open STDERR, ">$DUMPDIR/errors";
   36:   my ($thislocale);
   37:   if ($^O =~ /win/i) {
   38: 	$thislocale = "Russian_Russia.20866";
   39:   } else {
   40: 	$thislocale = "ru_RU.KOI8-R"; 
   41:   }
   42:   POSIX::setlocale( &POSIX::LC_ALL, $thislocale );
   43:   if ((uc 'а') ne 'А') {die "!Koi8-r locale not installed!\n"};
   44: 
   45: 
   46: 
   47: 	mydo("DROP TABLE IF EXISTS Authors");
   48: mydo("CREATE TABLE Authors
   49: (
   50:                 Id     INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
   51:                             KEY idkey (Id),
   52: 		CharId     CHAR(20),
   53: 		Name   CHAR(50),
   54: 		Surname CHAR(50),
   55: 		Nicks TEXT,
   56: 		QNumber INT
   57: )");
   58: 
   59: mydo ("DROP TABLE IF EXISTS A2Q");
   60: mydo("CREATE TABLE A2Q
   61: (
   62:                 Id  INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
   63:                 Author INT UNSIGNED ,
   64:                 Question INT UNSIGNED 
   65: )
   66: 
   67: 	     "
   68:             );
   69: 
   70: 
   71: while (<NICKS>)
   72: {
   73:    ($number,$nick)=split;
   74:    next unless $number=~/^\d+$/;
   75:    ($name,$surname)=split ' ',<NICKS>;
   76:    $name{$nick}= ucfirst lc $name;
   77:    $surname=ucfirst lc $surname;
   78:    $surname=~s/\-(.)/"-". uc $1/ge;
   79:    $surname=~s/\'(.)/"'". uc $1/ge;
   80:    $surname{$nick}= $surname;
   81:    
   82: }
   83: $surname{'error'}='Глюков';
   84: $name{'error'}='Очепят';
   85: $surname{'unknown'}='Неизвестный';
   86: $name{'unknown'}='Псевдоним';
   87: $surname{'team'}='Капитанова';
   88: $name{'team'}='Команда_';
   89: 
   90: 
   91: while (<SSNICKS>)
   92: {
   93:    $str=$_;
   94:    ($number,$n)=split ' ',$str;
   95:    if ($number=~/\d+/) {$nick=$n;next}
   96:    $str=~s/^\s+//;
   97:    $str=~s/\s+$//;   
   98:    $str=~s/\s+/ /;
   99:    $ssnick{$nick}.="|$str";
  100: }
  101: 
  102: 
  103: close (NICKS);
  104: close (SSNICKS);
  105: 
  106: 
  107: 
  108: open AUTHORS,"<$authorsfile" or die "Can not open authors";
  109: 
  110: while (<AUTHORS>)
  111: {
  112:    ($nick,$number,$descr)=m/^([a-zA-Z][a-zA-Z\s]+)(\d+)\s+(.*)$/g;
  113:    if (!$nick) 
  114:    {
  115:       ($number,$descr)=m/^(\d+)\s+(.*)$/g;
  116:       $nick='unknown';
  117:    }
  118:    $nick=~s/\s*$//;
  119:    $descr=~s/([\.\,\:\!\?])/$1 /g;
  120:    $descr=~s/\\n/ /g;
  121:    $descr=~s/^\s+//g;
  122:    $descr=~s/\s+$//g;
  123:    $descr=~s/\s+/ /g;
  124:    $descr=uc $descr;
  125: # die "$descr" unless $descr;
  126: #   die "Duplicated description \"$descr\"" if ($nick{$descr});
  127:    $nick{$descr}=$nick;
  128:    foreach (split ' ', $nick)
  129:    {
  130:       $unknick{$_}=1  unless $name{$_}
  131:    }
  132: }
  133: 
  134: 
  135: foreach $as(keys %unknick)
  136: {
  137:     print UNICKS "$as \n ", (join "\n ", (grep {$nick{$_}=~/$as/} keys %nick));
  138:     print UNICKS "\n";
  139: }
  140: 
  141: %forbidden=checktable('equalto')? getequalto : ();
  142: 
  143: #print scalar keys %forbidden, "forbidden questions\n";
  144: 
  145: getbase('QuestionId','Authors');
  146: 
  147: while (($QuestionId, $author)=getrow,$QuestionId)
  148: {
  149:    next unless $author;
  150:    $author=~s/([\.\,\:\!\?])/$1 /gm;
  151:    $author=~s/^\s+//mg;
  152:    $author=~s/\\n/ /g;
  153:    $author=~s/\s+$//mg;
  154:    $author=~s/\s+/ /mg;
  155:    $author=uc $author;
  156:    $author=~s/ё/е/mg;
  157:    if ($nick = $nick{$author}) 
  158:    { 
  159:       my @a=split ' ',$nick;
  160:       push @{$questions{$_}},$QuestionId foreach @a;
  161:    }
  162:    else 
  163:    {
  164:       $unknown{$author}=1;
  165:    }
  166: }
  167: 
  168: 
  169: 
  170: print scalar keys %nick , " authors found\n";
  171: 
  172: 
  173: #print STDERR "$_ ".$name{$_}."!\n" foreach keys %name;
  174: 
  175: addauthors($_,$name{$_},$surname{$_},$questions{$_},$ssnick{$_},\%forbidden) foreach keys %questions;
  176: 
  177: print UNKNOWN "$_\n" foreach sort keys %unknown;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>