While writing business plans a few times recently in an attempt to secure funding, I felt the flaws in my logic were too significant, even in simple logic descriptions. Furthermore, as I reviewed the Plutic Sentiment Wheel, I noticed areas that could be incorporated or improved, which were difficult to ignore. I felt that even if I were to introduce NLP later, having a solid baseline in the logic would make it easier to verify or correct the AI model's sentiment analysis results. I intended to bury this issue and pretend not to notice while completing the MVP, but because the logic was sloppy, word collection seemed haphazard... In the end, I made the bold decision to improve the sentiment recognition logic. This time, I really shouldn't just lock the specs to the MVP and look at it as is. I felt the limitations of the logic even with simple word matching; it also felt inconsistent with the concept to fix the matched emotions to only two categories, especially since I had gone to the trouble of enabling real-time records in a timeline format. Additionally, the limitations of processing word matchtypes solely as 'contains' felt risky, especially for short keywords. I decided to expand the matchtype options to include 'phrase,' 'exact,' and 'straightswith' in addition to 'contains,' and to assign priority to those options. While writing a test diary, I noticed an emotion that appeared distinctly despite not being in my current category: 'disappointment.' It is a very everyday emotion that I experience frequently, but I found it lacking when trying to subordinate it to other emotions. Therefore, I created a new category and collected additional words. I also added a negative expression filter. Although "I wasn't anxious" is not actually anxiety, it was being interpreted as such because the negativity wasn't being detected; this was actually an issue I had been putting off resolving. My goal was to implement the original idea as quickly as possible and complete the MVP, but now that I was considering funding, there was no reason not to address it. So, I created a rule to check for negative words within the preceding and succeeding 2-3 words, and if present, to invalidate the match or switch to the opposite emotion. Crucially, I introduced an emotion intensity weighting system. Instead of relying on simple frequency, I assigned intensity scores to each emotion word—for example, assigning 2 points for annoyance, 4 points for anger, and 5 points for rage—and I felt that selecting top emotion categories based on these total scores would enable more accurate emotion recognition. I won't explain everything, but I also assigned separate intensities for each emotional category, setting anxiety as a stronger emotion than worry/concern. Within the sentence “I had a presentation today. I was so nervous since this morning that my hands were shaking. However, I am relieved that it seems to have gone better than I expected. That said, I was a little disappointed because the reactions of some interviewers were different from what I anticipated. Still, since it’s over, celebrating with something delicious made me feel better.” |Matched Keyword|Category|Intensity| |---|---|---| |Because I was so nervous|Tension|Intensity 4 ('Too' amplifies intensity)| |Worried|Worry/Concern|Intensity 3 or invalidated due to negative processing| |Relief|Relief |Intensity 3| |Was indeed disappointing|Disappointment|Intensity 3| |Feeled better|Joy|Intensity 2| By summing the scores and grouping the categories along the same emotional axis, we can see that the anxiety axis category has a total score of 6, disappointment 3, relief 3, and joy 2, confirming and indicating that anxiety was dominant overall today.
There are still some aspects I am struggling with. After all, it is a timeline-style diary aimed at reading and visualizing emotions, so there are things like whether to leave the color blank or allow the user to select a mood when no emotional keywords are detected during the day, or the positive use of countless other swear words like "I'm going crazy"...