#document #text-document #tf-idf #text #statistics #object

rust-tfidf

用于计算通用文档的 TF-IDF(词频-逆文档频率)的库

5 个稳定版本

使用旧的 Rust 2015

1.1.1 2021年5月18日
1.1.0 2020年12月18日
1.0.4 2016年2月3日
1.0.3 2015年12月10日
1.0.0 2015年4月14日

#430文本处理

每月 28 次下载
pbd 中使用

MIT/Apache

21KB
376

Rust TF-IDF

Build Status

用于计算通用文档的 TF-IDF(词频-逆文档频率)的库。该库提供了对实现某些文档特性(NaiveDocumentProcessedDocumentExpandableDocument)的对象进行操作的策略。

有关已实现的策略的更多信息,请参阅 维基百科

文档类型

文档被定义为术语的集合。文档不假设术语类型(术语不会被任何方式进行归一化)。

这些文档类型是我设计的。术语不是标准的,但它们相当直观易懂。

  • NaiveDocument - 如果一个文档只知道一个术语是否包含在其中,但不知道包含了多少个术语实例,则该文档是 'naive'。

  • ProcessedDocument - 如果一个文档知道包含了多少个每个术语的实例,则该文档是 'processed'。

  • ExpandableDocument - 如果一个文档提供了一种访问其中包含的每个术语的方式,则该文档是 'expandable'。

示例

计算文档的 TfIdf 的最简单方法是使用默认实现。注意,该库为 Vec<(T, usize)> 提供了 ProcessedDocument 的实现。

use tfidf::{TfIdf, TfIdfDefault};

let mut docs = Vec::new();
let doc1 = vec![("a", 3), ("b", 2), ("c", 4)];
let doc2 = vec![("a", 2), ("d", 5)];

docs.push(doc1);
docs.push(doc2);

assert_eq!(0f64, TfIdfDefault::tfidf("a", &docs[0], docs.iter()));
assert!(TfIdfDefault::tfidf("c", &docs[0], docs.iter()) > 0.5);

您还可以使用库中包含的一些策略来创建自己的策略以计算 tf-idf。

use tfidf::{TfIdf, ProcessedDocument};
use tfidf::tf::{RawFrequencyTf};
use tfidf::idf::{InverseFrequencySmoothIdf};

#[derive(Copy, Clone)] struct MyTfIdfStrategy;

impl<T> TfIdf<T> for MyTfIdfStrategy where T : ProcessedDocument {
  type Tf = RawFrequencyTf;
  type Idf = InverseFrequencySmoothIdf; 
}

let mut docs = Vec::new();
let doc1 = vec![("a", 3), ("b", 2), ("c", 4)];
let doc2 = vec![("a", 2), ("d", 5)];

docs.push(doc1);
docs.push(doc2);

assert!(MyTfIdfStrategy::tfidf("a", &docs[0], docs.iter()) > 0f64);
assert!(MyTfIdfStrategy::tfidf("c", &docs[0], docs.iter()) > 0f64);

许可证

根据以下任一许可证发布

根据您的选择。

贡献

除非您明确表示不适用,否则根据Apache-2.0许可协议定义的,您有意提交并包含在工作中的任何贡献,将如上双许可,无需任何额外的条款或条件。

无运行时依赖