interslavic_rs/
dictionary_initialization.rs1use crate::*;
2use csv::ReaderBuilder;
3use serde::Deserialize;
4
5use std::fs::File;
6use std::io::BufReader;
7
8#[derive(Debug, Default, Deserialize)]
9struct WordEntry {
10 id: i64,
11 isv: String,
12 addition: String,
13 #[serde(rename = "partOfSpeech")]
14 part_of_speech: String,
15
16 en: String,
17
18 ru: String,
19 be: String,
20 uk: String,
21 pl: String,
22 cs: String,
23 sk: String,
24 sl: String,
25 hr: String,
26 sr: String,
27 mk: String,
28 bg: String,
29 cu: String,
30 de: String,
31 nl: String,
32 eo: String,
33}
34
35impl ISV {
36 pub fn initialize_dictionary(&mut self, isv_words: &str) {
37 let file = File::open(isv_words).unwrap();
39 let reader = BufReader::new(file);
40
41 let mut csv_reader = ReaderBuilder::new().has_headers(true).from_reader(reader);
43
44 let mut m_anim_words: Vec<String> = Vec::new();
46 let mut m_nonanim_words: Vec<String> = Vec::new();
47 let mut f_words: Vec<String> = Vec::new();
48 let mut n_words: Vec<String> = Vec::new();
49
50 for result in csv_reader.deserialize() {
52 let record: WordEntry = result.unwrap();
53
54 if !record.part_of_speech.contains("v.") {
56 if record.part_of_speech.contains("m.anim.") {
58 m_anim_words.push(record.isv.to_lowercase());
59 } else if record.part_of_speech.contains("m.") {
60 m_nonanim_words.push(record.isv.to_lowercase());
61 } else if record.part_of_speech.contains("f.") {
62 f_words.push(record.isv.to_lowercase());
63 } else if record.part_of_speech.contains("n.") {
64 n_words.push(record.isv.to_lowercase());
65 }
66 }
67 }
68 println!("{:#?}", m_anim_words);
69
70 self.animate_nouns = m_anim_words;
71 self.nonanimate_nouns = m_nonanim_words;
72 self.feminine_nouns = f_words;
73 self.neuter_nouns = n_words;
74 }
75}