8 次重大发布
使用旧的 Rust 2015
0.9.1 | 2017年5月8日 |
---|---|
0.8.0 | 2017年5月5日 |
0.5.0 | 2017年3月13日 |
#11 in #corpus
21 每月下载量
26KB
451 行
ptb-reader
自然语言处理中的语法工作始于能够读取标准语料库,如宾夕法尼亚树库。本软件包能够解析免费样本和完整PTB华尔街日报部分的合并(即句法结构和词性标注)文件。
数据类型
解析器的输出是一个 Vec<PTBTree>
,其中 PTBTree
由以下定义
pub enum PTBTree {
InnerNode {
label: String,
children: Vec<PTBTree>
},
TerminalNode {
label: String
}
}
PTBTree
实现了 Display
特性,显示 PTB 标记的表示法。它还支持 From
/Into
String
,生成树的顶层(即所有终端的连接)。
示例用法
解析整个 PTB 样本
let all_trees: Vec<PTBTree> = ptb_reader::parse_ptb_dir("/home/sjm/documents/Uni/penn-treebank-sample/treebank/combined/");
解析并处理单个树
let s: String = "((S (NNP John) (VP (VBD saw) (NNP Mary))))";
let t: PTBTree =
PTBTree::InnerNode{ label: "S".to_string(), children: vec![
PTBTree::InnerNode{ label: "NNP".to_string(), children: vec![
PTBTree::TerminalNode{ label: "John".to_string() }
] },
PTBTree::InnerNode{ label: "VP".to_string(), children: vec![
PTBTree::InnerNode{ label: "VBD".to_string(), children: vec![
PTBTree::TerminalNode{ label: "saw".to_string() }
] },
PTBTree::InnerNode{ label: "NNP".to_string(), children: vec![
PTBTree::TerminalNode{ label: "Mary".to_string() }
] }
] }
] }
;
assert_eq!(parse_ptbtree(s).unwrap(), t);
assert_eq!(t.render(), s);
assert_eq!(t.front(), "John saw Mary");
移除谓词-论元标注
let s: &str = "((S (NNP John) (VP (VBD saw) (NNP Mary) )))";
let s_pred: &str = "((S (NNP-SBJ John) (VP (NP *T*-1) (VBD saw) (NNP Mary) (-NONE- nada))))";
let mut t = parse_ptbtree(s_pred).unwrap();
t.strip_all_predicate_annotations();
assert_eq!(t, parse_ptbtree(s).unwrap())
依赖项
~1.5MB
~23K SLoC