Search in sources :

Example 61 with Word

use of ai.elimu.model.content.Word in project webapp by elimu-ai.

the class AudioCreateController method getEmojisByWordId.

private Map<Long, String> getEmojisByWordId() {
    logger.info("getEmojisByWordId");
    Map<Long, String> emojisByWordId = new HashMap<>();
    for (Word word : wordDao.readAll()) {
        String emojiGlyphs = "";
        List<Emoji> emojis = emojiDao.readAllLabeled(word);
        for (Emoji emoji : emojis) {
            emojiGlyphs += emoji.getGlyph();
        }
        if (StringUtils.isNotBlank(emojiGlyphs)) {
            emojisByWordId.put(word.getId(), emojiGlyphs);
        }
    }
    return emojisByWordId;
}
Also used : Word(ai.elimu.model.content.Word) HashMap(java.util.HashMap) Emoji(ai.elimu.model.content.Emoji)

Example 62 with Word

use of ai.elimu.model.content.Word in project webapp by elimu-ai.

the class AudioEditController method handleRemoveContentLabelRequest.

@RequestMapping(value = "/{id}/remove-content-label", method = RequestMethod.POST)
@ResponseBody
public String handleRemoveContentLabelRequest(HttpServletRequest request, @PathVariable Long id) {
    logger.info("handleRemoveContentLabelRequest");
    logger.info("id: " + id);
    Audio audio = audioDao.read(id);
    String letterIdParameter = request.getParameter("letterId");
    logger.info("letterIdParameter: " + letterIdParameter);
    if (StringUtils.isNotBlank(letterIdParameter)) {
        Long letterId = Long.valueOf(letterIdParameter);
        Letter letter = letterDao.read(letterId);
        Set<Letter> letters = audio.getLetters();
        Iterator<Letter> iterator = letters.iterator();
        while (iterator.hasNext()) {
            Letter existingLetter = iterator.next();
            if (existingLetter.getId().equals(letter.getId())) {
                iterator.remove();
            }
        }
        audio.setRevisionNumber(audio.getRevisionNumber() + 1);
        audioDao.update(audio);
    }
    String numberIdParameter = request.getParameter("numberId");
    logger.info("numberIdParameter: " + numberIdParameter);
    if (StringUtils.isNotBlank(numberIdParameter)) {
        Long numberId = Long.valueOf(numberIdParameter);
        Number number = numberDao.read(numberId);
        Set<Number> numbers = audio.getNumbers();
        Iterator<Number> iterator = numbers.iterator();
        while (iterator.hasNext()) {
            Number existingNumber = iterator.next();
            if (existingNumber.getId().equals(number.getId())) {
                iterator.remove();
            }
        }
        audio.setRevisionNumber(audio.getRevisionNumber() + 1);
        audioDao.update(audio);
    }
    String wordIdParameter = request.getParameter("wordId");
    logger.info("wordIdParameter: " + wordIdParameter);
    if (StringUtils.isNotBlank(wordIdParameter)) {
        Long wordId = Long.valueOf(wordIdParameter);
        Word word = wordDao.read(wordId);
        Set<Word> words = audio.getWords();
        Iterator<Word> iterator = words.iterator();
        while (iterator.hasNext()) {
            Word existingWord = iterator.next();
            if (existingWord.getId().equals(word.getId())) {
                iterator.remove();
            }
        }
        audio.setRevisionNumber(audio.getRevisionNumber() + 1);
        audioDao.update(audio);
    }
    return "success";
}
Also used : Letter(ai.elimu.model.content.Letter) Word(ai.elimu.model.content.Word) Number(ai.elimu.model.content.Number) Audio(ai.elimu.model.content.multimedia.Audio) RequestMapping(org.springframework.web.bind.annotation.RequestMapping) ResponseBody(org.springframework.web.bind.annotation.ResponseBody)

Example 63 with Word

use of ai.elimu.model.content.Word in project webapp by elimu-ai.

the class EmojiEditController method getEmojisByWordId.

private Map<Long, String> getEmojisByWordId() {
    logger.info("getEmojisByWordId");
    Map<Long, String> emojisByWordId = new HashMap<>();
    for (Word word : wordDao.readAll()) {
        String emojiGlyphs = "";
        List<Emoji> emojis = emojiDao.readAllLabeled(word);
        for (Emoji emoji : emojis) {
            emojiGlyphs += emoji.getGlyph();
        }
        if (StringUtils.isNotBlank(emojiGlyphs)) {
            emojisByWordId.put(word.getId(), emojiGlyphs);
        }
    }
    return emojisByWordId;
}
Also used : Word(ai.elimu.model.content.Word) HashMap(java.util.HashMap) Emoji(ai.elimu.model.content.Emoji)

Example 64 with Word

use of ai.elimu.model.content.Word in project webapp by elimu-ai.

the class LetterSoundCorrespondenceEditController method handleRequest.

@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public String handleRequest(Model model, @PathVariable Long id) {
    logger.info("handleRequest");
    LetterSoundCorrespondence letterSoundCorrespondence = letterSoundCorrespondenceDao.read(id);
    model.addAttribute("letterSoundCorrespondence", letterSoundCorrespondence);
    model.addAttribute("timeStart", System.currentTimeMillis());
    List<Letter> letters = letterDao.readAllOrdered();
    model.addAttribute("letters", letters);
    List<Sound> sounds = soundDao.readAllOrdered();
    model.addAttribute("sounds", sounds);
    model.addAttribute("letterSoundCorrespondenceContributionEvents", letterSoundCorrespondenceContributionEventDao.readAll(letterSoundCorrespondence));
    model.addAttribute("letterSoundCorrespondencePeerReviewEvents", letterSoundCorrespondencePeerReviewEventDao.readAll(letterSoundCorrespondence));
    List<Word> words = wordDao.readAllOrderedByUsage();
    model.addAttribute("words", words);
    return "content/letter-sound-correspondence/edit";
}
Also used : Letter(ai.elimu.model.content.Letter) Word(ai.elimu.model.content.Word) Sound(ai.elimu.model.content.Sound) LetterSoundCorrespondence(ai.elimu.model.content.LetterSoundCorrespondence) RequestMapping(org.springframework.web.bind.annotation.RequestMapping)

Example 65 with Word

use of ai.elimu.model.content.Word in project webapp by elimu-ai.

the class SyllableUsageCountScheduler method execute.

// At 07:30 every morning
@Scheduled(cron = "00 30 07 * * *")
public synchronized void execute() {
    logger.info("execute");
    logger.info("Calculating usage count for Syllables");
    Map<String, Integer> syllableFrequencyMap = new HashMap<>();
    Language language = Language.valueOf(ConfigHelper.getProperty("content.language"));
    List<StoryBook> storyBooks = storyBookDao.readAllOrdered();
    logger.info("storyBooks.size(): " + storyBooks.size());
    for (StoryBook storyBook : storyBooks) {
        logger.info("storyBook.getTitle(): " + storyBook.getTitle());
        List<String> paragraphs = new ArrayList<>();
        List<StoryBookChapter> storyBookChapters = storyBookChapterDao.readAll(storyBook);
        for (StoryBookChapter storyBookChapter : storyBookChapters) {
            List<StoryBookParagraph> storyBookParagraphs = storyBookParagraphDao.readAll(storyBookChapter);
            for (StoryBookParagraph storyBookParagraph : storyBookParagraphs) {
                paragraphs.add(storyBookParagraph.getOriginalText());
            }
        }
        Map<String, Integer> syllableFrequencyMapForBook = SyllableFrequencyHelper.getSyllableFrequency(paragraphs, language);
        syllableFrequencyMapForBook.keySet().forEach(syllableText -> syllableFrequencyMap.put(syllableText, syllableFrequencyMap.getOrDefault(syllableText, 0) + syllableFrequencyMapForBook.get(syllableText)));
    }
    logger.info("syllableFrequencyMap: " + syllableFrequencyMap);
    for (String syllableText : syllableFrequencyMap.keySet()) {
        // Skip syllables that are actual words
        // TODO: add logic to Word editing
        Word word = wordDao.readByText(syllableText);
        if (word != null) {
            continue;
        }
        // TODO: add support for trigrams
        if (syllableText.length() != 2) {
            continue;
        }
        Syllable existingSyllable = syllableDao.readByText(syllableText);
        if (existingSyllable == null) {
            Syllable syllable = new Syllable();
            syllable.setTimeLastUpdate(Calendar.getInstance());
            syllable.setText(syllableText);
            syllable.setUsageCount(syllableFrequencyMap.get(syllableText));
            syllableDao.create(syllable);
        } else {
            existingSyllable.setUsageCount(syllableFrequencyMap.get(syllableText));
            syllableDao.update(existingSyllable);
        }
    }
    logger.info("execute complete");
}
Also used : StoryBookChapter(ai.elimu.model.content.StoryBookChapter) StoryBook(ai.elimu.model.content.StoryBook) Word(ai.elimu.model.content.Word) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) StoryBookParagraph(ai.elimu.model.content.StoryBookParagraph) Language(ai.elimu.model.v2.enums.Language) Syllable(ai.elimu.model.content.Syllable) Scheduled(org.springframework.scheduling.annotation.Scheduled)

Aggregations

Word (ai.elimu.model.content.Word)88 RequestMapping (org.springframework.web.bind.annotation.RequestMapping)40 HashMap (java.util.HashMap)23 Emoji (ai.elimu.model.content.Emoji)22 ArrayList (java.util.ArrayList)20 Number (ai.elimu.model.content.Number)17 Letter (ai.elimu.model.content.Letter)15 Test (org.junit.Test)12 Image (ai.elimu.model.content.multimedia.Image)11 StoryBookParagraph (ai.elimu.model.content.StoryBookParagraph)9 JSONArray (org.json.JSONArray)9 JSONObject (org.json.JSONObject)9 Contributor (ai.elimu.model.Contributor)8 Language (ai.elimu.model.v2.enums.Language)8 IOException (java.io.IOException)8 LetterSoundCorrespondence (ai.elimu.model.content.LetterSoundCorrespondence)7 Audio (ai.elimu.model.content.multimedia.Audio)7 Contributor (ai.elimu.model.contributor.Contributor)7 WordContributionEvent (ai.elimu.model.contributor.WordContributionEvent)7 WordGson (ai.elimu.model.v2.gson.content.WordGson)7