Brat-Handler

 view release on metacpan or  search on metacpan

lib/Brat/Handler/File.pm  view on Meta::CPAN

package Brat::Handler::File;


use utf8;
use strict;
use warnings;
use open qw(:utf8 :std);

our $VERSION='0.11';

sub new {

    my ($class, $filename) = @_;
    my $annotationFilename;
    my $textFilename;
    my $textSize = 0;
    my @annFiles;
    my @textFiles;
    my @files;
    my $f;
    my $line;

    # print STDERR "\n==> $filename - " . ref($filename) . ";\n";
    if (defined $filename) {
	if (ref($filename) eq "") {
	    push @files, $filename;
	} elsif (ref($filename) eq "ARRAY") {
	    push @files, @$filename;
	}
    }
    foreach $f (@files) {
	# warn "$f\n";
	$annotationFilename = $f;
	$annotationFilename =~ s/\.txt$/.ann/;
	$textFilename = $f;
	$textFilename =~ s/\.ann$/.txt/;
	$textSize = 0;
	open FILE, $textFilename or die "no such file $textFilename\n";
	while($line = <FILE>) {
	    $textSize += length($line);
	}
	close FILE;
	# my @s = stat($textFilename);
	# $textSize += $s[7];
	push @annFiles, $annotationFilename;
	push @textFiles, $textFilename;
    }
    my $bratfile = {
	'annotationFilename' => [@annFiles],
	'textFilename' => [@textFiles],
	'terms' => {},
	'relations' => {},
	'attributes' => {},
	'maxTermId' => 0,
	'maxRelationId' => 0,
	'maxAttributeId' => 0,
	'textSize' => $textSize,
    };
    
    bless($bratfile, $class);

    if (defined $filename) {
	if (ref($filename) eq "") {
	    $bratfile->loadBratFile;
	} elsif (ref($filename) eq "ARRAY") {
	    warn "load of several brat files not implemented\n";
	}
    }
    return($bratfile);
}

sub _textFilename {
    my $self = shift;

    if (@_) {
	my $arg = shift;
	push @{$self->{'textFilename'}}, $arg;
    }
    return($self->{'textFilename'});
}

sub _textSize {
    my $self = shift;

    if (@_) {
	$self->{'textSize'} = shift;
    }
    return($self->{'textSize'});
}

sub _annotationFilename {
    my $self = shift;
    if (@_) {
	my $arg = shift;
	if ($arg =~ /^\d+$/) {
	    return($self->{'annotationFilename'}->[$arg]);
	} else {
	    push @{$self->{'annotationFilename'}}, $arg;
	}
    }
    return($self->{'annotationFilename'});
}



( run in 1.938 second using v1.01-cache-2.11-cpan-84de2e75c66 )