This commit is contained in:
@ -9,17 +9,25 @@ use self::parser::Risdok;
|
||||
|
||||
pub struct Parser {
|
||||
remove: Vec<String>,
|
||||
replace: Vec<(String, String)>,
|
||||
}
|
||||
|
||||
impl Parser {
|
||||
pub fn new() -> Self {
|
||||
Self { remove: Vec::new() }
|
||||
Self {
|
||||
remove: Vec::new(),
|
||||
replace: Vec::new(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn add_string_to_remove(&mut self, data: &str) {
|
||||
self.remove.push(data.into());
|
||||
}
|
||||
|
||||
pub fn add_string_to_replace(&mut self, search: &str, replace: &str) {
|
||||
self.replace.push((search.into(), replace.into()));
|
||||
}
|
||||
|
||||
/// Parses the content available in `url`. Calls appropriate functions in supplied `LawBuilder`.
|
||||
pub fn parse(&self, url: &str, builder: &mut LawBuilder) -> Result<bool, Error> {
|
||||
info!("Parsing {url}");
|
||||
@ -33,6 +41,9 @@ impl Parser {
|
||||
for r in &self.remove {
|
||||
xml = xml.replace(r, "");
|
||||
}
|
||||
for (search, replace) in &self.replace {
|
||||
xml = xml.replace(search, replace);
|
||||
}
|
||||
|
||||
Risdok::from_str(&xml, builder)
|
||||
}
|
||||
@ -74,54 +85,162 @@ mod tests {
|
||||
use std::{fs, sync::Arc};
|
||||
|
||||
use crate::{
|
||||
law::{responsible::contains, Classifier, LawBuilder},
|
||||
law::{
|
||||
responsible::{contains, starts_with_number},
|
||||
Classifier, LawBuilder,
|
||||
},
|
||||
risparser::paragraph::Parser,
|
||||
};
|
||||
use pretty_assertions::assert_eq;
|
||||
|
||||
#[test]
|
||||
fn paragraph() {
|
||||
let laws = fs::read_dir("./data/expected/overview/")
|
||||
.expect("No folder with expected overview files");
|
||||
// TODO: Instead of specific test cases, use this general method once there is a nice way to
|
||||
// add classifiers + custom removals/edits of law texts
|
||||
//
|
||||
//#[test]
|
||||
//fn paragraph() {
|
||||
// let laws = fs::read_dir("./data/expected/overview/")
|
||||
// .expect("No folder with expected overview files");
|
||||
|
||||
for law in laws {
|
||||
let path = law.unwrap();
|
||||
let law_path = format!("{}", path.path().display());
|
||||
let law_id = path.file_name().into_string().unwrap().to_string();
|
||||
// for law in laws {
|
||||
// let path = law.unwrap();
|
||||
// let law_path = format!("{}", path.path().display());
|
||||
// let law_id = path.file_name().into_string().unwrap().to_string();
|
||||
|
||||
//TODO: Remove this if once all law texts pass
|
||||
if ["10001905".into()].contains(&law_id) {
|
||||
let expected_path = format!("./data/expected/par/{law_id}");
|
||||
// //TODO: Remove this if once all law texts pass
|
||||
// if ["10001905".into()].contains(&law_id) {
|
||||
// let expected_path = format!("./data/expected/par/{law_id}");
|
||||
|
||||
let pars = fs::read_to_string(law_path).expect("Could not read file {file_path}.");
|
||||
let pars = pars.trim().split('\n').collect::<Vec<&str>>();
|
||||
// let pars = fs::read_to_string(law_path).expect("Could not read file {file_path}.");
|
||||
// let pars = pars.trim().split('\n').collect::<Vec<&str>>();
|
||||
|
||||
let mut builder = LawBuilder::new("law");
|
||||
builder.add_classifier(Classifier::new("Abschnitt", Arc::new(&contains)).root());
|
||||
// let mut builder = LawBuilder::new("law");
|
||||
// builder.add_classifier(Classifier::new("Abschnitt", Arc::new(&contains)).root());
|
||||
|
||||
let mut parser = Parser::new();
|
||||
parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§§ 1, 2, 3, 4,6, § 8 Abs. 1 und 2 des Gesetzes vom 16. Februar 1883, RGBl. Nr. 20, betreffend das Verfahren zum Zwecke der Todeserklärung und der Beweisführung des Todes, in der Fassung des Gesetzes vom 31. März 1918, RGBl. Nr. 129:)</i></absatz>"#);
|
||||
parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§§ 1 bis 11 des Gesetzes über die Verschollenheit, die Todeserklärung und die Feststellung der Todeszeit vom 4. Juli 1939, Deutsches RGBl. I S. 1186:)</i></absatz>"#);
|
||||
parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§ 56 Abs. 3 des Gesetzes vom 4. Juli 1939, Deutsches RGBl. I S. 1186:)</i></absatz>"#);
|
||||
parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§ 10 des Gesetzes vom 16. Februar 1883, RGBl. Nr. 20, betreffend das Verfahren zum Zwecke der Todeserklärung und der Beweisführung des Todes, in der Fassung des Gesetzes vom 31. März 1918, RGBl. Nr. 129:)</i></absatz>"#);
|
||||
parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§§ 10a, 10b und 10c des Gesetzes vom 16. Februar 1883, RGBl. Nr. 20, betreffend das Verfahren zum Zwecke der Todeserklärung und der Beweisführung des Todes, in der Fassung des Gesetzes vom 31. März 1918, RGBl. Nr. 129:)</i></absatz>"#);
|
||||
parser.add_string_to_remove("<i>");
|
||||
parser.add_string_to_remove("</i>");
|
||||
for par in pars {
|
||||
let cont = parser.parse(par, &mut builder).unwrap();
|
||||
if !cont {
|
||||
break;
|
||||
}
|
||||
}
|
||||
// let mut parser = Parser::new();
|
||||
// parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§§ 1, 2, 3, 4,6, § 8 Abs. 1 und 2 des Gesetzes vom 16. Februar 1883, RGBl. Nr. 20, betreffend das Verfahren zum Zwecke der Todeserklärung und der Beweisführung des Todes, in der Fassung des Gesetzes vom 31. März 1918, RGBl. Nr. 129:)</i></absatz>"#);
|
||||
// parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§§ 1 bis 11 des Gesetzes über die Verschollenheit, die Todeserklärung und die Feststellung der Todeszeit vom 4. Juli 1939, Deutsches RGBl. I S. 1186:)</i></absatz>"#);
|
||||
// parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§ 56 Abs. 3 des Gesetzes vom 4. Juli 1939, Deutsches RGBl. I S. 1186:)</i></absatz>"#);
|
||||
// parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§ 10 des Gesetzes vom 16. Februar 1883, RGBl. Nr. 20, betreffend das Verfahren zum Zwecke der Todeserklärung und der Beweisführung des Todes, in der Fassung des Gesetzes vom 31. März 1918, RGBl. Nr. 129:)</i></absatz>"#);
|
||||
// parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§§ 10a, 10b und 10c des Gesetzes vom 16. Februar 1883, RGBl. Nr. 20, betreffend das Verfahren zum Zwecke der Todeserklärung und der Beweisführung des Todes, in der Fassung des Gesetzes vom 31. März 1918, RGBl. Nr. 129:)</i></absatz>"#);
|
||||
// parser.add_string_to_remove("<i>");
|
||||
// parser.add_string_to_remove("</i>");
|
||||
// for par in pars {
|
||||
// let cont = parser.parse(par, &mut builder).unwrap();
|
||||
// if !cont {
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
|
||||
let actual = builder.history;
|
||||
// let actual = builder.history;
|
||||
|
||||
let expected = fs::read_to_string(&expected_path)
|
||||
.expect(&format!("Could not read file {expected_path}."));
|
||||
let expected = expected.trim().split('\n').collect::<Vec<&str>>();
|
||||
// let expected = fs::read_to_string(&expected_path)
|
||||
// .expect(&format!("Could not read file {expected_path}."));
|
||||
// let expected = expected.trim().split('\n').collect::<Vec<&str>>();
|
||||
|
||||
assert_eq!(actual, expected);
|
||||
// assert_eq!(actual, expected);
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
fn test(law_id: &str, builder: &mut LawBuilder, parser: Parser) {
|
||||
let paragraph_path = format!("./data/expected/overview/{law_id}");
|
||||
let expected_path = format!("./data/expected/par/{law_id}");
|
||||
|
||||
let pars =
|
||||
fs::read_to_string(paragraph_path).expect("Could not read file {paragraph_path}.");
|
||||
let pars = pars.trim().split('\n').collect::<Vec<&str>>();
|
||||
|
||||
for par in pars {
|
||||
println!("{par}");
|
||||
let cont = parser.parse(par, builder).unwrap();
|
||||
if !cont {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
let actual = &builder.history;
|
||||
|
||||
println!("{actual:?}");
|
||||
|
||||
let expected = fs::read_to_string(&expected_path)
|
||||
.expect(&format!("Could not read file {expected_path}."));
|
||||
let expected = expected.trim().split('\n').collect::<Vec<&str>>();
|
||||
|
||||
assert_eq!(actual, &expected);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn teg() {
|
||||
let law_id = "10001905";
|
||||
let mut builder = LawBuilder::new("law");
|
||||
builder.add_classifier(Classifier::new("Abschnitt", Arc::new(&contains)).root());
|
||||
|
||||
let mut parser = Parser::new();
|
||||
parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§§ 1, 2, 3, 4,6, § 8 Abs. 1 und 2 des Gesetzes vom 16. Februar 1883, RGBl. Nr. 20, betreffend das Verfahren zum Zwecke der Todeserklärung und der Beweisführung des Todes, in der Fassung des Gesetzes vom 31. März 1918, RGBl. Nr. 129:)</i></absatz>"#);
|
||||
parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§§ 1 bis 11 des Gesetzes über die Verschollenheit, die Todeserklärung und die Feststellung der Todeszeit vom 4. Juli 1939, Deutsches RGBl. I S. 1186:)</i></absatz>"#);
|
||||
parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§ 56 Abs. 3 des Gesetzes vom 4. Juli 1939, Deutsches RGBl. I S. 1186:)</i></absatz>"#);
|
||||
parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§ 10 des Gesetzes vom 16. Februar 1883, RGBl. Nr. 20, betreffend das Verfahren zum Zwecke der Todeserklärung und der Beweisführung des Todes, in der Fassung des Gesetzes vom 31. März 1918, RGBl. Nr. 129:)</i></absatz>"#);
|
||||
parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§§ 10a, 10b und 10c des Gesetzes vom 16. Februar 1883, RGBl. Nr. 20, betreffend das Verfahren zum Zwecke der Todeserklärung und der Beweisführung des Todes, in der Fassung des Gesetzes vom 31. März 1918, RGBl. Nr. 129:)</i></absatz>"#);
|
||||
parser.add_string_to_remove("<i>");
|
||||
parser.add_string_to_remove("</i>");
|
||||
|
||||
test(law_id, &mut builder, parser);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn mschg() {
|
||||
let law_id = "10002180";
|
||||
let mut builder = LawBuilder::new("law");
|
||||
builder.add_classifier(Classifier::new("Abschnitt", Arc::new(&contains)).root());
|
||||
builder.add_classifier(Classifier::new("Number", Arc::new(&starts_with_number)));
|
||||
|
||||
let mut parser = Parser::new();
|
||||
parser.add_string_to_replace("\u{a0}", " ");
|
||||
parser.add_string_to_replace("<i>", "");
|
||||
parser.add_string_to_replace("</i>", "");
|
||||
parser.add_string_to_replace("<super>bis</super>", "bis");
|
||||
parser.add_string_to_replace("<super>ter</super>", "ter");
|
||||
parser.add_string_to_replace("<gdash />", "-");
|
||||
parser.add_string_to_replace(
|
||||
"(Anm.: § 69 aufgehoben durch Art. 1 Z 12, BGBl. I Nr. 124/2017)",
|
||||
"<gldsym>§ 69.</gldsym>(Anm.: § 69 aufgehoben durch Art. 1 Z 12, BGBl. I Nr. 124/2017)",
|
||||
);
|
||||
|
||||
test(law_id, &mut builder, parser);
|
||||
}
|
||||
|
||||
//#[test]
|
||||
//fn urhg() {
|
||||
// let law_id = "10001848";
|
||||
// let mut builder = LawBuilder::new("law");
|
||||
// builder.add_classifier(Classifier::new("Hauptstück", Arc::new(&contains)).root());
|
||||
// builder.add_classifier(Classifier::new("Abschnitt", Arc::new(&contains)));
|
||||
// builder.add_classifier(Classifier::new("Number", Arc::new(&starts_with_number)));
|
||||
|
||||
// let mut parser = Parser::new();
|
||||
// parser.add_string_to_replace("<i>.</i>", ".");
|
||||
// parser.add_string_to_replace("<gdash />", "-");
|
||||
// parser.add_string_to_replace(
|
||||
//r#"<//liste><schlussteil ebene="0" art="normal" ct="text">(2) Einer Rundfunksendung steht es gleich, wenn ein Werk von einer im In- oder im Ausland gelegenen Stelle aus der Öffentlichkeit im Inland, ähnlich wie durch Rundfunk, aber mit Hilfe von Leitungen wahrnehmbar gemacht wird.</schlussteil></liste>"#,
|
||||
// r#"<absatz typ="abs" ct="text" halign="j">(2) Einer Rundfunksendung steht es gleich, wenn ein Werk von einer im In- oder im Ausland gelegenen Stelle aus der Öffentlichkeit im Inland, ähnlich wie durch Rundfunk, aber mit Hilfe von Leitungen wahrnehmbar gemacht wird.</absatz>"#,
|
||||
// );
|
||||
// parser.add_string_to_replace("</schlussteil></liste>", "</liste>");
|
||||
|
||||
// test(law_id, &mut builder, parser);
|
||||
//}
|
||||
|
||||
// TODO: 10002296 10002462 20011654 10001622(ABGB)
|
||||
// https://www.ris.bka.gv.at/GeltendeFassung.wxe?Abfrage=Bundesnormen&Gesetzesnummer=10002180
|
||||
|
||||
//#[test]
|
||||
//fn todo() {
|
||||
// let law_id = "";
|
||||
// let mut builder = LawBuilder::new("law");
|
||||
// builder.add_classifier(Classifier::new("Abschnitt", Arc::new(&contains)).root());
|
||||
|
||||
// let mut parser = Parser::new();
|
||||
// parser.add_string_to_remove(r#"<absatz typ="abs" ct="text" halign="j"><i>(§§ 1, 2, 3, 4,6, § 8 Abs. 1 und 2 des Gesetzes vom 16. Februar 1883, RGBl. Nr. 20, betreffend das Verfahren zum Zwecke der Todeserklärung und der Beweisführung des Todes, in der Fassung des Gesetzes vom 31. März 1918, RGBl. Nr. 129:)</i></absatz>"#);
|
||||
|
||||
// test(law_id, &mut builder, parser);
|
||||
//}
|
||||
}
|
||||
|
Reference in New Issue
Block a user