2个版本
0.1.2 | 2022年12月6日 |
---|---|
0.1.1 | 2022年12月3日 |
0.1.0 |
|
0.0.0 |
|
#2051 in 编码
24 下载/月
140KB
250 行
agldt
作者: Caio Geraldes [email protected]
解析AGLDT树库的工具
基本用法
use serde_xml_rs::from_str;
use std::fs::read_to_string;
use agldt::parser::*;
fn main() {
let src = read_to_string("/path/to/agldt/tlg0007.tlg004.perseus-grc1.tb.xml").unwrap();
let doc = from_str::<Treebank>(&preprocess(&src)).unwrap();
assert_eq!(doc.count_words(), 9451);
assert_eq!(doc.count_tokens(), 10709);
}
解析阶段描述
预处理
预处理源代码 .xml
以允许树库的序列化。
在AGLDT的xml
头和体中使用的方案存在一些奇怪之处,否则将使将其序列化为struct
变得相当杂乱。这有点像是一种补救措施,但应该能行得通。
奇怪之处
在AGLDT中使用xml
的主要奇怪之处发生在标签 <respStmt>
内部,其中标签 <persName>
可能包含单个字符串值或一系列标签
<respStmt>
<persName>Bridget Almas</persName>
<resp>responsible for the annotation environment and cts:urn technology</resp>
<address>Tufts University</address>
</respStmt>
<respStmt>
<persName>
<short>Vanessa Gorman</short>
<name>Vanessa Gorman</name>
<address>[email protected]</address>
<uri>http://data.perseus.org/sosol/users/Vanessa%20Gorman</uri>
</persName>
<resp>annotator of the text</resp>
</respStmt>
为了解决这个奇怪之处,我们应用了两个正则表达式替换,以将 <name>
和 <address>
标签移动到 <persName>
内部。
还有一些其他奇怪之处涉及到在标签 <primary>
、<secondary>
和 <annotator>
内部使用标签。这些也在当前版本的正则表达式中被移除。
最后,head
的值有时为空字符串,这仍然是我序列化时遇到的问题。因为0
在别处没有使用,所以我将空字符串替换为"0"
。
序列化
使用serde
进行数据序列化。我已经尽力保持元数据可访问,但仍有一些缺失的字段将在以后添加。
依赖
~3–4.5MB
~88K SLoC