1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
use std::fs;
use std::path::Path;
use lindera_core::character_definition::CharacterDefinitions;
use lindera_core::connection::ConnectionCostMatrix;
use lindera_core::error::LinderaErrorKind;
use lindera_core::prefix_dict::PrefixDict;
use lindera_core::unknown_dictionary::UnknownDictionary;
use lindera_core::LinderaResult;
fn read_file(path: &Path) -> LinderaResult<Vec<u8>> {
fs::read(path).map_err(|err| {
LinderaErrorKind::Io.with_error(anyhow::anyhow!(
"Failed to read {:?}, error: {:?}",
path,
err
))
})
}
pub fn char_def(dir: &Path) -> LinderaResult<CharacterDefinitions> {
let path = dir.join("char_def.bin");
let data = read_file(&path)?;
CharacterDefinitions::load(data.as_slice())
}
pub fn connection(dir: &Path) -> LinderaResult<ConnectionCostMatrix> {
let path = dir.join("matrix.mtx");
let data = read_file(&path)?;
Ok(ConnectionCostMatrix::load(data.as_slice()))
}
pub fn prefix_dict(dir: &Path) -> LinderaResult<PrefixDict> {
let unidic_data_path = dir.join("dict.da");
let unidic_data = read_file(&unidic_data_path)?;
let unidic_vals_path = dir.join("dict.vals");
let unidic_vals = read_file(&unidic_vals_path)?;
Ok(PrefixDict::from_static_slice(
unidic_data.as_slice(),
unidic_vals.as_slice(),
))
}
pub fn unknown_dict(dir: &Path) -> LinderaResult<UnknownDictionary> {
let path = dir.join("unk.bin");
let data = read_file(&path)?;
UnknownDictionary::load(data.as_slice())
}
pub fn words_idx_data(dir: &Path) -> LinderaResult<Vec<u8>> {
let path = dir.join("dict.wordsidx");
read_file(&path)
}
pub fn words_data(dir: &Path) -> LinderaResult<Vec<u8>> {
let path = dir.join("dict.words");
read_file(&path)
}