一、准备工作
1、相关的库
因为红书中大部分是中文字符,标准库中目前还无法直接处理。因此,在进行分析前,在toml文件中的依赖库中,添加一下以下:
encoding = "0.2"
具体可参考以下资料:
https://github.com/lifthrasiir/rust-encoding
2、红楼梦一书的txt文件。直接找度娘。
二、相关代码
extern crate encoding;
use encoding::{Encoding, DecoderTrap};
use encoding::all::GB18030; //可以转成汉字的字库
fn main() {
let mut f = File::open("C:\\Users\\Desktop\\redstory.txt")
.ok()
.expect("file read error!");
let mut hp: HashMap<char, i32> = HashMap::new();
let mut reader: Vec<u8> = Vec::new();//u8集
f.read_to_end(&mut reader).ok().expect("can not read file");
let mut content = String::new();//字符串
GB18030.decode_to(&mut reader, DecoderTrap::Ignore, &mut content);
for c in content.chars() {
let counter = hp.entry(c).or_insert(0);
*counter += 1;
}
println!("hp:{:?}", hp);
}
或main{}中以下代码可以改一下:
extern crate encoding;
use encoding::{Encoding, DecoderTrap};
use encoding::all::GB18030; //可以转成汉字的字库
fn main() {
let mut f = File::open("C:\\Users\\Desktop\\redstory.txt")
.ok()
.expect("file read error!");
let mut reader: Vec<u8> = Vec::new();
let mut hp: HashMap<char, i32> = HashMap::new();
f.read_to_end(&mut reader).ok().expect("can not read file");
let content:String = GB18030.decode(&reader, DecoderTrap::Strict).unwrap();
for d in content.chars() {
let counter = hp.entry(d).or_insert(0);
*counter += 1;
}
println!("hp :{:?}", hp);
}
你可以看到不同字符串出现的频率了。