use std::collections::HashMap;
mod rake_logic;
pub mod rake_params;
use rake_logic::RakeLogic;
pub use rake_params::RakeParams;
use crate::common::{get_ranked_scores, get_ranked_strings};
pub struct Rake {
word_scores: HashMap<String, f32>,
phrase_scores: HashMap<String, f32>,
}
impl Rake {
pub fn new(params: RakeParams) -> Self {
let (text, stopwords, punctuation, phrase_len) = params.get_rake_params();
let (word_scores, phrase_scores) =
RakeLogic::build_rake(text, stopwords, punctuation, phrase_len);
Self {
phrase_scores,
word_scores,
}
}
pub fn get_ranked_keyword(&self, n: usize) -> Vec<String> {
get_ranked_strings(&self.word_scores, n)
}
pub fn get_ranked_keyword_scores(&self, n: usize) -> Vec<(String, f32)> {
get_ranked_scores(&self.word_scores, n)
}
pub fn get_ranked_phrases(&self, n: usize) -> Vec<String> {
get_ranked_strings(&self.phrase_scores, n)
}
pub fn get_ranked_phrases_scores(&self, n: usize) -> Vec<(String, f32)> {
get_ranked_scores(&self.phrase_scores, n)
}
pub fn get_keyword_score(&self, word: &str) -> f32 {
*self.word_scores.get(word).unwrap_or(&0.0)
}
pub fn get_phrase_score(&self, phrase: &str) -> f32 {
*self.phrase_scores.get(phrase).unwrap_or(&0.0)
}
pub fn get_word_scores_map(&self) -> &HashMap<String, f32> {
&self.word_scores
}
pub fn get_phrase_scores_map(&self) -> &HashMap<String, f32> {
&self.phrase_scores
}
}