interslavic_rs/
dictionary_initialization.rs

1use 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        // Open the CSV file
38        let file = File::open(isv_words).unwrap();
39        let reader = BufReader::new(file);
40
41        // Create a CSV reader
42        let mut csv_reader = ReaderBuilder::new().has_headers(true).from_reader(reader);
43
44        // Create a vector to hold words that are m.anim
45        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        // Iterate through the records
51        for result in csv_reader.deserialize() {
52            let record: WordEntry = result.unwrap();
53
54            //make sure its not a verb
55            if !record.part_of_speech.contains("v.") {
56                // Check if the partOfSpeech is "m.anim"
57                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}