Skip to main content

llm-intelligent-public-opinion-analytics

Deploy and use an LLM-powered public opinion analytics assistant that crawls 26 hot lists from 15 platforms, performs sentiment analysis, topic clustering, and multi-channel alerting

الانتقال إلى التثبيت

معلومات المصدر

المستودع
reason-machines/data-skills
آخر نشاط في المصدر
٢٢ مايو ٢٠٢٦ في ١٢:٢٧
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٥
التفرعات
١

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
llm-intelligent-public-opinion-analytics
description
Deploy and use an LLM-powered public opinion analytics assistant that crawls 26 hot lists from 15 platforms, performs sentiment analysis, topic clustering, and multi-channel alerting
triggers
["set up public opinion monitoring system","analyze social media trending topics","deploy sentiment analysis crawler","configure hot topic push notifications","cluster trending news topics","monitor multiple platform hot searches","build opinion analytics dashboard","aggregate cross-platform trending content"]
# LLM-Based Intelligent Public Opinion Analytics Assistant > Skill by [ara.so](https://ara.so) — Data Skills collection. ## Overview This project is a comprehensive public opinion analytics platform that combines real-time data from **26 hot lists across 15 mainstream platforms** (Weibo, Bilibili, Zhihu, Baidu, etc.) with large language model (LLM) analysis capabilities. It provides conversational query interfaces for hot searches, topic clustering, sentiment analysis, and multi-channel push notifications (WeChat, Email, Telegram). **Key Capabilities:** - Real-time crawler cluster for 15+ platforms - LLM-powered content analysis (including video content extraction) - Natural language query interface - Topic clustering and sentiment analysis - Multi-channel alert system (Email, WeChat Work, Telegram) - Keyboard shortcuts for crawler control ## Installation ### Prerequisites 1. **Browser Driver Setup** (Required for detail page scraping): ```bash # Check your Chrome/Edge version first # Chrome: chrome://settings/help # Edge: edge://settings/help # Download matching driver: # ChromeDriver: https://chromedriver.chromium.org/ # EdgeDriver: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ # Linux/macOS - place driver in PATH: sudo mv chromedriver /usr/local/bin/ sudo chmod +x /usr/local/bin/chromedriver # Verify installation: chromedriver --version ``` 2. **MySQL Database**: ```bash # Install MySQL 8.0+ # Create database and user mysql -u root -p CREATE DATABASE hotsearch_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'hotsearch_user'@'localhost' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON hotsearch_db.* TO 'hotsearch_user'@'localhost'; FLUSH PRIVILEGES; ``` 3. **Python Environment**: ```bash # Clone repository git clone https://github.com/hmmnxkl/LLM-Based-Intelligent-Public-Opinion-Analytics-Assistant.git cd LLM-Based-Intelligent-Public-Opinion-Analytics-Assistant # Create virtual environment python3 -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate # Install dependencies pip install -r requirements.txt ``` ### Database Initialization Reference the `init.py` file to create necessary tables: ```python # Example table structure (adapt from init.py) import pymysql connection = pymysql.connect( host='localhost', user='hotsearch_user', password='your_password', database='hotsearch_db', charset='utf8mb4' ) cursor = connection.cursor() # Hot search items table cursor.execute(""" CREATE TABLE IF NOT EXISTS hot_search_items ( id INT AUTO_INCREMENT PRIMARY KEY, platform VARCHAR(50) NOT NULL, rank INT, title VARCHAR(500) NOT NULL, url VARCHAR(1000), heat_value VARCHAR(100), crawl_time DATETIME NOT NULL, detail_content TEXT, sentiment VARCHAR(20), INDEX idx_platform (platform), INDEX idx_crawl_time (crawl_time) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; """) connection.commit() connection.close() ``` ## Configuration ### Environment Variables Create `.env` file in the project root: ```bash # Database Configuration MYSQL_HOST=localhost MYSQL_PORT=3306 MYSQL_USER=hotsearch_user MYSQL_PASSWORD=your_password MYSQL_DATABASE=hotsearch_db # LLM API Configuration (OpenAI-compatible format) OPENAI_API_KEY=your_api_key OPENAI_API_BASE=https://your-llm-endpoint.com/v1 OPENAI_MODEL=gpt-4 # Huawei Pangu Model (recommended alternative) PANGU_API_KEY=your_pangu_key PANGU_API_BASE=https://pangu-api.huaweicloud.com # Push Notification Channels # Email (SMTP) SMTP_HOST=smtp.gmail.com SMTP_PORT=587 SMTP_USER=your_email@gmail.com SMTP_PASSWORD=your_app_password # WeChat Work Bot WECHAT_WORK_WEBHOOK=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY # WeChat Work Application WECHAT_WORK_CORP_ID=your_corp_id WECHAT_WORK_APP_SECRET=your_app_secret WECHAT_WORK_AGENT_ID=your_agent_id # Telegram Bot TELEGRAM_BOT_TOKEN=your_bot_token TELEGRAM_CHAT_ID=your_chat_id ``` ### Crawler Settings Edit `hotsearchcrawler/settings.py`: ```python # MySQL Connection Pool MYSQL_CONFIG = { 'host': os.getenv('MYSQL_HOST', 'localhost'), 'port': int(os.getenv('MYSQL_PORT', 3306)), 'user': os.getenv('MYSQL_USER'), 'password': os.getenv('MYSQL_PASSWORD'), 'database': os.getenv('MYSQL_DATABASE'), 'charset': 'utf8mb4', 'autocommit': True } # Optional: Platform-specific cookies for authenticated access PLATFORM_COOKIES = { 'weibo': 'your_weibo_cookies', # Optional, for better access 'bilibili': 'your_bilibili_cookies' } # Concurrent requests CONCURRENT_REQUESTS = 16 DOWNLOAD_DELAY = 1 # User-Agent rotation USER_AGENTS = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36' ] ``` ## Usage ### Starting the System ```bash # Activate virtual environment source venv/bin/activate # Start the main application (web interface + API) python app.py # Access web interface at http://localhost:5000 ``` ### Crawler Management ```python # Manual crawler test (single platform) cd hotsearchcrawler python runspider-test.py # Start all crawlers (typically triggered via web UI) python run_spiders.py ``` **Via Web Interface:** - Use keyboard shortcuts to start/stop crawlers - View real-time crawling status - Monitor data collection metrics ### Natural Language Queries ```python # Examples of conversational queries via web interface: # "Show me today's top 10 trending topics on Weibo" # "What's trending about AI technology across all platforms?" # "Analyze sentiment for news about electric vehicles" # "Cluster topics related to economic policy" # "Compare hot topics between Bilibili and Zhihu" ``` ### Programmatic API Usage ```python from hotsearch_analysis_agent.analyzer import OpinionAnalyzer from datetime import datetime, timedelta # Initialize analyzer analyzer = OpinionAnalyzer() # Query hot searches results = analyzer.query_hot_searches( platforms=['weibo', 'zhihu', 'bilibili'], time_range=(datetime.now() - timedelta(hours=24), datetime.now()), keyword='人工智能' ) # Perform sentiment analysis sentiment = analyzer.analyze_sentiment(results) print(f"Overall sentiment: {sentiment['overall']}") print(f"Positive: {sentiment['positive_ratio']}%") # Topic clustering clusters = analyzer.cluster_topics(results, num_clusters=5) for i, cluster in enumerate(clusters): print(f"Cluster {i+1}: {cluster['keywords']}") print(f" Items: {len(cluster['items'])}") ``` ### Push Notification Setup ```python from hotsearch_analysis_agent.push_service import PushService # Initialize push service push_service = PushService() # Create scheduled push task task = push_service.create_task( name="AI Technology Daily Report", keywords=['人工智能', '大模型', '机器学习'], platforms=['weibo', 'zhihu', 'bilibili'], schedule='0 8,12,18 * * *', # Cron format: 8am, 12pm, 6pm daily channels=['wechat_work', 'email'], threshold={'heat_value': 100000, 'sentiment': 'positive'} ) # Test push task python test_push_task.py ``` ### Analysis Report Generation ```python from hotsearch_analysis_agent.report_generator import ReportGenerator generator = ReportGenerator() # Generate comprehensive report report = generator.generate_report( topic="人工智能与前沿科技", time_range=(datetime.now() - timedelta(days=7), datetime.now()), include_sentiment=True, include_clustering=True, include_trend_analysis=True ) # Report includes: # - Core findings with data highlights # - Detailed news content with source URLs # - Sentiment distribution # - Topic clusters # - Trend analysis # - Information spread characteristics # Save report report.save_markdown('output/ai_tech_report.md') report.save_pdf('output/ai_tech_report.pdf') ``` ## Common Patterns ### Multi-Platform Data Aggregation ```python from hotsearch_analysis_agent.aggregator import DataAggregator aggregator = DataAggregator() # Fetch and merge data from multiple platforms merged_data = aggregator.aggregate( platforms=['weibo', 'douyin', 'zhihu', 'bilibili', 'baidu'], dedup_threshold=0.8, # Similarity threshold for deduplication sort_by='heat_value', limit=50 ) # Cross-platform topic correlation correlations = aggregator.find_correlations(merged_data) print(f"Found {len(correlations)} cross-platform trending topics") ``` ### Video Content Analysis ```python # The system automatically extracts text from video news # using browser automation and LLM analysis from hotsearch_analysis_agent.video_analyzer import VideoAnalyzer video_analyzer = VideoAnalyzer() # Analyze video-based hot topics (e.g., from Bilibili, Douyin) video_topics = video_analyzer.extract_content( url='https://www.bilibili.com/video/BV13pSoBBEvX/', extract_comments=True, max_comments=100 ) print(f"Video title: {video_topics['title']}") print(f"Description: {video_topics['description']}") print(f"Top comments sentiment: {video_topics['comments_sentiment']}") ``` ### Custom LLM Integration ```python from hotsearch_analysis_agent.llm_client import LLMClient # Use Huawei Pangu Model (recommended) llm = LLMClient( api_base=os.getenv('PANGU_API_BASE'), api_key=os.getenv('PANGU_API_KEY'), model='pangu-embedded-7b' ) # Or use any OpenAI-compatible endpoint llm = LLMClient( api_base=os.getenv('OPENAI_API_BASE'), api_key=os.getenv('OPENAI_API_KEY'), model='gpt-4' ) # Analyze custom content analysis = llm.analyze( content=news_content, task='sentiment_and_summary', language='zh' ) ``` ### Scheduled Monitoring ```python from hotsearch_analysis_agent.scheduler import MonitorScheduler scheduler = MonitorScheduler() # Add monitoring rule scheduler.add_rule( name="Tech Company Crisis Monitoring", keywords=['某公司', '丑闻', '争议'], alert_conditions={ 'heat_spike': 2.0, # 2x normal heat 'sentiment_drop': -0.3, # 30% sentiment decrease 'platforms_count': 3 # Trending on 3+ platforms }, notification_channels=['wechat_work', 'telegram', 'email'], urgent=True ) # Start scheduler scheduler.start() ``` ## Troubleshooting ### Browser Driver Issues ```bash # Error: "Message: 'chromedriver' executable needs to be in PATH" # Solution: Verify driver installation which chromedriver # Should return path # If not found, reinstall: # 1. Check browser version google-chrome --version # or microsoft-edge --version # 2. Download exact matching driver version # 3. Place in /usr/local/bin/ and chmod +x # Alternative: Specify driver path in settings CHROMEDRIVER_PATH=/path/to/chromedriver ``` ### Database Connection Errors ```python # Error: "Can't connect to MySQL server" # Check MySQL service sudo systemctl status mysql # Verify credentials mysql -u hotsearch_user -p -h localhost hotsearch_db # Check .env file encoding (must be UTF-8 without BOM) file -I .env # Should show charset=utf-8 # Test connection in Python import pymysql try: conn = pymysql.connect( host=os.getenv('MYSQL_HOST'), user=os.getenv('MYSQL_USER'), password=os.getenv('MYSQL_PASSWORD'), database=os.getenv('MYSQL_DATABASE') ) print("Connection successful") except Exception as e: print(f"Error: {e}") ``` ### Crawler Rate Limiting ```python # Error: HTTP 429 or blocked requests # Solution: Adjust crawler settings # In hotsearchcrawler/settings.py: CONCURRENT_REQUESTS = 8 # Reduce from 16 DOWNLOAD_DELAY = 2 # Increase delay # Enable AutoThrottle AUTOTHROTTLE_ENABLED = True AUTOTHROTTLE_START_DELAY = 1 AUTOTHROTTLE_MAX_DELAY = 10 # Rotate User-Agents and proxies DOWNLOADER_MIDDLEWARES = { 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None, 'scrapy_user_agents.middlewares.RandomUserAgentMiddleware': 400, } ``` ### LLM API Timeouts ```python # Error: Request timeout or rate limit # Solution: Implement retry logic and fallback from tenacity import retry, stop_after_attempt, wait_exponential
عرض على GitHub
ملف SKILL.md هذا كبير جدا، لذلك يعرض SkillsMP القسم الاول فقط هنا. عرض على GitHub