Skip to main content

uiuifree_normalize/
lib.rs

1use kana::wide2ascii;
2use regex::Regex;
3use voca_rs::*;
4use lazy_static::lazy_static; // 1.3.0
5
6pub fn normalize_search_text(value: String) -> String {
7    remove_html(value).replace("・", "")
8        .replace("株式会会社", "株式会社")
9        .replace("社会福祉法人", "")
10}
11
12pub fn normalize_search_address(value: String) -> String {
13    address_text(value).replace("丁目", "-")
14        .replace("−", "-")
15        .replace("番地の", "-")
16        .replace("番地", "-")
17        .replace("番", "-")
18        .replace("号", "").trim_matches('-').to_string()
19}
20
21lazy_static! {
22    static ref RE_NN: Regex = Regex::new(r"\n\n+").unwrap();
23    static ref RE_SPACE: Regex = Regex::new(r"(\n(\s*|\n+)\n+(\s*))|(\n\s*)").unwrap();
24    static ref RE_MULTI_SPACE: Regex = Regex::new(r"(\s\s+)").unwrap();
25    static ref REGIX_REPLACE_SPACE: Regex = Regex::new(r"([\t ])").unwrap();
26
27}
28
29
30pub fn replace_good_space(value: String) -> String {
31    let value = REGIX_REPLACE_SPACE.replace_all(value.as_str(), " ").to_string();
32    RE_MULTI_SPACE.replace_all(value.as_str(), " ").to_string()
33}
34
35pub fn remove_multi_space(value: String) -> String {
36    return RE_MULTI_SPACE.replace_all(value.as_str(), " ").to_string();
37}
38
39pub fn remove_space(value: String) -> String {
40    return RE_SPACE.replace_all(value.as_str(), "\n").to_string();
41}
42
43pub fn remove_html(value: String) -> String {
44    let mut re_value = strip::strip_tags(value.as_str()).to_string();
45
46    // re_value = Regex::new(r"</[^>]*?>").unwrap()
47    //     .replace(caps.as_str(), "").to_string();
48
49    re_value = re_value.replace("&nbsp;", " ")
50        .replace("?", " ")
51        .replace(" ", " ")
52        .replace("\t", " ")
53        .replace("\n \n", "\n\n");
54
55    return RE_NN.replace_all(re_value.as_str(), "\n\n").to_string();
56}
57
58pub fn free_text(value: String) -> String {
59    // 全角を半角に統一
60    return wide2ascii(value.replace(" ", " ").as_str());
61}
62
63pub fn space(value: String) -> String {
64    // 全角を半角に統一
65    return value.replace(" ", " ").as_str().to_string();
66}
67
68
69pub fn address_text(value: String) -> String {
70    // 全角を半角に統一
71    return wide2ascii(value.replace(" ", " ").as_str())
72
73        .replace("一", "1")
74        .replace("二", "2")
75        .replace("三", "3")
76        .replace("四", "4")
77        .replace("五", "5")
78        .replace("六", "6")
79        .replace("七", "7")
80        .replace("八", "8")
81        .replace("九", "9")
82        .replace("〇", "10").trim().to_string();
83}
84
85
86#[cfg(test)]
87mod tests {
88    use crate::{free_text, remove_html};
89
90    #[test]
91    fn it_remove_html() {
92        assert_eq!(remove_html(String::from("<div>a?</div>")), "a ");
93    }
94
95    #[test]
96    fn it_works()
97    {
98        assert!("test hoge".contains("hoge"));
99        assert_eq!(free_text(String::from("()")), "()");
100        assert_eq!(free_text(String::from("123ABC")), "123ABC");
101        assert_eq!(free_text(String::from("全 角")), "全 角");
102        assert_eq!(free_text(String::from("AAa1234")), "AAa1234");
103    }
104}