Claude Skills Guide

Building a Chrome extension that uses AI for sentiment analysis opens up powerful possibilities for analyzing text content directly in your browser. Whether you want to gauge the emotional tone of emails, social media posts, or customer feedback, combining Chrome extensions with AI sentiment analysis creates a seamless workflow without requiring server-side processing.

This guide walks you through creating a functional AI sentiment analyzer Chrome extension, covering the architecture, implementation details, and practical use cases for developers and power users.

How Chrome Extension Sentiment Analysis Works

A sentiment analyzer Chrome extension intercepts or receives text input from web pages and processes it through an AI model to determine emotional tone—positive, negative, or neutral. The key advantage of running this locally in the browser is privacy: user data never leaves the device when using client-side models.

The typical architecture consists of three components:

  1. Content script - Captures selected text or page content
  2. Background service worker - Handles communication between components
  3. Popup UI - Displays analysis results to users

Setting Up Your Extension Project

Create a new directory for your extension with the following structure:

sentiment-analyzer/
├── manifest.json
├── background.js
├── content.js
├── popup.html
├── popup.js
└── analyzer.js

Manifest Configuration

Your manifest.json defines permissions and capabilities:

{
  "manifest_version": 3,
  "name": "AI Sentiment Analyzer",
  "version": "1.0",
  "description": "Analyze sentiment of selected text using AI",
  "permissions": ["activeTab", "scripting"],
  "action": {
    "default_popup": "popup.html"
  },
  "host_permissions": ["<all_urls>"]
}

The activeTab permission allows your extension to access the currently active tab when the user clicks the extension icon. The scripting permission enables executing content scripts.

Implementing the Sentiment Analysis Engine

For client-side analysis, you have several options: TensorFlow.js with a pre-trained model, the Transformers.js library, or a simple rule-based approach. For this guide, we’ll use a practical implementation that balances accuracy with performance.

Create analyzer.js with the following sentiment analysis logic:

// Simple lexicon-based sentiment analyzer
const positiveWords = new Set([
  'good', 'great', 'excellent', 'amazing', 'wonderful', 'fantastic',
  'love', 'happy', 'joy', 'pleased', 'satisfied', 'perfect', 'best'
]);

const negativeWords = new Set([
  'bad', 'terrible', 'awful', 'horrible', 'hate', 'sad', 'angry',
  'disappointed', 'frustrated', 'poor', 'worst', 'fail', 'broken'
]);

function analyzeSentiment(text) {
  const words = text.toLowerCase().match(/\b\w+\b/g) || [];
  
  let score = 0;
  words.forEach(word => {
    if (positiveWords.has(word)) score += 1;
    if (negativeWords.has(word)) score -= 1;
  });
  
  const normalized = score / Math.max(words.length, 1);
  
  let label;
  if (normalized > 0.1) label = 'positive';
  else if (normalized < -0.1) label = 'negative';
  else label = 'neutral';
  
  return {
    score: normalized,
    label: label,
    wordCount: words.length
  };
}

This lexicon-based approach works well for basic use cases. For more sophisticated analysis, consider integrating TensorFlow.js with a BERT-based model, though be mindful of the 50MB extension size limit.

Content Script for Text Selection

The content script captures text when users select it on any webpage. Add this to content.js:

document.addEventListener('mouseup', (event) => {
  const selectedText = window.getSelection().toString().trim();
  
  if (selectedText.length > 0) {
    chrome.runtime.sendMessage({
      type: 'ANALYZE_TEXT',
      text: selectedText
    });
  }
});

This script listens for text selection events and sends the selected text to the background script for processing.

Background Service Worker

The background script coordinates between the content script and popup:

chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
  if (message.type === 'ANALYZE_TEXT') {
    // Import the analyzer module
    importScripts('analyzer.js');
    
    const result = analyzeSentiment(message.text);
    
    // Store result for popup access
    chrome.storage.local.set({
      lastAnalysis: {
        text: message.text.substring(0, 100),
        result: result,
        timestamp: Date.now()
      }
    });
    
    sendResponse({ success: true, result: result });
  }
  return true;
});

Building the Popup Interface

The popup provides the user interface for viewing analysis results:

<!DOCTYPE html>
<html>
<head>
  <style>
    body { width: 300px; padding: 16px; font-family: system-ui; }
    .result { padding: 12px; border-radius: 8px; margin-top: 12px; }
    .positive { background: #d4edda; color: #155724; }
    .negative { background: #f8d7da; color: #721c24; }
    .neutral { background: #e2e3e5; color: #383d41; }
    .score { font-size: 24px; font-weight: bold; }
  </style>
</head>
<body>
  <h3>Sentiment Analyzer</h3>
  <div id="result-container">
    <p>Select text on any page to analyze its sentiment.</p>
  </div>
  <script src="popup.js"></script>
</body>
</html>
document.addEventListener('DOMContentLoaded', () => {
  chrome.storage.local.get(['lastAnalysis'], (data) => {
    if (data.lastAnalysis) {
      const { result } = data.lastAnalysis;
      const container = document.getElementById('result-container');
      
      container.innerHTML = `
        <div class="result ${result.label}">
          <div class="score">${result.score.toFixed(2)}</div>
          <div>${result.label.toUpperCase()}</div>
          <small>${result.wordCount} words analyzed</small>
        </div>
      `;
    }
  });
});

Loading and Testing Your Extension

To test your extension in Chrome:

  1. Navigate to chrome://extensions/
  2. Enable “Developer mode” in the top right corner
  3. Click “Load unpacked” and select your extension directory
  4. Visit any webpage and select text with your mouse
  5. Click the extension icon to view the sentiment analysis

Practical Use Cases

For developers, this extension proves valuable for analyzing code review comments, measuring sentiment in customer feedback forms, or monitoring social media mentions. Power users can use it to quickly assess the tone of emails before responding or evaluate content quality across websites.

The real power emerges when you integrate more sophisticated AI models. With Transformers.js, you can run BERT-based sentiment analysis entirely in the browser, achieving accuracy comparable to server-side solutions while maintaining complete privacy.

Extending the Extension

Consider these enhancements for more advanced functionality:

Building an AI sentiment analyzer Chrome extension provides a practical foundation for browser-based AI applications. The architecture demonstrated here scales from simple lexicon-based analysis to complex transformer models, giving you flexibility to balance performance, accuracy, and privacy according to your needs.

Built by theluckystrike — More at zovo.one