File size: 6,054 Bytes
96de966 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | """
Competitor analysis for investor relations.
Uses free HuggingFace models with rule-based fallback.
"""
import re
from transformers import pipeline
_analyzer = None
def get_analyzer(model_name="google/flan-t5-base"):
"""Load text2text generation pipeline with fallback."""
global _analyzer
if _analyzer is None:
try:
_analyzer = pipeline(
"text2text-generation",
model=model_name,
device=-1 # CPU only for free deployment
)
except Exception:
_analyzer = None
return _analyzer
def extract_competitor_info(competitors_data):
"""Parse competitor data into structured format."""
lines = [l.strip() for l in competitors_data.split('\n') if l.strip()]
competitors = []
for line in lines:
# Try to extract competitor name and key facts
if ':' in line:
parts = line.split(':', 1)
name = parts[0].strip()
details = parts[1].strip()
competitors.append({'name': name, 'details': details})
else:
competitors.append({'name': f"Competitor {len(competitors)+1}", 'details': line})
return competitors
def rule_based_analysis(company_name, competitors_data, market_context):
"""Fallback: Structure competitor analysis using rules."""
competitors = extract_competitor_info(competitors_data)
analysis_parts = [f"## Competitive Landscape Analysis for {company_name}\n"]
# Market overview
analysis_parts.append("### Market Context\n")
analysis_parts.append(f"{market_context}\n")
# Competitor breakdown
analysis_parts.append("\n### Competitive Position\n")
for comp in competitors:
analysis_parts.append(f"\n**{comp['name']}**")
analysis_parts.append(f"- {comp['details']}")
# Identify strengths/threats
details_lower = comp['details'].lower()
if any(word in details_lower for word in ['launch', 'new', 'expand', 'grow', 'acqui']):
analysis_parts.append(f"- *Threat Level*: Active expansion and innovation")
if any(word in details_lower for word in ['revenue', 'billion', 'million', '$']):
# Try to extract revenue
import re
revenue_match = re.search(r'\$?(\d+(?:\.\d+)?)\s*([BM])', comp['details'], re.I)
if revenue_match:
val = revenue_match.group(1)
unit = revenue_match.group(2).upper()
analysis_parts.append(f"- *Scale*: ${val}{unit} revenue")
# Strategic implications
analysis_parts.append("\n### Strategic Implications for " + company_name + "\n")
if 'ai' in competitors_data.lower() or 'ml' in competitors_data.lower():
analysis_parts.append("- **Technology Focus**: Multiple competitors investing in AI/ML capabilities - maintain competitive technology roadmap")
if 'expansion' in competitors_data.lower() or 'market' in competitors_data.lower():
analysis_parts.append("- **Market Expansion**: Competitive pressure in geographic/market segment expansion")
if 'acqui' in competitors_data.lower():
analysis_parts.append("- **M&A Activity**: Active acquisition landscape - identify strategic targets")
if 'pricing' in competitors_data.lower() or 'price' in competitors_data.lower():
analysis_parts.append("- **Pricing Pressure**: Monitor competitive pricing dynamics and value proposition")
# Recommendations
analysis_parts.append("\n### Recommendations\n")
analysis_parts.append(f"- Maintain differentiation through unique value propositions")
analysis_parts.append(f"- Monitor competitor product launches and market positioning")
analysis_parts.append(f"- Leverage strengths in areas where competitors show weakness")
analysis_parts.append(f"- Consider strategic partnerships or acquisitions to strengthen market position")
return "\n".join(analysis_parts)
def analyze_competitors(company_name, competitors_data, market_context, model_name="google/flan-t5-base"):
"""
Analyze competitive landscape for investor communications.
Args:
company_name: Name of the company
competitors_data: Text containing competitor information
market_context: Industry trends and market conditions
model_name: HuggingFace model to use
Returns:
Formatted competitive analysis report
"""
analyzer = get_analyzer(model_name)
if analyzer is None:
# Use rule-based fallback
return rule_based_analysis(company_name, competitors_data, market_context)
# Use AI model
prompt = f"""Analyze the competitive landscape for {company_name}.
Market Context:
{market_context}
Competitor Information:
{competitors_data[:1500]}
Provide a competitive analysis with:
1. Market positioning overview
2. Key competitor strengths and threats
3. Strategic implications for {company_name}
4. Recommendations for maintaining competitive advantage
Analysis:"""
try:
result = analyzer(
prompt,
max_length=512,
min_length=150,
do_sample=False,
temperature=0.7
)
analysis = result[0]['generated_text']
# Format the output
formatted = f"""## Competitive Landscape Analysis for {company_name}
### Market Context
{market_context}
### Competitive Analysis
{analysis}
### Competitor Overview
{competitors_data}
---
*Note: This analysis should be supplemented with detailed market research and verified competitive intelligence.*
"""
return formatted
except Exception as e:
# Fallback to rule-based on any error
return rule_based_analysis(company_name, competitors_data, market_context)
|