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;
}
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";
}
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;
}
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";
}
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");
}
Aggregations