Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

BiasLens

BiasLens Logo

Uncovering media bias through data analysis

Overview

BiasLens is a modern web application that helps users understand the political bias and sentiment of news articles across multiple sources. By aggregating content from various news outlets and applying natural language processing techniques, BiasLens provides users with insights into how different media sources cover the same topics from different perspectives.

Features

  • Multi-source News Aggregation: Collects articles from numerous news sources including NYT, The Guardian, CNN, Fox News, and more
  • Political Bias Analysis: Automatically classifies articles as Left-leaning, Right-leaning, or Centrist
  • Sentiment Analysis: Evaluates the emotional tone of each article (Positive, Negative, or Neutral)
  • Interactive UI: Modern, animated interface with multiple viewing options
  • Search and Filter: Find articles by keyword and filter by political orientation
  • Responsive Design: Optimized for all devices from mobile to desktop

Technology Stack

Frontend

  • Framework: Next.js with React
  • State Management: React Hooks
  • Database Integration: Firebase Firestore
  • Styling: Custom CSS with animations
  • Deployment: Vercel

Backend

  • Language: Python
  • Data Processing: NLTK, spaCy for NLP
  • Article Sources: Multiple API integrations (NewsAPI, NYT, The Guardian, MediaStack, GDELT, etc.)
  • Database: Firebase Firestore
  • Sentiment Analysis: VADER (Valence Aware Dictionary and sEntiment Reasoner)

Project Structure

BiasLens/
│
├── client/ # Frontend Next.js application
│ ├── public/ # Static assets
│ └── src/
│ ├── app/ # Next.js app directory
│ │ ├── lib/ # Firebase configuration
│ │ ├── page.tsx # Main application page
│ │ └── styles.css # Custom styling
│
├── server/ # Python backend
│ ├── api_scripts/ # API integrations for news sources
│ ├── article_analyser.py # NLP for sentiment and bias analysis
│ ├── firebase/ # Firebase integration
│ ├── data/ # JSON data storage
│ └── main.py # Main backend script
│
└── README.md # Documentation

Setup and Installation

Prerequisites

  • Node.js (v14+)
  • Python (v3.7+)
  • Firebase account

Frontend Setup

  1. Navigate to the client directory:

    cd client
  2. Install dependencies:

    npm install
  3. Create a .env.local file with your Firebase configuration:

    NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key
    NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_auth_domain
    NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
    NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_storage_bucket
    NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id
    NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
    
  4. Start the development server:

    npm run dev

Backend Setup

  1. Navigate to the server directory:

    cd server
  2. Install Python dependencies:

    pip install -r requirements.txt
  3. Create a .env file with your API keys:

    NEWSAPI_KEY=your_news_api_key
    NYT_KEY=your_nyt_api_key
    GUARDIAN_KEY=your_guardian_api_key
    MEDIASTACK_KEY=your_mediastack_key
    CURRENTS_KEY=your_currents_api_key
    FIREBASE_SERVICE_ACCOUNT_KEY_PATH=path_to_your_firebase_service_account_key.json
    
  4. Download required NLP models:

    python -m spacy download en_core_web_sm
    python -m nltk.downloader vader_lexicon punkt
  5. Run the data collection and analysis script:

    python main.py

Usage

  1. View Articles: Browse the aggregated news articles on the home page
  2. Search: Use the search bar to find articles by keyword
  3. Filter: Select political orientation from the dropdown to filter articles
  4. View Modes:
    • List View: Traditional grid layout of all articles
    • Grouped View: Articles organized by news source

Political Bias Analysis

BiasLens determines political bias through:

  1. Source-based analysis (known political leanings of publications)
  2. Content analysis (keyword detection for politically charged terms)
  3. Contextual understanding (analyzing rhetoric and framing)

The system classifies content as:

  • Left: Progressive/liberal perspective
  • Center: Balanced/neutral perspective
  • Right: Conservative perspective

Sentiment Analysis

Article sentiment is rated on a scale from -1 (extremely negative) to +1 (extremely positive) and categorized as:

  • Positive: Upbeat, optimistic, or favorable coverage
  • Negative: Critical, pessimistic, or unfavorable coverage
  • Neutral: Balanced or factual reporting without strong emotion

Development

Building for Production

Frontend

cd client
npm run build

Deployment

The front-end can be deployed on Vercel, Netlify, or any other Next.js compatible hosting service.

The back-end is designed to run as a scheduled task to periodically update the article database.

Contribution

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • News data provided by various public APIs
  • Sentiment analysis powered by NLTK's VADER
  • Political bias detection using custom NLP techniques

About

Discover how different news sources cover the same topics. BiasLens analyzes political bias and sentiment across multiple media outlets to give you the full picture.

Topics

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

BiasLens

BiasLens Logo

Uncovering media bias through data analysis

Overview

BiasLens is a modern web application that helps users understand the political bias and sentiment of news articles across multiple sources. By aggregating content from various news outlets and applying natural language processing techniques, BiasLens provides users with insights into how different media sources cover the same topics from different perspectives.

Features

  • Multi-source News Aggregation: Collects articles from numerous news sources including NYT, The Guardian, CNN, Fox News, and more
  • Political Bias Analysis: Automatically classifies articles as Left-leaning, Right-leaning, or Centrist
  • Sentiment Analysis: Evaluates the emotional tone of each article (Positive, Negative, or Neutral)
  • Interactive UI: Modern, animated interface with multiple viewing options
  • Search and Filter: Find articles by keyword and filter by political orientation
  • Responsive Design: Optimized for all devices from mobile to desktop

Technology Stack

Frontend

  • Framework: Next.js with React
  • State Management: React Hooks
  • Database Integration: Firebase Firestore
  • Styling: Custom CSS with animations
  • Deployment: Vercel

Backend

  • Language: Python
  • Data Processing: NLTK, spaCy for NLP
  • Article Sources: Multiple API integrations (NewsAPI, NYT, The Guardian, MediaStack, GDELT, etc.)
  • Database: Firebase Firestore
  • Sentiment Analysis: VADER (Valence Aware Dictionary and sEntiment Reasoner)

Project Structure

BiasLens/
│
├── client/ # Frontend Next.js application
│ ├── public/ # Static assets
│ └── src/
│ ├── app/ # Next.js app directory
│ │ ├── lib/ # Firebase configuration
│ │ ├── page.tsx # Main application page
│ │ └── styles.css # Custom styling
│
├── server/ # Python backend
│ ├── api_scripts/ # API integrations for news sources
│ ├── article_analyser.py # NLP for sentiment and bias analysis
│ ├── firebase/ # Firebase integration
│ ├── data/ # JSON data storage
│ └── main.py # Main backend script
│
└── README.md # Documentation

Setup and Installation

Prerequisites

  • Node.js (v14+)
  • Python (v3.7+)
  • Firebase account

Frontend Setup

  1. Navigate to the client directory:

    cd client
  2. Install dependencies:

    npm install
  3. Create a .env.local file with your Firebase configuration:

    NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key
    NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_auth_domain
    NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
    NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_storage_bucket
    NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id
    NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
    
  4. Start the development server:

    npm run dev

Backend Setup

  1. Navigate to the server directory:

    cd server
  2. Install Python dependencies:

    pip install -r requirements.txt
  3. Create a .env file with your API keys:

    NEWSAPI_KEY=your_news_api_key
    NYT_KEY=your_nyt_api_key
    GUARDIAN_KEY=your_guardian_api_key
    MEDIASTACK_KEY=your_mediastack_key
    CURRENTS_KEY=your_currents_api_key
    FIREBASE_SERVICE_ACCOUNT_KEY_PATH=path_to_your_firebase_service_account_key.json
    
  4. Download required NLP models:

    python -m spacy download en_core_web_sm
    python -m nltk.downloader vader_lexicon punkt
  5. Run the data collection and analysis script:

    python main.py

Usage

  1. View Articles: Browse the aggregated news articles on the home page
  2. Search: Use the search bar to find articles by keyword
  3. Filter: Select political orientation from the dropdown to filter articles
  4. View Modes:
    • List View: Traditional grid layout of all articles
    • Grouped View: Articles organized by news source

Political Bias Analysis

BiasLens determines political bias through:

  1. Source-based analysis (known political leanings of publications)
  2. Content analysis (keyword detection for politically charged terms)
  3. Contextual understanding (analyzing rhetoric and framing)

The system classifies content as:

  • Left: Progressive/liberal perspective
  • Center: Balanced/neutral perspective
  • Right: Conservative perspective

Sentiment Analysis

Article sentiment is rated on a scale from -1 (extremely negative) to +1 (extremely positive) and categorized as:

  • Positive: Upbeat, optimistic, or favorable coverage
  • Negative: Critical, pessimistic, or unfavorable coverage
  • Neutral: Balanced or factual reporting without strong emotion

Development

Building for Production

Frontend

cd client
npm run build

Deployment

The front-end can be deployed on Vercel, Netlify, or any other Next.js compatible hosting service.

The back-end is designed to run as a scheduled task to periodically update the article database.

Contribution

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • News data provided by various public APIs
  • Sentiment analysis powered by NLTK's VADER
  • Political bias detection using custom NLP techniques

About

Discover how different news sources cover the same topics. BiasLens analyzes political bias and sentiment across multiple media outlets to give you the full picture.

Topics

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

BiasLens

BiasLens Logo

Uncovering media bias through data analysis

Overview

BiasLens is a modern web application that helps users understand the political bias and sentiment of news articles across multiple sources. By aggregating content from various news outlets and applying natural language processing techniques, BiasLens provides users with insights into how different media sources cover the same topics from different perspectives.

Features

  • Multi-source News Aggregation: Collects articles from numerous news sources including NYT, The Guardian, CNN, Fox News, and more
  • Political Bias Analysis: Automatically classifies articles as Left-leaning, Right-leaning, or Centrist
  • Sentiment Analysis: Evaluates the emotional tone of each article (Positive, Negative, or Neutral)
  • Interactive UI: Modern, animated interface with multiple viewing options
  • Search and Filter: Find articles by keyword and filter by political orientation
  • Responsive Design: Optimized for all devices from mobile to desktop

Technology Stack

Frontend

  • Framework: Next.js with React
  • State Management: React Hooks
  • Database Integration: Firebase Firestore
  • Styling: Custom CSS with animations
  • Deployment: Vercel

Backend

  • Language: Python
  • Data Processing: NLTK, spaCy for NLP
  • Article Sources: Multiple API integrations (NewsAPI, NYT, The Guardian, MediaStack, GDELT, etc.)
  • Database: Firebase Firestore
  • Sentiment Analysis: VADER (Valence Aware Dictionary and sEntiment Reasoner)

Project Structure

BiasLens/
│
├── client/ # Frontend Next.js application
│ ├── public/ # Static assets
│ └── src/
│ ├── app/ # Next.js app directory
│ │ ├── lib/ # Firebase configuration
│ │ ├── page.tsx # Main application page
│ │ └── styles.css # Custom styling
│
├── server/ # Python backend
│ ├── api_scripts/ # API integrations for news sources
│ ├── article_analyser.py # NLP for sentiment and bias analysis
│ ├── firebase/ # Firebase integration
│ ├── data/ # JSON data storage
│ └── main.py # Main backend script
│
└── README.md # Documentation

Setup and Installation

Prerequisites

  • Node.js (v14+)
  • Python (v3.7+)
  • Firebase account

Frontend Setup

  1. Navigate to the client directory:

    cd client
  2. Install dependencies:

    npm install
  3. Create a .env.local file with your Firebase configuration:

    NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key
    NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_auth_domain
    NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
    NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_storage_bucket
    NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id
    NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
    
  4. Start the development server:

    npm run dev

Backend Setup

  1. Navigate to the server directory:

    cd server
  2. Install Python dependencies:

    pip install -r requirements.txt
  3. Create a .env file with your API keys:

    NEWSAPI_KEY=your_news_api_key
    NYT_KEY=your_nyt_api_key
    GUARDIAN_KEY=your_guardian_api_key
    MEDIASTACK_KEY=your_mediastack_key
    CURRENTS_KEY=your_currents_api_key
    FIREBASE_SERVICE_ACCOUNT_KEY_PATH=path_to_your_firebase_service_account_key.json
    
  4. Download required NLP models:

    python -m spacy download en_core_web_sm
    python -m nltk.downloader vader_lexicon punkt
  5. Run the data collection and analysis script:

    python main.py

Usage

  1. View Articles: Browse the aggregated news articles on the home page
  2. Search: Use the search bar to find articles by keyword
  3. Filter: Select political orientation from the dropdown to filter articles
  4. View Modes:
    • List View: Traditional grid layout of all articles
    • Grouped View: Articles organized by news source

Political Bias Analysis

BiasLens determines political bias through:

  1. Source-based analysis (known political leanings of publications)
  2. Content analysis (keyword detection for politically charged terms)
  3. Contextual understanding (analyzing rhetoric and framing)

The system classifies content as:

  • Left: Progressive/liberal perspective
  • Center: Balanced/neutral perspective
  • Right: Conservative perspective

Sentiment Analysis

Article sentiment is rated on a scale from -1 (extremely negative) to +1 (extremely positive) and categorized as:

  • Positive: Upbeat, optimistic, or favorable coverage
  • Negative: Critical, pessimistic, or unfavorable coverage
  • Neutral: Balanced or factual reporting without strong emotion

Development

Building for Production

Frontend

cd client
npm run build

Deployment

The front-end can be deployed on Vercel, Netlify, or any other Next.js compatible hosting service.

The back-end is designed to run as a scheduled task to periodically update the article database.

Contribution

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • News data provided by various public APIs
  • Sentiment analysis powered by NLTK's VADER
  • Political bias detection using custom NLP techniques

About

Discover how different news sources cover the same topics. BiasLens analyzes political bias and sentiment across multiple media outlets to give you the full picture.

Topics

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

BiasLens

BiasLens Logo

Uncovering media bias through data analysis

Overview

BiasLens is a modern web application that helps users understand the political bias and sentiment of news articles across multiple sources. By aggregating content from various news outlets and applying natural language processing techniques, BiasLens provides users with insights into how different media sources cover the same topics from different perspectives.

Features

  • Multi-source News Aggregation: Collects articles from numerous news sources including NYT, The Guardian, CNN, Fox News, and more
  • Political Bias Analysis: Automatically classifies articles as Left-leaning, Right-leaning, or Centrist
  • Sentiment Analysis: Evaluates the emotional tone of each article (Positive, Negative, or Neutral)
  • Interactive UI: Modern, animated interface with multiple viewing options
  • Search and Filter: Find articles by keyword and filter by political orientation
  • Responsive Design: Optimized for all devices from mobile to desktop

Technology Stack

Frontend

  • Framework: Next.js with React
  • State Management: React Hooks
  • Database Integration: Firebase Firestore
  • Styling: Custom CSS with animations
  • Deployment: Vercel

Backend

  • Language: Python
  • Data Processing: NLTK, spaCy for NLP
  • Article Sources: Multiple API integrations (NewsAPI, NYT, The Guardian, MediaStack, GDELT, etc.)
  • Database: Firebase Firestore
  • Sentiment Analysis: VADER (Valence Aware Dictionary and sEntiment Reasoner)

Project Structure

BiasLens/
│
├── client/ # Frontend Next.js application
│ ├── public/ # Static assets
│ └── src/
│ ├── app/ # Next.js app directory
│ │ ├── lib/ # Firebase configuration
│ │ ├── page.tsx # Main application page
│ │ └── styles.css # Custom styling
│
├── server/ # Python backend
│ ├── api_scripts/ # API integrations for news sources
│ ├── article_analyser.py # NLP for sentiment and bias analysis
│ ├── firebase/ # Firebase integration
│ ├── data/ # JSON data storage
│ └── main.py # Main backend script
│
└── README.md # Documentation

Setup and Installation

Prerequisites

  • Node.js (v14+)
  • Python (v3.7+)
  • Firebase account

Frontend Setup

  1. Navigate to the client directory:

    cd client
  2. Install dependencies:

    npm install
  3. Create a .env.local file with your Firebase configuration:

    NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key
    NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_auth_domain
    NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
    NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_storage_bucket
    NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id
    NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
    
  4. Start the development server:

    npm run dev

Backend Setup

  1. Navigate to the server directory:

    cd server
  2. Install Python dependencies:

    pip install -r requirements.txt
  3. Create a .env file with your API keys:

    NEWSAPI_KEY=your_news_api_key
    NYT_KEY=your_nyt_api_key
    GUARDIAN_KEY=your_guardian_api_key
    MEDIASTACK_KEY=your_mediastack_key
    CURRENTS_KEY=your_currents_api_key
    FIREBASE_SERVICE_ACCOUNT_KEY_PATH=path_to_your_firebase_service_account_key.json
    
  4. Download required NLP models:

    python -m spacy download en_core_web_sm
    python -m nltk.downloader vader_lexicon punkt
  5. Run the data collection and analysis script:

    python main.py

Usage

  1. View Articles: Browse the aggregated news articles on the home page
  2. Search: Use the search bar to find articles by keyword
  3. Filter: Select political orientation from the dropdown to filter articles
  4. View Modes:
    • List View: Traditional grid layout of all articles
    • Grouped View: Articles organized by news source

Political Bias Analysis

BiasLens determines political bias through:

  1. Source-based analysis (known political leanings of publications)
  2. Content analysis (keyword detection for politically charged terms)
  3. Contextual understanding (analyzing rhetoric and framing)

The system classifies content as:

  • Left: Progressive/liberal perspective
  • Center: Balanced/neutral perspective
  • Right: Conservative perspective

Sentiment Analysis

Article sentiment is rated on a scale from -1 (extremely negative) to +1 (extremely positive) and categorized as:

  • Positive: Upbeat, optimistic, or favorable coverage
  • Negative: Critical, pessimistic, or unfavorable coverage
  • Neutral: Balanced or factual reporting without strong emotion

Development

Building for Production

Frontend

cd client
npm run build

Deployment

The front-end can be deployed on Vercel, Netlify, or any other Next.js compatible hosting service.

The back-end is designed to run as a scheduled task to periodically update the article database.

Contribution

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • News data provided by various public APIs
  • Sentiment analysis powered by NLTK's VADER
  • Political bias detection using custom NLP techniques

About

Discover how different news sources cover the same topics. BiasLens analyzes political bias and sentiment across multiple media outlets to give you the full picture.

Topics

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

BiasLens

BiasLens Logo

Uncovering media bias through data analysis

Overview

BiasLens is a modern web application that helps users understand the political bias and sentiment of news articles across multiple sources. By aggregating content from various news outlets and applying natural language processing techniques, BiasLens provides users with insights into how different media sources cover the same topics from different perspectives.

Features

  • Multi-source News Aggregation: Collects articles from numerous news sources including NYT, The Guardian, CNN, Fox News, and more
  • Political Bias Analysis: Automatically classifies articles as Left-leaning, Right-leaning, or Centrist
  • Sentiment Analysis: Evaluates the emotional tone of each article (Positive, Negative, or Neutral)
  • Interactive UI: Modern, animated interface with multiple viewing options
  • Search and Filter: Find articles by keyword and filter by political orientation
  • Responsive Design: Optimized for all devices from mobile to desktop

Technology Stack

Frontend

  • Framework: Next.js with React
  • State Management: React Hooks
  • Database Integration: Firebase Firestore
  • Styling: Custom CSS with animations
  • Deployment: Vercel

Backend

  • Language: Python
  • Data Processing: NLTK, spaCy for NLP
  • Article Sources: Multiple API integrations (NewsAPI, NYT, The Guardian, MediaStack, GDELT, etc.)
  • Database: Firebase Firestore
  • Sentiment Analysis: VADER (Valence Aware Dictionary and sEntiment Reasoner)

Project Structure

BiasLens/
│
├── client/ # Frontend Next.js application
│ ├── public/ # Static assets
│ └── src/
│ ├── app/ # Next.js app directory
│ │ ├── lib/ # Firebase configuration
│ │ ├── page.tsx # Main application page
│ │ └── styles.css # Custom styling
│
├── server/ # Python backend
│ ├── api_scripts/ # API integrations for news sources
│ ├── article_analyser.py # NLP for sentiment and bias analysis
│ ├── firebase/ # Firebase integration
│ ├── data/ # JSON data storage
│ └── main.py # Main backend script
│
└── README.md # Documentation

Setup and Installation

Prerequisites

  • Node.js (v14+)
  • Python (v3.7+)
  • Firebase account

Frontend Setup

  1. Navigate to the client directory:

    cd client
  2. Install dependencies:

    npm install
  3. Create a .env.local file with your Firebase configuration:

    NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key
    NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_auth_domain
    NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
    NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_storage_bucket
    NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id
    NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
    
  4. Start the development server:

    npm run dev

Backend Setup

  1. Navigate to the server directory:

    cd server
  2. Install Python dependencies:

    pip install -r requirements.txt
  3. Create a .env file with your API keys:

    NEWSAPI_KEY=your_news_api_key
    NYT_KEY=your_nyt_api_key
    GUARDIAN_KEY=your_guardian_api_key
    MEDIASTACK_KEY=your_mediastack_key
    CURRENTS_KEY=your_currents_api_key
    FIREBASE_SERVICE_ACCOUNT_KEY_PATH=path_to_your_firebase_service_account_key.json
    
  4. Download required NLP models:

    python -m spacy download en_core_web_sm
    python -m nltk.downloader vader_lexicon punkt
  5. Run the data collection and analysis script:

    python main.py

Usage

  1. View Articles: Browse the aggregated news articles on the home page
  2. Search: Use the search bar to find articles by keyword
  3. Filter: Select political orientation from the dropdown to filter articles
  4. View Modes:
    • List View: Traditional grid layout of all articles
    • Grouped View: Articles organized by news source

Political Bias Analysis

BiasLens determines political bias through:

  1. Source-based analysis (known political leanings of publications)
  2. Content analysis (keyword detection for politically charged terms)
  3. Contextual understanding (analyzing rhetoric and framing)

The system classifies content as:

  • Left: Progressive/liberal perspective
  • Center: Balanced/neutral perspective
  • Right: Conservative perspective

Sentiment Analysis

Article sentiment is rated on a scale from -1 (extremely negative) to +1 (extremely positive) and categorized as:

  • Positive: Upbeat, optimistic, or favorable coverage
  • Negative: Critical, pessimistic, or unfavorable coverage
  • Neutral: Balanced or factual reporting without strong emotion

Development

Building for Production

Frontend

cd client
npm run build

Deployment

The front-end can be deployed on Vercel, Netlify, or any other Next.js compatible hosting service.

The back-end is designed to run as a scheduled task to periodically update the article database.

Contribution

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • News data provided by various public APIs
  • Sentiment analysis powered by NLTK's VADER
  • Political bias detection using custom NLP techniques

About

Discover how different news sources cover the same topics. BiasLens analyzes political bias and sentiment across multiple media outlets to give you the full picture.

Topics

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

BiasLens

BiasLens Logo

Uncovering media bias through data analysis

Overview

BiasLens is a modern web application that helps users understand the political bias and sentiment of news articles across multiple sources. By aggregating content from various news outlets and applying natural language processing techniques, BiasLens provides users with insights into how different media sources cover the same topics from different perspectives.

Features

  • Multi-source News Aggregation: Collects articles from numerous news sources including NYT, The Guardian, CNN, Fox News, and more
  • Political Bias Analysis: Automatically classifies articles as Left-leaning, Right-leaning, or Centrist
  • Sentiment Analysis: Evaluates the emotional tone of each article (Positive, Negative, or Neutral)
  • Interactive UI: Modern, animated interface with multiple viewing options
  • Search and Filter: Find articles by keyword and filter by political orientation
  • Responsive Design: Optimized for all devices from mobile to desktop

Technology Stack

Frontend

  • Framework: Next.js with React
  • State Management: React Hooks
  • Database Integration: Firebase Firestore
  • Styling: Custom CSS with animations
  • Deployment: Vercel

Backend

  • Language: Python
  • Data Processing: NLTK, spaCy for NLP
  • Article Sources: Multiple API integrations (NewsAPI, NYT, The Guardian, MediaStack, GDELT, etc.)
  • Database: Firebase Firestore
  • Sentiment Analysis: VADER (Valence Aware Dictionary and sEntiment Reasoner)

Project Structure

BiasLens/
│
├── client/ # Frontend Next.js application
│ ├── public/ # Static assets
│ └── src/
│ ├── app/ # Next.js app directory
│ │ ├── lib/ # Firebase configuration
│ │ ├── page.tsx # Main application page
│ │ └── styles.css # Custom styling
│
├── server/ # Python backend
│ ├── api_scripts/ # API integrations for news sources
│ ├── article_analyser.py # NLP for sentiment and bias analysis
│ ├── firebase/ # Firebase integration
│ ├── data/ # JSON data storage
│ └── main.py # Main backend script
│
└── README.md # Documentation

Setup and Installation

Prerequisites

  • Node.js (v14+)
  • Python (v3.7+)
  • Firebase account

Frontend Setup

  1. Navigate to the client directory:

    cd client
  2. Install dependencies:

    npm install
  3. Create a .env.local file with your Firebase configuration:

    NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key
    NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_auth_domain
    NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
    NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_storage_bucket
    NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id
    NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
    
  4. Start the development server:

    npm run dev

Backend Setup

  1. Navigate to the server directory:

    cd server
  2. Install Python dependencies:

    pip install -r requirements.txt
  3. Create a .env file with your API keys:

    NEWSAPI_KEY=your_news_api_key
    NYT_KEY=your_nyt_api_key
    GUARDIAN_KEY=your_guardian_api_key
    MEDIASTACK_KEY=your_mediastack_key
    CURRENTS_KEY=your_currents_api_key
    FIREBASE_SERVICE_ACCOUNT_KEY_PATH=path_to_your_firebase_service_account_key.json
    
  4. Download required NLP models:

    python -m spacy download en_core_web_sm
    python -m nltk.downloader vader_lexicon punkt
  5. Run the data collection and analysis script:

    python main.py

Usage

  1. View Articles: Browse the aggregated news articles on the home page
  2. Search: Use the search bar to find articles by keyword
  3. Filter: Select political orientation from the dropdown to filter articles
  4. View Modes:
    • List View: Traditional grid layout of all articles
    • Grouped View: Articles organized by news source

Political Bias Analysis

BiasLens determines political bias through:

  1. Source-based analysis (known political leanings of publications)
  2. Content analysis (keyword detection for politically charged terms)
  3. Contextual understanding (analyzing rhetoric and framing)

The system classifies content as:

  • Left: Progressive/liberal perspective
  • Center: Balanced/neutral perspective
  • Right: Conservative perspective

Sentiment Analysis

Article sentiment is rated on a scale from -1 (extremely negative) to +1 (extremely positive) and categorized as:

  • Positive: Upbeat, optimistic, or favorable coverage
  • Negative: Critical, pessimistic, or unfavorable coverage
  • Neutral: Balanced or factual reporting without strong emotion

Development

Building for Production

Frontend

cd client
npm run build

Deployment

The front-end can be deployed on Vercel, Netlify, or any other Next.js compatible hosting service.

The back-end is designed to run as a scheduled task to periodically update the article database.

Contribution

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • News data provided by various public APIs
  • Sentiment analysis powered by NLTK's VADER
  • Political bias detection using custom NLP techniques

About

Discover how different news sources cover the same topics. BiasLens analyzes political bias and sentiment across multiple media outlets to give you the full picture.

Topics

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

BiasLens

BiasLens Logo

Uncovering media bias through data analysis

Overview

BiasLens is a modern web application that helps users understand the political bias and sentiment of news articles across multiple sources. By aggregating content from various news outlets and applying natural language processing techniques, BiasLens provides users with insights into how different media sources cover the same topics from different perspectives.

Features

  • Multi-source News Aggregation: Collects articles from numerous news sources including NYT, The Guardian, CNN, Fox News, and more
  • Political Bias Analysis: Automatically classifies articles as Left-leaning, Right-leaning, or Centrist
  • Sentiment Analysis: Evaluates the emotional tone of each article (Positive, Negative, or Neutral)
  • Interactive UI: Modern, animated interface with multiple viewing options
  • Search and Filter: Find articles by keyword and filter by political orientation
  • Responsive Design: Optimized for all devices from mobile to desktop

Technology Stack

Frontend

  • Framework: Next.js with React
  • State Management: React Hooks
  • Database Integration: Firebase Firestore
  • Styling: Custom CSS with animations
  • Deployment: Vercel

Backend

  • Language: Python
  • Data Processing: NLTK, spaCy for NLP
  • Article Sources: Multiple API integrations (NewsAPI, NYT, The Guardian, MediaStack, GDELT, etc.)
  • Database: Firebase Firestore
  • Sentiment Analysis: VADER (Valence Aware Dictionary and sEntiment Reasoner)

Project Structure

BiasLens/
│
├── client/ # Frontend Next.js application
│ ├── public/ # Static assets
│ └── src/
│ ├── app/ # Next.js app directory
│ │ ├── lib/ # Firebase configuration
│ │ ├── page.tsx # Main application page
│ │ └── styles.css # Custom styling
│
├── server/ # Python backend
│ ├── api_scripts/ # API integrations for news sources
│ ├── article_analyser.py # NLP for sentiment and bias analysis
│ ├── firebase/ # Firebase integration
│ ├── data/ # JSON data storage
│ └── main.py # Main backend script
│
└── README.md # Documentation

Setup and Installation

Prerequisites

  • Node.js (v14+)
  • Python (v3.7+)
  • Firebase account

Frontend Setup

  1. Navigate to the client directory:

    cd client
  2. Install dependencies:

    npm install
  3. Create a .env.local file with your Firebase configuration:

    NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key
    NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_auth_domain
    NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
    NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_storage_bucket
    NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id
    NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
    
  4. Start the development server:

    npm run dev

Backend Setup

  1. Navigate to the server directory:

    cd server
  2. Install Python dependencies:

    pip install -r requirements.txt
  3. Create a .env file with your API keys:

    NEWSAPI_KEY=your_news_api_key
    NYT_KEY=your_nyt_api_key
    GUARDIAN_KEY=your_guardian_api_key
    MEDIASTACK_KEY=your_mediastack_key
    CURRENTS_KEY=your_currents_api_key
    FIREBASE_SERVICE_ACCOUNT_KEY_PATH=path_to_your_firebase_service_account_key.json
    
  4. Download required NLP models:

    python -m spacy download en_core_web_sm
    python -m nltk.downloader vader_lexicon punkt
  5. Run the data collection and analysis script:

    python main.py

Usage

  1. View Articles: Browse the aggregated news articles on the home page
  2. Search: Use the search bar to find articles by keyword
  3. Filter: Select political orientation from the dropdown to filter articles
  4. View Modes:
    • List View: Traditional grid layout of all articles
    • Grouped View: Articles organized by news source

Political Bias Analysis

BiasLens determines political bias through:

  1. Source-based analysis (known political leanings of publications)
  2. Content analysis (keyword detection for politically charged terms)
  3. Contextual understanding (analyzing rhetoric and framing)

The system classifies content as:

  • Left: Progressive/liberal perspective
  • Center: Balanced/neutral perspective
  • Right: Conservative perspective

Sentiment Analysis

Article sentiment is rated on a scale from -1 (extremely negative) to +1 (extremely positive) and categorized as:

  • Positive: Upbeat, optimistic, or favorable coverage
  • Negative: Critical, pessimistic, or unfavorable coverage
  • Neutral: Balanced or factual reporting without strong emotion

Development

Building for Production

Frontend

cd client
npm run build

Deployment

The front-end can be deployed on Vercel, Netlify, or any other Next.js compatible hosting service.

The back-end is designed to run as a scheduled task to periodically update the article database.

Contribution

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • News data provided by various public APIs
  • Sentiment analysis powered by NLTK's VADER
  • Political bias detection using custom NLP techniques

About

Discover how different news sources cover the same topics. BiasLens analyzes political bias and sentiment across multiple media outlets to give you the full picture.

Topics

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

BiasLens

BiasLens Logo

Uncovering media bias through data analysis

Overview

BiasLens is a modern web application that helps users understand the political bias and sentiment of news articles across multiple sources. By aggregating content from various news outlets and applying natural language processing techniques, BiasLens provides users with insights into how different media sources cover the same topics from different perspectives.

Features

  • Multi-source News Aggregation: Collects articles from numerous news sources including NYT, The Guardian, CNN, Fox News, and more
  • Political Bias Analysis: Automatically classifies articles as Left-leaning, Right-leaning, or Centrist
  • Sentiment Analysis: Evaluates the emotional tone of each article (Positive, Negative, or Neutral)
  • Interactive UI: Modern, animated interface with multiple viewing options
  • Search and Filter: Find articles by keyword and filter by political orientation
  • Responsive Design: Optimized for all devices from mobile to desktop

Technology Stack

Frontend

  • Framework: Next.js with React
  • State Management: React Hooks
  • Database Integration: Firebase Firestore
  • Styling: Custom CSS with animations
  • Deployment: Vercel

Backend

  • Language: Python
  • Data Processing: NLTK, spaCy for NLP
  • Article Sources: Multiple API integrations (NewsAPI, NYT, The Guardian, MediaStack, GDELT, etc.)
  • Database: Firebase Firestore
  • Sentiment Analysis: VADER (Valence Aware Dictionary and sEntiment Reasoner)

Project Structure

BiasLens/
│
├── client/ # Frontend Next.js application
│ ├── public/ # Static assets
│ └── src/
│ ├── app/ # Next.js app directory
│ │ ├── lib/ # Firebase configuration
│ │ ├── page.tsx # Main application page
│ │ └── styles.css # Custom styling
│
├── server/ # Python backend
│ ├── api_scripts/ # API integrations for news sources
│ ├── article_analyser.py # NLP for sentiment and bias analysis
│ ├── firebase/ # Firebase integration
│ ├── data/ # JSON data storage
│ └── main.py # Main backend script
│
└── README.md # Documentation

Setup and Installation

Prerequisites

  • Node.js (v14+)
  • Python (v3.7+)
  • Firebase account

Frontend Setup

  1. Navigate to the client directory:

    cd client
  2. Install dependencies:

    npm install
  3. Create a .env.local file with your Firebase configuration:

    NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key
    NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_auth_domain
    NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
    NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_storage_bucket
    NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id
    NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
    
  4. Start the development server:

    npm run dev

Backend Setup

  1. Navigate to the server directory:

    cd server
  2. Install Python dependencies:

    pip install -r requirements.txt
  3. Create a .env file with your API keys:

    NEWSAPI_KEY=your_news_api_key
    NYT_KEY=your_nyt_api_key
    GUARDIAN_KEY=your_guardian_api_key
    MEDIASTACK_KEY=your_mediastack_key
    CURRENTS_KEY=your_currents_api_key
    FIREBASE_SERVICE_ACCOUNT_KEY_PATH=path_to_your_firebase_service_account_key.json
    
  4. Download required NLP models:

    python -m spacy download en_core_web_sm
    python -m nltk.downloader vader_lexicon punkt
  5. Run the data collection and analysis script:

    python main.py

Usage

  1. View Articles: Browse the aggregated news articles on the home page
  2. Search: Use the search bar to find articles by keyword
  3. Filter: Select political orientation from the dropdown to filter articles
  4. View Modes:
    • List View: Traditional grid layout of all articles
    • Grouped View: Articles organized by news source

Political Bias Analysis

BiasLens determines political bias through:

  1. Source-based analysis (known political leanings of publications)
  2. Content analysis (keyword detection for politically charged terms)
  3. Contextual understanding (analyzing rhetoric and framing)

The system classifies content as:

  • Left: Progressive/liberal perspective
  • Center: Balanced/neutral perspective
  • Right: Conservative perspective

Sentiment Analysis

Article sentiment is rated on a scale from -1 (extremely negative) to +1 (extremely positive) and categorized as:

  • Positive: Upbeat, optimistic, or favorable coverage
  • Negative: Critical, pessimistic, or unfavorable coverage
  • Neutral: Balanced or factual reporting without strong emotion

Development

Building for Production

Frontend

cd client
npm run build

Deployment

The front-end can be deployed on Vercel, Netlify, or any other Next.js compatible hosting service.

The back-end is designed to run as a scheduled task to periodically update the article database.

Contribution

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • News data provided by various public APIs
  • Sentiment analysis powered by NLTK's VADER
  • Political bias detection using custom NLP techniques

About

Discover how different news sources cover the same topics. BiasLens analyzes political bias and sentiment across multiple media outlets to give you the full picture.

Topics

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages