Text Info
- Краен срок:
- 25.10.2017 23:00
- Точки:
- 15
Срокът за предаване на решения е отминал
С първата задачка, ще ви накараме да изследвате текст и да ни дадете някаква информация за него. Колко думи или изречения съдържа? Има ли кирилица? Какво емоджи най-добре представя текста? 🤔
Дефинирайте си тип TextInfo
. Няма значение за нас какви полета има, важното е да има асоцииран метод new
, който приема &str
. Примерна дефиниция може да изглежда така:
pub struct TextInfo {
// каквито полета смятате, че ви трябват
}
impl TextInfo {
pub fn new(s: &str) -> Self {
// инициализирайте каквото ви трябва от подадения &str
}
}
Освен асоциирания new
метод, който ще използваме, за да си алокираме TextInfo
, очакваме този тип да отговаря на следните методи:
pub fn char_count(&self) -> usize
Броя на символите в текста. Забележете, че говорим за "char"-ове, не за байтове.
pub fn alphabetic_count(&self) -> usize
Броя на буквите в текста. Това включва букви от латинската азбука или (българския subset на) кирилицата. Приемете, че това ще са единствените две азбуки, с които ще тестваме. Не се включват числа, или пунктуация.
pub fn latin_letter_count(&self) -> usize
Броя на буквите на латиница в текста. Не се включват нито числа, нито пунктуация.
pub fn cyrillic_letter_count(&self) -> usize
Броя на буквите на (българския subset на) кирилица в текста. Не се включват нито числа, нито пунктуация. Ако искате да поддържате не-само-българска кирилица, неща като Э или Ы, може да го направите, но няма да имаме такива низове в тестовете.
pub fn word_count(&self) -> usize
Броя на думите в текста. "Думи" са просто поредица от букви (кирилица/латиница), разделени от не-букви. Примери:
-
Баба,дядо
са две думи -
Баба и дядо
са три думи -
~*_1-баба-x-дядо-1_*~
са три думи ("баба", "x", "дядо")
pub fn sentence_count(&self) -> usize
Колко на брой изречения има в текста?
"Изречение" се дефинира като поредица от не-пунктуационни символи (поне един), която е последвана от един или повече пунктуационни символи: "?", "!", ".". Приемете, че тези поредици от символи са единствената пунктуация, която ни интересува като броим изречения.
Примери за изречения:
-
One, two, and three!
-> 1 изречение -
Huh? What's this??
-> 2 изречения -
Hmm... Hm, Hm, Hmm.
-> 2 изречения
pub fn emotion(&self) -> String
Каква е overall емоцията на текста?
Искаме да напишете невронна мрежа, тренирана с данни от интернет форуми, която да прави sentiment analysis... Всъщност не, просто бройте изречения, които завършват на определена пунктуация.
- Изречение, което завършва на "!" → 😮 (Face with open mouth)
- Изречение, което завършва на "?" → 🤔 (Thinking face)
- Изречение, което завършва на "." → 😐 (Neutral face)
Пребройте емоциите.
- Ако има повече 😮 от другите две емоции, върнете
String
със съдържание "😮". - Ако има повече 🤔 от другите две емоции, върнете
String
със съдържание "🤔". - Иначе, върнете
String
със съдържание "😐".
За целите на задачата, повторена пунктуация в рамките на едно изречение се брои за една "емоция". Тоест, в този пример:
"Compiler error!! Oh, no... What just happened?"
Имаме "!!", което се превежда до едно-единствено 😮. Имаме "...", което значи едно 😐. Имаме и "?", което си е 🤔. Общия емоционален баланс е 1:1:1 -- тъй като нито една не е по-голяма от останалите две, връщаме 😐.
За комбинации от терминиращи пунктуационни символи, като "?!?", няма да проверяваме. Ако искате да имплементирате специално решение за този случай, направете го, но няма да имаме тестове за него.
Внимавайте всички типове и методи, които ни трябват, да бъдат маркирани като pub
, за да могат тестовете ни да ги викат. Прочетете и общия guide за писане на домашни.
Задължително прочетете (или си припомнете): Указания за предаване на домашни