[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [school-discuss] English teacher apps



Dennis Daniels wrote:
Hello Robin,
I actually found and downloaded perlconc :) I'm not much of a perl guy (diver?) but have had some small success with one-liners in perl. I was looking at your app as as a standalone app... do you still have a standalone version? I've found that concordances really help students understand the correct usage of words ergo the interest.
A very crude early version is attached.

Robin

--
"When I was at school, education could go hang, so long as a boy could hit a six, sing the school song loudly, and take a crumpet up the behind without blubbing."
- Blackadder Goes Forth

Robin Turner
IDMYO
Bilkent Universitesi
Ankara 06533
Turkey

www.bilkent.edu.tr/~robin

#!/usr/bin/perl

$default="/home/user/corpus.txt" # Change file name to your default corpus

open (TEMPFILE,"+>tempfile.txt");

&intro;
print "\n OK, I think I've got that.\n";
&mainmenu;

sub intro {
	($username) = getpwuid ($<);
	if ($username ne "fast") {
		print "Hello, $username !\n";
	}
	print "Which file contains the corpus you want to operate on?\n";
	print "Type the full address of the file, e.g. /home/ayse/homework.txt, \n or just hit Return for the default corpus\n"; 
	$input = <>;
	chop $input;
	open (CORPUS,"$input") || open (CORPUS,"$default") || &intro; 
}


sub mainmenu {
	print "\nWhat would you like to do?\n";
	print "1. Word frequency count\n";
	print "2. Concordance\n";
	print "3. Quit\n";
	$choice = <>;
	chop $choice;
	
	if ($choice == 1) {
		&wordcount;

	} elsif ($choice == 2) {
		&concmenu;
	} elsif ($choice == 3) {
		print "Bye!\n";
	}
	else {
		print "That's not a number from 1 to 3!\n";
		&mainmenu;
	}
}

sub wordcount {
	print "Enter word to count\n";
	$totalwords = 1;
	$wordcount = 0;
	$searchstring = <>;
	chop $searchstring;
	while (<CORPUS>) {
		if (/$searchstring/ig) {
			$wordcount++;
			}
		$totalwords++;
	}	
	$wordspermillion = $wordcount / $totalwords * 1000000;
	$wordspermillion = $wordspermillion + 0.5;
	$wordspermillion = int ($wordspermillion);
	print "In a corpus of $totalwords words, $searchstring occurs $wordcount
times.\n This gives a word frequency of $wordspermillion words per million.\n"; 	
&mainmenu; }

sub concmenu {
	print "Enter the word or phrase you want to search for\n";
	$searchstring = <>;
	chop $searchstring;
	print "Search for $searchstring ? (y/n)\n";
	$choice = <>;
	chop $choice;
	if ($choice eq "y") {
		&concordance;
	} elsif ($choice eq "n") {
		&concordance;
	} else {
		print "Huh?\n";
		&mainmenu;
	}	
}

sub concordance {
        $results = "Concordance for $searchstring\n";
	while ( $line = <CORPUS>) {
		if ($line =~ $searchstring) {
			$next = <CORPUS>;
			print "$prev $line $next\n\n";
			print TEMPFILE "$prev $line $next\n\n";
                        $results .= "$prev $line $next\n\n";
		}
		$prev = $line;
	}
	&saveit;
}

sub saveit {
	print "Do you want to save this file? (y/n)\n";
	$choice = <>;
	chop $choice;
	if ($choice eq "y") {
		print "Enter file name.\n";
		$filename = <>;
		chop $filename;
		if (-e "$filename") {
			print "Hold on, there's already a file called $filename . \n Are you sure you want to overwrite it? (y/n)\n";
		 	$choice2 = <>;
			chop $choice2;
			if ($choice2 eq "y") {
                              open (NEWFILE, ">>$filename");
			        print NEWFILE "$results\n";
			        close (NEWFILE);
			} elsif ($choice eq "n") {
				&saveit;
			}  else {
				print "Huh?\n";
				&saveit;
			}

		}  else {


			open (NEWFILE, ">>$filename");
			print NEWFILE "$results\n";
			close (NEWFILE);
		}
	} elsif ($choice eq "n") {
		&mainmenu;
	} else {print "Huh?\n";
		&saveit;
	}
}