#!/usr/bin/perl use strict; use warnings; use DBI; use NAT::PTD; my $in1 = shift; die "Can't open $in1 for reading\n" unless -f $in1; my $in2 = shift; die "Can't open $in2 for reading\n" unless -f $in2; my $out = shift; die "DB filename not supplied\n" unless $out; die "DB file exists. Not overwriting\n" if -f $out; my $dbh = DBI->connect("dbi:SQLite:dbname=$out","",""); $dbh->do("CREATE TABLE source_target (word, trans, prob);"); $dbh->do("CREATE INDEX sst ON source_target (word);"); $dbh->do("CREATE TABLE source_occs (word PRIMARY KEY UNIQUE, count INTEGER);"); $dbh->do("CREATE TABLE target_source (word, trans, prob);"); $dbh->do("CREATE INDEX sts ON target_source (word);"); $dbh->do("CREATE TABLE target_occs (word PRIMARY KEY UNIQUE, count INTEGER);"); { $dbh->begin_work; my $ptd = new NAT::PTD($in1); my $insert_trans = $dbh->prepare("INSERT INTO source_target VALUES (?,?,?);"); my $insert_count = $dbh->prepare("INSERT INTO source_occs VALUES (?,?);"); $ptd->downtr( sub { my ($w, $c, %t) = @_; $insert_count->execute($w, $c); for my $t (keys %t) { $insert_trans->execute($w, $t, $t{$t}); } }); $dbh->commit; } { $dbh->begin_work; my $ptd = new NAT::PTD($in2); my $insert_trans = $dbh->prepare("INSERT INTO target_source VALUES (?,?,?);"); my $insert_count = $dbh->prepare("INSERT INTO target_occs VALUES (?,?);"); $ptd->downtr( sub { my ($w, $c, %t) = @_; $insert_count->execute($w, $c); for my $t (keys %t) { $insert_trans->execute($w, $t, $t{$t}); } }); $dbh->commit; }