#!/usr/bin/perl # CGI script provides one part of the homepage of the Textpresso system. # # copyright (c) Hans-Michael Muller, Pasadena, California, 2002-2004 # use strict; use CGI; ### globals # my $query = new CGI; my $absmyself = $query->url(absolute=>1); my %generalsettings = $query->cookie('generalsettings'); my %displayoptions = $query->cookie('displayoptions'); my %labels = ReadElements("/var/www/html/text/textpresso.dtd"); # read in # elements that # can be # searched for. my @elementkeys = sort keys % labels; # list of elements, abbreviated my %searchtargets = (Author => 0, Title => 0, Abstract => 0, Paper => 0, Year => 0); # ### end globals; PrintHeader($query); print $query->p; my $lefthead = $query->font({-face => 'verdana, arial, helvetica', -size => '3', -color => 'white'}, 'Simple Retrieval'); my $righthead = $query->font({-face => 'verdana, arial, helvetica', -size => '3', -color => 'white'}, 'News and Messages'); my $leftcont; ### start form # $leftcont .= $query->start_form(-method => 'POST', -action => 'simpleretrieval.cgi'); # ### ### present input fields # $leftcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, 'Query should be met in a '); my %locallabel; $locallabel{sentence} = " sentence"; $locallabel{publication} = " publication"; $leftcont .= $query->radio_group(-name => 'searchmode', -linebreak => 0, -value => ['sentence', 'publication'], -default => 'sentence', -labels => \%locallabel); $leftcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, '.'); $leftcont .= $query->p; $leftcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, 'Type in keywords to be searched for, '); $leftcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, 'separated by '); $leftcont .= $query->start_b; $leftcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, 'white spaces: '); $leftcont .= $query->end_b; $leftcont .= $query->p; $leftcont .= $query->textfield(-name => 'simplesearchstring', -size => 40, -maxlength => 255); $leftcont .= $query->checkbox(-name => 'exactmatch', -value => 'OFF', -label => ' Exact match'); $leftcont .= $query->p; $leftcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, 'Specify categories that should also be met (optional): '); $leftcont .= $query->p; $leftcont .= $query->popup_menu(-name => 'inc0', -values => [@elementkeys], -labels=>\%labels); $leftcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, ', '); $leftcont .= $query->popup_menu(-name => 'inc1', -values => [@elementkeys], -labels=>\%labels); $leftcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, '. '); $leftcont .= $query->p; $leftcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, 'Search in '); my @defaults = ("Abstract", "Paper"); foreach my $key (sort keys % searchtargets) { if ($searchtargets{$key}) { push @defaults, $key} } my %locallabel2; foreach my $key (keys % searchtargets) { if ($key eq "Paper") { $locallabel2{$key} = " Full Text"; } else { $locallabel2{$key} = " " . $key; } } $leftcont .= $query->checkbox_group(-name => 'searchtargets', -value => [sort keys % searchtargets], -defaults => [sort @defaults], -linebreak => 'false', -rows => 1, -labels => \%locallabel2); $leftcont .= $query->p; $leftcont .= $query->submit(-name => 'search', -value => 'Search!'); $leftcont .= $query->font(" "); # ### ### end form # $leftcont .= $query->end_form; # ### my $rightcont; $rightcont .= $query->start_b; $rightcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, 'Welcome to '); $rightcont .= $query->start_em; $rightcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, 'Textpresso '); $rightcont .= $query->end_em; $rightcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, '! The '); $rightcont .= $query->start_em; $rightcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, 'Textpresso '); $rightcont .= $query->end_em; $rightcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, 'search engine for '); $rightcont .= $query->start_i; $rightcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, 'biological '); $rightcont .= $query->end_i; $rightcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, 'abstracts and fulltexts was developed at '); $rightcont .= $query->a({-href=>'http://www.wormbase.org', -target => '_blank'}, "Wormbase"); $rightcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, ' to service the '); $rightcont .= $query->start_i; $rightcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, 'biological '); $rightcont .= $query->end_i; $rightcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, 'community. '); $rightcont .= $query->end_b; $rightcont .= $query->p; $rightcont .= $query->img({-src=>'/text/gif/ball_yellow.gif', -align=>'center'}); $rightcont .= $query->start_b; $rightcont .= $query->font({-face => 'verdana, helvetica', -size => '2', -color => 'darkred'}, 'November 17th, 2003: '); $rightcont .= $query->end_b; $rightcont .= $query->font({-face => 'verdana, helvetica', -size => '2', -color => 'darkred'}, 'Textpresso has been featured in an article about text mining by Steven Dickman. '); $rightcont .= $query->font({-face => 'verdana, helvetica', -size => '2', -color => 'darkred'}, 'You can find it in PLoS Biology by clicking '); $rightcont .= $query->a({-href=>'http://www.plosbiology.org/plosonline/?request=get-document&doi=10.1371/journal.pbio.0000048', -target => '_blank'}, "here"); $rightcont .= $query->font({-face => 'verdana, helvetica', -size => '2', -color => 'darkred'}, '.'); $rightcont .= $query->p; $rightcont .= $query->img({-src=>'/text/gif/ball_yellow.gif', -align=>'center'}); $rightcont .= $query->start_b; $rightcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, 'Month, Day, Year: '); $rightcont .= $query->end_b; $rightcont .= $query->font({-face => 'verdana, helvetica', -size => '2'}, 'Add your own news items here. '); $rightcont .= $query->p; my $lefthead2 = $query->font({-face => 'verdana, arial, helvetica', -size => '3', -color => 'white'}, 'Textpresso Database'); my $righthead2 = ""; my $leftcont2; $leftcont2 .= $query->start_b; $leftcont2 .= $query->font({-face => 'verdana, helvetica', -size => '2'}, 'Add description about your own database here.'); $leftcont2 .= $query->end_b; $leftcont2 .= $query->br; $leftcont2 .= $query->font({-face => 'verdana, helvetica', -size => '2'}, 'Currently, the database contains:'); $leftcont2 .= $query->start_ul; $leftcont2 .= $query->li($query->font({-face => 'verdana, helvetica', -size => '2'}, 'XX,XXX fulltext papers ')); $leftcont2 .= $query->li($query->font({-face => 'verdana, helvetica', -size => '2'}, 'XX,XXX paper abstracts, XX,XXX meeting abstracts and XX,XXX PMID abstracts')); $leftcont2 .= $query->li($query->font({-face => 'verdana, helvetica', -size => '2'}, 'Citation information for a total XX,XXX publications')); $leftcont2 .= $query->end_ul; $leftcont2 .= $query->a({-href=>'/text/doc/abouttextpresso/paperdetails.html', -target => 'middle'}, 'More details'); $leftcont2 .= $query->br; $leftcont2 .= $query->br; $leftcont2 .= $query->a({-href=>'/text/textpresso/chart.html', -target => '_blank'}, 'Compare Textpresso to other search engines!'); my $rightcont2 = ""; print $query->start_table; print $query->start_Tr; print $query->start_td; PrintTable ($query, $lefthead, $righthead, $leftcont, $rightcont); print $query->end_td; print $query->end_Tr; print $query->start_Tr; print $query->start_td; Print1ColumnTable ($query, $lefthead2, $leftcont2); print $query->end_td; print $query->end_Tr; print $query->end_table; # ### ### end page # print $query->end_html; # ### sub PrintTable { my $query = shift; my $lefttablehead = shift; my $righttablehead = shift; my $leftcontent = shift; my $rightcontent = shift; print $query->table({-border => '0', -width =>'100%', -align => 'left', valign => 'top', -cellpadding => '5', -cellspacing => '4'}, $query->Tr({-align => 'left', valign => 'top' }, [ $query->th({-bgcolor => '#888d8d', -width => '50%'},[$lefttablehead, $righttablehead]), $query->td({-bgcolor => '#e6e6f6'},[$leftcontent, $rightcontent]) ])); } sub Print1ColumnTable { my $query = shift; my $tablehead = shift; my $tablecontent = shift; print $query->table({-border => '0', -width =>'100%', -align => 'left', valign => 'top', -cellpadding => '5', -cellspacing => '4'}, $query->Tr({-align => 'left', valign => 'top' }, [ $query->th({-bgcolor => '#888d8d', -width => '50%'}, $tablehead), $query->td({-bgcolor => '#e6e6f6'}, $tablecontent) ])); } sub PrintHeader { # begin PrintHeader my $query = shift; print $query->header; print $query->start_html(-title=>'Textpresso Homepage', -author=>'Hans-Michael Muller', -bgcolor => '#e6e6f6', -text =>'#282d2d', -link=>'#484d4d'); print $query->br; print $query->img({-src=>'/text/gif/textpressobanner48.jpg', -alt => 'Textpresso'}); print $query->br; print $query->start_em; print $query->font({-face => 'adobe-courier', -size => '4'}, '  An information retrieval and extraction system for '); print $query->font({-face => 'adobe-courier', -size => '4'}, 'C. elegans '); print $query->font({-face => 'adobe-courier', -size => '4'}, 'literature'); print $query->end_em; } # end PrintHeader sub PrintBottom { # begin PrintBottom my $query = shift; } # end PrintBottom sub ReadElements { my $dtdfile = shift; my %labels = (); $labels { "" } = "none"; # include empty tag for search open (DTDFILE, "$dtdfile") or die "Can't open DTD file $dtdfile."; while (my $line = ) { chomp ($line); if ($line =~ / <\!--\s((\w|\s)+)\s-->/) { my $key = $1; my $label = $2; if (($key ne "sentence") && ($key ne "article")){ #because pattern above is more specific, this isn't really necessary $labels { substr($key, 0, 2) } = $label; } } } close (DTDFILE); return %labels; }