proposeEmojis function
Set<Emoji>
proposeEmojis(
- String message, {
- int? number,
- Set<
EmojiProposalLanguageCodes> languageCodes = const {EmojiProposalLanguageCodes.en},
proposes (hopefully) suitable Emoji
reactions for a given message
.
By providing languageCodes
, you can specify the languages to analyze.
Implementation
Set<Emoji> proposeEmojis(
String message, {
int? number,
Set<EmojiProposalLanguageCodes> languageCodes = const {
EmojiProposalLanguageCodes.en
},
}) {
Set<Emoji> proposedEmojis = {};
for (final language in languageCodes) {
Set<Emoji> proposedBetterEmojis = {};
Set<Emoji> proposedWorseEmojis = {};
final analysis = Sentiment.analysis(
message,
emoji: true,
languageCode: language.name,
);
if (analysis.words.bad.isNotEmpty || analysis.words.good.isNotEmpty) {
final upperBound = analysis.score.ceil();
proposedBetterEmojis.addAll(
_filterEmojisByScore(upperBound),
);
if (analysis.score.floor() != analysis.score) {
final lowerBound = analysis.score.ceil() - 1;
proposedWorseEmojis.addAll(
_filterEmojisByScore(lowerBound),
);
final share = analysis.score - analysis.score.floor();
proposedEmojis.addAll(_mergeSetsByShare(number,
share: share, a: proposedBetterEmojis, b: proposedWorseEmojis));
} else {
if (number != null) {
int range = number;
if (range > proposedBetterEmojis.length) {
range = proposedBetterEmojis.length;
}
proposedEmojis
.addAll(proposedBetterEmojis.toList().getRange(0, range));
} else {
proposedEmojis.addAll(proposedBetterEmojis);
}
}
}
}
return proposedEmojis;
}