示例#1
0
}
$nv = get_next_int64($fp);
$ne = get_next_int64($fp);
$off = get_int64_array($fp, $nv + 1);
$ind = get_int64_array($fp, $ne);
$wgt = get_int64_array($fp, $ne);
fclose($fp);
print "Inserting into DB...\n";
//$batch = new Batch($connection);
//$batch->activate();
$vertices = array_fill(0, $nv, "-1");
$time_start = microtime(true);
for ($v = 0; $v < $nv; $v++) {
    $s = $vertices[$v];
    if ($s == "-1") {
        $s = new_vertex($documents, $u, $nv);
        $vertices[$v] = $s;
    }
    for ($i = $off[$v]; $i < $off[$v + 1]; $i++) {
        $u = $ind[$i];
        $d = $vertices[$u];
        if ($d == "-1") {
            $d = new_vertex($documents, $u, $nv);
            $vertices[$u] = $d;
        }
        $edg = new Edge();
        $edg->set("weight", $wgt[$i]);
        $edges->saveEdge($edge, $s, $d, $edg, true);
    }
}
//$batch->process();
function add_tree($vertex, $pattern, $male_rule, $female_rule)
{
    global $tree;
    add_cases($male_rule);
    add_cases($female_rule);
    $have_hyphen = 0;
    $have_bracket = 0;
    $l = strlen($pattern);
    $current_len = 0;
    $tail_len = -1;
    $have_asterisk = 0;
    for ($i = $l - 1; $i >= 0; $i--) {
        $c = $pattern[$i];
        if ($c == '*') {
            $have_asterisk = 1;
            break;
        }
        if ($c == '-') {
            if ($i == $l - 1) {
                $have_hyphen = 1;
            }
            continue;
        }
        if ($c == ')') {
            assert($have_bracket == 0 && $current_len == 0);
            $have_bracket = 1;
            continue;
        }
        if ($c == '(') {
            assert($have_bracket);
            $tail_len = $current_len;
            continue;
        }
        if (!isset($tree[$vertex]["children"][$c])) {
            $tree[$vertex]["children"][$c] = new_vertex();
        }
        $vertex = $tree[$vertex]["children"][$c];
        $current_len++;
    }
    if ($have_asterisk == 0) {
        $c = chr(0);
        if (!isset($tree[$vertex]["children"][$c])) {
            $tree[$vertex]["children"][$c] = new_vertex();
        }
        $vertex = $tree[$vertex]["children"][$c];
    }
    if ($tree[$vertex]["real"] == 1) {
        print "//!!! dupicate rule for pattern {$pattern} (old pattern " . $tree[$vertex]["pattern"] . ")\n";
    }
    $tree[$vertex]["real"] = 1;
    $tree[$vertex]["hyphen"] = $have_hyphen;
    $tree[$vertex]["tail_len"] = $tail_len != -1 ? $tail_len : $current_len;
    $tree[$vertex]["pattern"] = $pattern;
    $tree[$vertex]["male_rule"] = $male_rule;
    $tree[$vertex]["female_rule"] = $female_rule;
    $tree[$vertex]["have_asterisk"] = $have_asterisk;
}