implemented deduplication and deduplicated dictionaty
This commit is contained in:
parent
b25da1b84b
commit
53ebe77935
516
reparsed.txt
516
reparsed.txt
File diff suppressed because it is too large
Load Diff
|
@ -2,12 +2,19 @@ use std::fs;
|
||||||
use std::fs::OpenOptions;
|
use std::fs::OpenOptions;
|
||||||
use std::io::prelude::*;
|
use std::io::prelude::*;
|
||||||
|
|
||||||
|
#[derive(PartialEq)]
|
||||||
struct Entry {
|
struct Entry {
|
||||||
hieroglyph: String,
|
hieroglyph: String,
|
||||||
reading: String,
|
reading: String,
|
||||||
translation: String,
|
translation: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl std::clone::Clone for Entry {
|
||||||
|
fn clone(&self) -> Self {
|
||||||
|
Self { hieroglyph: self.hieroglyph.clone(), reading: self.reading.clone(), translation: self.translation.clone() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl std::fmt::Display for Entry {
|
impl std::fmt::Display for Entry {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||||
write!(
|
write!(
|
||||||
|
@ -65,13 +72,40 @@ fn read_and_parse(path: &String) -> Vec<Entry> {
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn deduplicate (entries: &Vec<Entry>) -> Vec<Entry>{
|
||||||
|
|
||||||
|
let mut deduplicated:Vec<Entry> = Vec::new();
|
||||||
|
|
||||||
|
for entry in entries.iter() {
|
||||||
|
let mut is_dup = false;
|
||||||
|
|
||||||
|
for e in deduplicated.iter() {
|
||||||
|
if e.hieroglyph == entry.hieroglyph {
|
||||||
|
is_dup = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if is_dup {
|
||||||
|
let pos = deduplicated.iter().position(|x| x.hieroglyph == entry.hieroglyph).unwrap();
|
||||||
|
deduplicated[pos].translation += &(String::from(" ; ") + &entry.translation);
|
||||||
|
} else {
|
||||||
|
deduplicated.push(entry.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
deduplicated
|
||||||
|
}
|
||||||
|
|
||||||
pub fn import(path: &String) {
|
pub fn import(path: &String) {
|
||||||
let mut output = OpenOptions::new()
|
let mut output = OpenOptions::new()
|
||||||
.write(true)
|
.write(true)
|
||||||
.append(true)
|
.append(true)
|
||||||
.open("./reparsed-test.txt")
|
.open("./reparsed-test.txt")
|
||||||
.unwrap();
|
.unwrap();
|
||||||
for entry in read_and_parse(path) {
|
let dictionary = read_and_parse(path);
|
||||||
|
let dictionary = deduplicate(&dictionary);
|
||||||
|
for entry in dictionary {
|
||||||
if let Err(e) = writeln!(
|
if let Err(e) = writeln!(
|
||||||
output,
|
output,
|
||||||
"({}) [{}] {{{}}}",
|
"({}) [{}] {{{}}}",
|
||||||
|
|
Loading…
Reference in New Issue