-
-
Notifications
You must be signed in to change notification settings - Fork 71
Expand file tree
/
Copy pathLetterUsageCountScheduler.java
More file actions
76 lines (63 loc) · 2.73 KB
/
LetterUsageCountScheduler.java
File metadata and controls
76 lines (63 loc) · 2.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package ai.elimu.tasks;
import ai.elimu.dao.LetterDao;
import ai.elimu.dao.StoryBookChapterDao;
import ai.elimu.dao.StoryBookDao;
import ai.elimu.dao.StoryBookParagraphDao;
import ai.elimu.entity.content.Letter;
import ai.elimu.entity.content.StoryBook;
import ai.elimu.entity.content.StoryBookChapter;
import ai.elimu.entity.content.StoryBookParagraph;
import ai.elimu.model.v2.enums.Language;
import ai.elimu.util.ConfigHelper;
import ai.elimu.util.LetterFrequencyHelper;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
/**
* Iterates all letter-sounds and calculates the frequency of each letter.
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class LetterUsageCountScheduler {
private final LetterDao letterDao;
private final StoryBookDao storyBookDao;
private final StoryBookChapterDao storyBookChapterDao;
private final StoryBookParagraphDao storyBookParagraphDao;
@Scheduled(cron = "00 20 06 * * *") // At 06:20 every day
public synchronized void execute() {
log.info("execute");
// <ID, frequency>
Map<Long, Integer> frequencyMap = new HashMap<>();
Language language = Language.valueOf(ConfigHelper.getProperty("content.language"));
List<StoryBook> storyBooks = storyBookDao.readAllOrdered();
log.info("storyBooks.size(): " + storyBooks.size());
for (StoryBook storyBook : storyBooks) {
log.debug("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> letterFrequencyMapForBook = LetterFrequencyHelper.getLetterFrequency(paragraphs, language);
letterFrequencyMapForBook.keySet().forEach(letterText -> frequencyMap.put(letterText, frequencyMap.getOrDefault(letterText, 0) + letterFrequencyMapForBook.get(letterText)));
}
log.info("letterFrequencyMap: " + frequencyMap);
for (String letterText : frequencyMap.keySet()) {
Letter existingLetter = letterDao.readByText(letterText);
if (existingLetter != null) {
existingLetter.setUsageCount(frequencyMap.get(letterText));
letterDao.update(existingLetter);
}
}
log.info("execute complete");
}
}