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

一、准备工作

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

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

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值