Install
openclaw skills install @wei840222/emoAnalyze emoji usage, overall sentiment scores (-1.0 to +1.0), sentiment intensity, polarization index, emotional volatility, and progression arc using the emo CLI tool. Use this skill whenever you need to evaluate the emotional tone, emoji density, or multi-file sentiment benchmark for user input, chat logs, or text files.
openclaw skills install @wei840222/emoemo Emoji Sentiment Analyzeremo is a zero-dependency, high-performance Rust CLI tool that analyzes text and text files for emoji usage, weighted sentiment scores, non-neutral intensity, emotional polarization, and timeline progression based on the research-backed Emoji Sentiment Ranking 1.0 dataset.
cargo install emoji-sentiment
Use the emo CLI when you need to:
-1.0 to +1.0) and non-neutral intensity (0.0 to 1.0) for any text or file.Polarization Index: 0.0 to 1.0).Warming Up 📈, Cooling Down 📉, Fluctuating 🌊) across 4-quarter timeline, paragraphs (--by-paragraph), or lines (--by-line).--json) for automated pipelines, agent decisions, or database storage.echo "Rust is awesome! 🎉🚀 But debugging can be tricky 😭" | emo
# Analyze a single file
emo path/to/document.txt
# Analyze an entire directory (recursively scans all text files and generates benchmark)
emo path/to/logs_directory/
When given multiple files, emo automatically outputs a side-by-side comparative table before the aggregated summary:
emo log1.txt log2.txt log3.txt
# Analyze sentiment arc paragraph by paragraph (\n\n)
emo --by-paragraph article.md
# Analyze sentiment arc line by line (\n)
emo --by-line chat_log.txt
emo --json feedback.txt
emo --summary comment.txt
When running emo --json, the resulting JSON object contains the following key fields:
{
"total_chars": 84,
"total_words": 15,
"total_emojis": 5,
"unique_emojis": 5,
"matched_emojis_count": 5,
"unmatched_emojis_count": 0,
"overall_score": 0.345,
"overall_intensity": 0.742,
"positive_count": 3,
"neutral_count": 0,
"negative_count": 2,
"density_per_1000_chars": 59.52,
"density_per_100_words": 33.33,
"style_level": "Heavy Emoji / Social",
"entropy": 2.322,
"diversity_ratio": 1.0,
"polarization_index": 0.96,
"polarization_status": "Highly Polarized 🔥❄️",
"volatility_std_dev": 0.412,
"volatility_status": "High Volatility / Emotional Swing 🌊",
"ambiguity_index": 0.0,
"ambiguity_status": "Direct & Explicit 🎯",
"position_bias": {
"avg_position": 0.45,
"front_pct": 40.0,
"mid_pct": 40.0,
"end_pct": 20.0,
"bias_status": "Balanced Placement"
},
"slang_analysis": {
"total_slang_count": 3,
"slang_density_per_100_words": 20.0,
"sarcasm_index": 85.0,
"sarcasm_status": "High Sarcasm / Irony Alert 🎭",
"elongation_count": 1,
"hybrid_score": 0.525,
"top_slang": [
{
"term": "笑死",
"count": 1,
"sentiment_score": 0.8,
"sarcasm_weight": 0.2,
"meaning": "extremely funny"
}
]
},
"block_stats": [
{
"block_name": "Emoticons",
"count": 2,
"percentage": 40.0,
"avg_score": 0.292
}
],
"progression": {
"segments": [
{
"label": "Q1 (Beginning)",
"score": 0.709,
"intensity": 0.799,
"emoji_count": 2
}
],
"trend_status": "Cooling Down 📉 (Positive → Negative)"
},
"top_used": [
{
"emoji": "🎉",
"name": "PARTY POPPER",
"count": 1,
"score": 0.74,
"intensity": 0.816,
"in_dataset": true
}
]
}
| Metric | Range | Interpretation |
|---|---|---|
overall_score | +0.5 to +1.0 | Very Positive 😃 (Strongly optimistic, celebratory) |
+0.05 to +0.5 | Positive 😊 (Friendly, supportive, satisfied) | |
-0.05 to +0.05 | Neutral 😐 (Factual, objective, balanced) | |
-0.5 to -0.05 | Negative 🙁 (Frustrated, disappointed, concerned) | |
-1.0 to -0.5 | Very Negative 😭 (Angry, severely distressed) | |
overall_intensity | 0.0 to 1.0 | Emotional Non-Neutrality. Measures how emotionally charged the text is regardless of positive/negative polarity. |
polarization_index | 0.0 to 0.1 | Harmonious / Unified (Consistent sentiment direction) |
0.7 to 1.0 | Highly Polarized 🔥❄️ (Contains strongly opposing positive and negative emotions simultaneously) | |
volatility_std_dev | < 0.2 | Monotone / Consistent (Emotional tone remains steady throughout) |
≥ 0.4 | High Volatility / Emotional Swing 🌊 (Large sentiment shifts between sentences/sections) | |
style_level | Categorical | Text Only, Formal / Minimal, Casual, Expressive, or Heavy Emoji / Social based on emoji density per 100 words. |
While emo relies on Emoji Sentiment Ranking 1.0 for compiled zero-dependency runtime evaluation, the following datasets are standard references in the NLP research community:
-1.0 to +1.0). (Novak et al., 2015)