您的位置:首页 > 其它

Rust : 红楼梦一书中文字符的统计

2017-10-29 21:57 162 查看
一、准备工作

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);
}


你可以看到不同字符串出现的频率了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐