## $Id: combineReClassify,v 1.1 2007/10/19 08:16:01 anders Exp $ # Copyright (c) 2002-2005 Anders Ardö # # See the file LICENCE included in the distribution. use strict; use Combine::Config; use Combine::LogSQL; use Combine::DataBase; use Combine::MySQLhdb; use Combine::XWI; use DBI; use Getopt::Long; # switches my $classnames; my $verbose; my $configfile; my $baseConfig; my $jobname; GetOptions('jobname:s' => \$jobname, 'classnames:s' => \$classnames, 'verbose' => \$verbose, 'configfile:s' => \$configfile, 'baseconfigdir:s' => \$baseConfig); if (defined($jobname)) { Combine::Config::Init($jobname,$baseConfig); } else { Getopt::Long::HelpMessage('No jobname suplied'); } if (defined($configfile)) { warn "Switch 'configfile' not implemented"; } #Config::Init('',$configfile); } my $doCheckRecord = Combine::Config::Get('doCheckRecord'); my $checkRecord; if ( $doCheckRecord ) { my $classifyPlugIn = Combine::Config::Get('classifyPlugIn'); if (!defined($classifyPlugIn)) { #backwards compatibility my $autoClassAlg = Combine::Config::Get('autoClassAlg'); if ($autoClassAlg eq 'PosCheck') { $classifyPlugIn = 'Combine::PosCheck_record'; } else { $classifyPlugIn = 'Combine::Check_record'; } #Old default } if ($verbose) { print "Using $classifyPlugIn as classifier\n"; } eval "require $classifyPlugIn"; $checkRecord = sub { $classifyPlugIn->classify(@_) }; } else { Getopt::Long::HelpMessage('Job $jobname does not do topic-classification (doCheckRecord=0)') } my $log = new Combine::LogSQL "ReClassify "; Combine::Config::Set('LogHandle', $log); Combine::MySQLhdb::Open(); my $sv = Combine::Config::Get('MySQLhandle'); my $where; if (defined($classnames)) { my @cls = split(',',$classnames); foreach my $i (0..$#cls) { $cls[$i] = "notation='" . $cls[$i] . "'"; } $where = ' WHERE ' . join(' OR ', @cls); } my $q = 'SELECT distinct(recordid) FROM topic' . $where . ';'; if ($verbose) { print "SQL Query=$q\n"; } my $sth = $sv->prepare(qq{$q}); $sth->execute; while (my ($recordid)=$sth->fetchrow_array) { if ($verbose) { print "Doing $recordid\n"; } my $xwi = Combine::MySQLhdb::Get($recordid); my $xhdb = new Combine::DataBase( $xwi, $sv, $log); $xhdb->delete; Combine::MySQLhdb::DeleteKey($recordid); #Both topic and robot are filled by check $xwi->topic_reset; $xwi->robot_reset; my $res = $checkRecord->($xwi); if ( $res ) { # if ( $doAnalyse ) { analyse($xwi); } $xhdb->insert; } if ($verbose) { print "Recordid $recordid Res=$res\n"; } } __END__ =head1 NAME combineReClassify - main program that reanalyse records in a combine database =head DESCRIPTION Algorithm: select relevant records based on cls parameter for each record get record from database delete analyse infor from the record analyse the record if still_relevant save in database =cut