uiuifree_normalize/
lib.rs1use kana::wide2ascii;
2use regex::Regex;
3use voca_rs::*;
4use lazy_static::lazy_static; pub 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 = re_value.replace(" ", " ")
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 return wide2ascii(value.replace(" ", " ").as_str());
61}
62
63pub fn space(value: String) -> String {
64 return value.replace(" ", " ").as_str().to_string();
66}
67
68
69pub fn address_text(value: String) -> String {
70 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}