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 中使用
21KB
376 行
Rust TF-IDF
用于计算通用文档的 TF-IDF(词频-逆文档频率)的库。该库提供了对实现某些文档特性(NaiveDocument
、ProcessedDocument
、ExpandableDocument
)的对象进行操作的策略。
有关已实现的策略的更多信息,请参阅 维基百科。
文档类型
文档被定义为术语的集合。文档不假设术语类型(术语不会被任何方式进行归一化)。
这些文档类型是我设计的。术语不是标准的,但它们相当直观易懂。
-
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 License, Version 2.0, (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- 麻省理工学院许可协议(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
根据您的选择。
贡献
除非您明确表示不适用,否则根据Apache-2.0许可协议定义的,您有意提交并包含在工作中的任何贡献,将如上双许可,无需任何额外的条款或条件。