This commit is contained in:
2026-08-04 13:06:50 -06:00
parent 5a6cb93bab
commit a2404d294e
18 changed files with 1123 additions and 22 deletions
+52
View File
@@ -0,0 +1,52 @@
pub mod models;
pub mod schema;
pub mod db;
use flate2::read::GzDecoder;
use indicatif::ProgressBar;
use serde_json::Value;
use wiktionary_schema::en::WordData;
use std::{fs::File, io::{self, BufRead, BufReader}, path::PathBuf};
use clap::Parser;
/// Build an SQLite database from a Wiktextract JSONLines dump.
#[derive(Parser, Debug)]
#[command(name = "make-db", version, about, long_about = None)]
struct Args {
/// Input file
#[clap(long, value_parser)]
wiktextract_dump : PathBuf,
/// Output file
#[clap(long, value_parser)]
database : Option<PathBuf>,
}
fn open_wiktextract_dump (path : PathBuf) -> Result<
BufReader<GzDecoder<File>>, io::Error
> {
Ok (BufReader::new (GzDecoder::new (File::open (path)?)))
}
#[allow(nonstandard_style)]
const wiktextract_dump_lines : u64 = 10736399;
fn main() -> Result<(), String> {
let args = Args::parse ();
let d = open_wiktextract_dump (args.wiktextract_dump).unwrap ();
let bar = ProgressBar::new (wiktextract_dump_lines);
let conn = &mut db::connect ();
for i in d.lines () {
if let Ok (word) = serde_json::from_str::<Value> (
&i.expect ("entry")
) {
bar.println (db::entry_as_word (&word).map_or ("", |x| x));
db::insert_word (conn, word);
bar.inc (1);
}
}
bar.finish ();
Ok (())
}