#
# CHISE.pm by Shigeki Moro
-# $Id: CHISE.pm,v 1.5 2003-08-10 15:52:15 moro Exp $
+# $Id: CHISE.pm,v 1.6 2003-10-08 13:30:28 moro Exp $
#
package CHISE;
use strict;
use warnings;
use utf8;
-use BerkeleyDB;
-use overload;
-
-sub import {
- overload::constant ( 'qr' => \&ChiseLikeRegex )
-}
-
-sub unimport {
- overload::remove_constant
-}
+use DB_File;
our ($EXCLUSIVE, $HAVE_INTERSECTION, $PROPER_SUBSET, $PROPER_SUPERSET, $EQSET);
($EXCLUSIVE, $HAVE_INTERSECTION, $PROPER_SUBSET, $PROPER_SUPERSET, $EQSET)
exit 1;
}
-#my $cache_size = 1024 * 1024 * 64;
-
my %alias = ();
my %alias_reverse = ();
for (glob "$DB_HOME/system-char-id/*") {
$aonly++ if (exists $a->{$i});
$bonly++ if (exists $b->{$i});
}
+ } else {
+ $aonly++ if (exists $a->{$i});
+ $bonly++ if (exists $b->{$i});
}
}
if ($common == 0) {
}
}
-#--- 正規表現のCHISE的拡張 ------------------------------------#
-
-sub ChiseLikeRegex ($) {
- my ($RegexLiteral) = @_;
- #print STDERR "BEFORE: $RegexLiteral\n"; # for debug
- $RegexLiteral =~ s/\\same_strokes_(\d)/(??{CHISE->same_strokes(\$$1)})/g;
- #$RegexLiteral =~ s/\\same_strokes_(\d)/[川山三]/g;
- #print STDERR "AFTER: $RegexLiteral\n"; # for debug
- return $RegexLiteral;
-}
-
-sub same_strokes {
- my $self = shift;
- my $backtrace = shift;
- my $db = "$DB_HOME/system-char-id/total-strokes";
- my $temp = &getvalue($db, "?$backtrace");
- my $result = '';
- for my $i (&getkeys($db, $temp)) {
- $i =~ s/^\?//;
- $result .= $i;
- }
- #print STDERR $result, "\n";
- return "[$result]";
-}
-
#--- モジュール内のみでう予の関数 ----------------------#
sub chars {
sub getvalue ($$) {
# キーから値をり出す
- my($dbname, $key) = @_;
+ my ($chise_dbname, $key) = @_;
my $value = '';
- my $db = new BerkeleyDB::Hash
- #tie my %h, "BerkeleyDB::Hash",
- -Filename => $dbname;
- #$value = $h{$key};
- #untie %h;
- $db->db_get($key, $value);
- undef $db;
+ tie (my %h, "DB_File", $chise_dbname, O_RDWR)
+ or die "Cannot open file $chise_dbname: $!\n";
+ $value = $h{$key};
+ untie %h;
return $value;
}
sub getkeys ($$) {
# 値からキーの配列をり出す
- my($dbname, $value) = @_;
- my $db = new BerkeleyDB::Hash
- #tie my %h, "BerkeleyDB::Hash",
- -Filename => $dbname;
+ my ($chise_dbname, $value) = @_;
+ tie (my %h, "DB_File", $chise_dbname, O_RDWR, , $DB_BTREE)
+ or die "Cannot open file $chise_dbname: $!\n";
my @keys = ();
- my ($k, $v) = ("", "") ;
- my $cursor = $db->db_cursor() ;
- #for my $k (keys %h) {
- while ($cursor->c_get($k, $v, DB_NEXT) == 0) {
- push @keys, $k if ($v eq $value);
- #push @keys, $key if ($h{$key} eq $value);
+ for my $key (keys %h) {
+ next unless (exists $h{$key});
+ push @keys, $key if ($h{$key} eq $value);
}
- undef $cursor ;
- undef $db ;
- #untie %h;
+ untie %h;
return @keys;
}
+
sub cap {
# 2つの配列の積合を求める
my($a, $b) = @_;
+#
+# CHISE_REG.pm
+# $Id: CHISE_REG.pm,v 1.2 2003-10-08 13:30:29 moro Exp $
+#
+
package CHISE_REG;
use strict;
} elsif (-e 'd:/work/chise/char-db'){
$DB_HOME = 'd:/work/chise/char-db';
} else {
- print STDERR "CHISE.pm: No database found.\n";
- print STDERR "CHISE.pm: Please set \$DB_HOME to CHISE.pm.\n";
+ print STDERR "CHISE_REG.pm: No database found.\n";
+ print STDERR "CHISE_REG.pm: Please set \$DB_HOME to CHISE.pm.\n";
exit 1;
}
#print STDERR "backreference: $backreference\n"; # for debug
#print STDERR "feature name: $feature_name\n"; # for debug
my $result = `./chisereg.pl $backreference $DB_HOME $feature_name`;
- print STDERR $result, "\n"; # for debug
+ #print STDERR $result, "\n"; # for debug
return "[$result]";
}