Improve omedeto. Detect feminine by verbs.

This commit is contained in:
AB
2020-12-30 15:12:17 +03:00
parent 0812c9e371
commit 39640139fa
2 changed files with 42 additions and 17 deletions

View File

@@ -166,7 +166,7 @@ pub(crate) async fn omedeto(api: Api, message: Message, mystem: &mut MyStem) ->
verbs_p.sort(); verbs_p.sort();
verbs_p.dedup(); verbs_p.dedup();
verbs_p.shuffle(&mut rand::thread_rng()); verbs_p.shuffle(&mut rand::thread_rng());
debug!("Found {} nouns. {:#?}", verbs_p.len(), verbs_p); debug!("Found {} past verbs. {:#?}", verbs_p.len(), verbs_p);
let mut verbs_i: Vec<String> = all_msg let mut verbs_i: Vec<String> = all_msg
.clone() .clone()
@@ -200,13 +200,13 @@ pub(crate) async fn omedeto(api: Api, message: Message, mystem: &mut MyStem) ->
verbs_i.sort(); verbs_i.sort();
verbs_i.dedup(); verbs_i.dedup();
verbs_i.shuffle(&mut rand::thread_rng()); verbs_i.shuffle(&mut rand::thread_rng());
debug!("Found {} nouns. {:#?}", verbs_i.len(), verbs_i); debug!("Found {} inpresent verbs. {:#?}", verbs_i.len(), verbs_i);
if nouns.is_empty() { if nouns.is_empty() {
nouns.push(message.from.first_name.to_string()); nouns.push(message.from.first_name.to_string());
} }
let start: Vec<String> = vec![ let start: Vec<String> = vec![
"С новыйм годом.".into(), "С новым годом".into(),
"С НГ тебя".into(), "С НГ тебя".into(),
"Поздравляю".into(), "Поздравляю".into(),
"Поздравляю с НГ".into(), "Поздравляю с НГ".into(),
@@ -216,27 +216,53 @@ pub(crate) async fn omedeto(api: Api, message: Message, mystem: &mut MyStem) ->
"[СЕКРЕТНО]".into(), "[СЕКРЕТНО]".into(),
"[НЕТ ДАННЫХ]".into(), "[НЕТ ДАННЫХ]".into(),
"[ОШИБКА ДОСТУПА]".into(), "[ОШИБКА ДОСТУПА]".into(),
"[XXXX]".into(),
]; ];
//debug!("Nouns: {:#?}", nouns); //debug!("Nouns: {:#?}", nouns);
//debug!("Verbs: {:#?}", verbs); //debug!("Verbs: {:#?}", verbs);
let fem = { let fem = {
let z = mystem let mut fm = 0;
.stemming(message.from.first_name.to_string()) let mut mu = 0;
.unwrap(); all_msg
debug!("{:#?}", z); .clone()
if z.is_empty() { .into_iter()
false .filter(|m| re.is_match(m))
} else if z[0].lex.is_empty() { .map(|m| m.split(' ').map(|s| s.to_string()).collect::<Vec<String>>()[1].clone())
false .map(|m| {
let stem = mystem.stemming(m.clone()).unwrap_or_default();
if stem.is_empty() {
()
} else if stem[0].lex.is_empty() {
()
} else {
match stem[0].lex[0].grammem.part_of_speech {
mystem::PartOfSpeech::Verb => {
if stem[0].lex[0]
.grammem
.facts
.contains(&mystem::Fact::Gender(Feminine)) &&
stem[0].lex[0]
.grammem
.facts
.contains(&mystem::Fact::Tense(Past))
{
fm = fm + 1;
} else {
mu = mu + 1;
}
}
_ => (),
}
}
}).collect::<()>();
debug!("fm - {}, mu - {}", fm, mu);
if fm >= mu {
true
} else { } else {
z[0].lex[0] false
.grammem
.facts
.contains(&mystem::Fact::Gender(Feminine))
} }
}; };
debug!("Is Feminine - {}", fem);
let result = format!( let result = format!(
"{} {} известн{} как {}, {}, а так же конечно {}. В прошедшем году ты часто давал{} нам знать, что ты {}, {} и {}. Нередко ты говорил{} я {}, я {} или даже я {}. =*", "{} {} известн{} как {}, {}, а так же конечно {}. В прошедшем году ты часто давал{} нам знать, что ты {}, {} и {}. Нередко ты говорил{} я {}, я {} или даже я {}. =*",
start.choose(&mut rand::thread_rng()).unwrap(), start.choose(&mut rand::thread_rng()).unwrap(),

View File

@@ -29,7 +29,6 @@ pub async fn handler(
let cleaned_message = data let cleaned_message = data
.to_string() .to_string()
.replace(&format!("@{}", me.username.unwrap()), ""); .replace(&format!("@{}", me.username.unwrap()), "");
debug!("{}", cleaned_message);
match cleaned_message.as_str() { match cleaned_message.as_str() {
"/here" => commands::here(api, message).await?, "/here" => commands::here(api, message).await?,
"/top" => commands::top(api, message).await?, "/top" => commands::top(api, message).await?,