#data #standards #latin #greek #parser #xml #string

agldt

处理符合古希腊和拉丁依存树库标准的工具

2个版本

0.1.2 2022年12月6日
0.1.1 2022年12月3日
0.1.0 2022年12月3日
0.0.0 2022年12月3日

#2051 in 编码

24 下载/月

MIT 许可证

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