Crate CFDTCP

source ·
Expand description

这是一个简单判断多个短文本相关性的库。【需提供一个中心点,也就是需要选择一个短文本作为参照】

主要适用于比如:相关文章推荐之后的,各个推荐标题是否过于紧密的判断

流程:

  1. 使用AC自动机,去除停用词。【当然更好的方式是 分词,但是为了提高运行效率,未使用分词】
  2. 使用 one-hot 方式生成各个句子和中心句子的句向量,存储到Bitmap。【更好的是:使用语言模型生成向量】
  3. 计算各个句子向量到中心句之间的距离。
  4. 对计算的距离 统计离散系数,可以看出其 聚合程度
  5. 或者使用Jenks Natural Breaks 聚类,并查找最优的【标准差最小】的簇,簇越多表示越离散,越少越聚合 【更好的是:使用密度聚类算法】

Example

    let centor =  "感冒第二天了,嗓子完全沙哑了,怎么办";
    let list = [
               "感冒咳嗽引起嗓子沙哑",
               "我是感冒引起的嗓子沙哑",
               "感冒咳嗽流鼻涕嗓子沙哑",
               "因感冒引起的嗓子沙哑",
               "感冒引起了嗓子沙哑。完全说不出话来",
               "前几天感冒嗓子有点沙哑",
               "年前感冒引起的嗓子沙哑",
               "我是感冒引起的嗓子沙哑",
               "感冒四天了,嗓子沙哑",
    ];
    let mut cfdtcp = CFDTCP::CFDTCP::new();
    cfdtcp.centor(centor.to_owned()).list(list.to_vec());
    // 获取众位数 距离相同最多的
    // @return (mode,count)
    let mode = cfdtcp.mode().unwrap();
    // 离散系数
    // @return f64
    let distribution = cfdtcp.distribution();
    // 聚类 参数-表示最多计算的簇,比如有9个句子,最多只能分成9簇,越少计算越快,准确度越低
    // @return (usize,Vec)
    let class = cfdtcp.jenks_classify(9);

Modules

Structs

Functions