3个不稳定版本

0.3.1 2019年5月28日
0.3.0 2019年5月27日
0.2.0 2019年5月17日
0.1.0 2019年3月27日

#1086 in 数据结构


用于 lumberjack-utils

Apache-2.0

195KB
4K SLoC

Crate Build Status

lumberjack

读取并处理各种格式的选区树。

安装

  • 从crates.io获取
cargo install lumberjack-utils
  • 从GitHub获取
cargo install --git https://github.com/sebpuetz/lumberjack

作为独立使用

  • 将NEGRA导出4格式的treebank转换为括号形式的TueBa V2格式
lumberjack-conversion --input_file treebank.negra --input_format negra \
    --output_format tueba --output_file treebank.tueba --projectivize
  • 仅保留根节点,NPPP,并打印到简单括号格式
echo "NP PP" > filter_set.txt
lumberjack-conversion --input_file treebank.simple --input_format simple \
    --output_format tueba --output_file treebank.filtered \
    --filter filter_set.txt
  • 从简单括号形式的treebank转换为CONLLX格式,并注释终端的父标签作为特征。
lumberjack-conversion --input_file treebank.simple --input_format  simple\
    --output_format conllx --output_file treebank.conll --parent 
  • 以下顺序进行修改
  1. 将所有以$开头的词性终端重新附加到根节点
  2. 删除除根、SNPPPVP之外的所有非终端
  3. 根据最近的S为终端分配唯一标识符
  4. 在不受NPPP支配的终端上方插入标签为label的节点
  5. 在终端上注释父节点的标签。
  6. 带注释地打印到CONLLX格式。
echo "S VP NP PP" > filter_set.txt
echo "NP PP" > insert_set.txt
echo "S" > id_set.txt
lumberjack-conversion --input_file treebank.simple --input_format simple\
    --output_format conllx --insertion_set insert_set.txt \
    --insertion_label label --id_set id_set.txt --reattach $\
    --parent parent --output_file treebank.conllx

作为rust库使用

  • 从NEGRA格式读取并投影树,并打印到简单括号格式
use std::io::{BufReader, File};

use lumberjack::io::{NegraReader, PTBFormat};
use lumberjack::Projectivize;

fn print_negra(path: &str) {
    let file = File::open(path).unwrap();
    let reader = NegraReader::new(BufReader::new(file));
    for tree in reader {
        let mut tree = tree.unwrap();
        tree.projectivize();
        println!("{}", PTBFormat::Simple.tree_to_string(&tree).unwrap());
    }
}
  • 从treebank中的树过滤非终端节点,并打印到简单括号格式
use lumberjack::{io::PTBFormat, Tree, TreeOps, util::LabelSet};

fn filter_nodes(iter: impl Iterator<Item=Tree>, set: LabelSet) {
    for mut tree in iter {
        tree.filter_nonterminals(|tree, nt| set.matches(tree[nt].label())).unwrap();
        println!("{}", PTBFormat::Simple.tree_to_string(&tree).unwrap());
    }
}
  • 将简单括号格式的treebank转换为具有特征字段中编码的选区结构的CONLLX
use conllx::graph::Sentence;
use lumberjack::io::Encode;
use lumberjack::{Tree, TreeOps, UnaryChains};

fn to_conllx(iter: impl Iterator<Item=Tree>) {
    for mut tree in iter {
        tree.collaps_unary_chains().unwrap();
        tree.annotate_absolute().unwrap();
        println!("{}", Sentence::from(&tree));    
    }
}

依赖关系

~4.5MB
~86K SLoC