use std::borrow::BorrowMut;
#[derive(Debug, Hash, Eq, PartialEq, Default, Clone)]
pub(crate) struct Term {
raw: String,
}
impl Term {
pub(super) fn new(word: &str) -> Self {
Self {
raw: word.to_owned(),
}
}
pub(super) fn raw(&self) -> &str {
&self.raw
}
}
#[derive(Debug, Clone, Default)]
pub(super) struct TermMetaData {
count: u32,
term_frequencies: Vec<f32>,
tf_idf_score: f32,
}
impl TermMetaData {
pub(super) fn document_frequency(&self) -> usize {
self.term_frequencies().len()
}
pub(super) fn term_frequencies_mut(&mut self) -> &mut Vec<f32> {
self.term_frequencies.borrow_mut()
}
pub(super) fn term_frequencies(&self) -> &[f32] {
&self.term_frequencies
}
pub(super) fn count_mut(&mut self) -> &mut u32 {
self.count.borrow_mut()
}
pub(super) fn count(&self) -> u32 {
self.count
}
pub(super) fn tf_idf_score_mut(&mut self) -> &mut f32 {
self.tf_idf_score.borrow_mut()
}
pub(super) fn tf_idf_score(&self) -> f32 {
self.tf_idf_score
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn nlp_term_accessor_test() {
let term = Term::new("stuff");
assert_eq!(term.raw(), "stuff");
}
#[test]
fn nlp_term_metadata_accessor_test() {
let mut metadata = TermMetaData::default();
*metadata.count_mut() += 1;
assert_eq!(metadata.count(), 1);
metadata.term_frequencies_mut().push(1.0);
assert_eq!(metadata.document_frequency(), 1);
assert_eq!(metadata.term_frequencies().first().unwrap(), &1.0);
*metadata.tf_idf_score_mut() = 1.0_f32;
assert_eq!(metadata.tf_idf_score(), 1.0);
}
}