first attempt with an article analyzer using ollama and (structured output)
This commit is contained in:
parent
6d9189d0be
commit
a1cd2a0b06
47
article_analyzer.py
Normal file
47
article_analyzer.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
from enum import Enum
|
||||||
|
|
||||||
|
import ollama
|
||||||
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
class Category(str, Enum):
|
||||||
|
REGULATORY_NEWS = "Regulatory News"
|
||||||
|
INSTITUTIONAL_ADOPTION = "Institutional Adoption"
|
||||||
|
MARKET_SENTIMENT = "Market Sentiment"
|
||||||
|
MACROECONOMIC_FACTORS = "Macroeconomic Factors"
|
||||||
|
SECURITY_HACKS = "Security & Hacks"
|
||||||
|
TECHNOLOGICAL_DEVELOPMENTS = "Technological Developments"
|
||||||
|
WHALE_EXCHANGE_ACTIVITY = "Whale & Exchange Activity"
|
||||||
|
|
||||||
|
class ArticleClassification(BaseModel):
|
||||||
|
category: Category
|
||||||
|
sentiment: int
|
||||||
|
|
||||||
|
class ArticleAnalyzer:
|
||||||
|
def __init__(self):
|
||||||
|
self.base_prompt = """
|
||||||
|
Classify the following article into one of these categories:
|
||||||
|
- Regulatory News
|
||||||
|
- Institutional Adoption
|
||||||
|
- Market Sentiment
|
||||||
|
- Macroeconomic Factors
|
||||||
|
- Security & Hacks
|
||||||
|
- Technological Developments
|
||||||
|
- Whale & Exchange Activity
|
||||||
|
|
||||||
|
Also, assign a sentiment (1 for Positive, -1 for Negative, or 0 for Neutral).
|
||||||
|
"""
|
||||||
|
print(f"This JSON model is going to be used for structured ouput classification : {ArticleClassification.model_json_schema()}")
|
||||||
|
|
||||||
|
def classify_article(self, article_text):
|
||||||
|
prompt = f"""{self.base_prompt}
|
||||||
|
|
||||||
|
ARTICLE: {article_text}
|
||||||
|
|
||||||
|
OUTPUT FORMAT:
|
||||||
|
Category: <category>
|
||||||
|
Sentiment: <sentiment>
|
||||||
|
"""
|
||||||
|
response = ollama.chat(model="llama3.2",
|
||||||
|
messages=[{"role": "user", "content": prompt}],
|
||||||
|
format=ArticleClassification.model_json_schema())
|
||||||
|
return response['message']['content']
|
||||||
16
main.py
16
main.py
@ -1,16 +0,0 @@
|
|||||||
from BitcoinPricePredictor import BitcoinPricePredictor
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
# For daily predictions (default)
|
|
||||||
predictor_daily = BitcoinPricePredictor(db_path='bitcoin_historical_data.db', timeframe='H')
|
|
||||||
|
|
||||||
# For weekly predictions
|
|
||||||
# predictor_weekly = BitcoinPricePredictor(db_path='bitcoin_historical_data.db', timeframe='W')
|
|
||||||
|
|
||||||
# Choose which predictor to use
|
|
||||||
predictor = predictor_daily
|
|
||||||
|
|
||||||
predictor.load_and_prepare_data()
|
|
||||||
predictor.train_model()
|
|
||||||
predictor.evaluate_model()
|
|
||||||
predictor.plot_history()
|
|
||||||
24
main_article_analyzer.py
Normal file
24
main_article_analyzer.py
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import os
|
||||||
|
|
||||||
|
from article_analyzer import ArticleAnalyzer
|
||||||
|
|
||||||
|
def read_html_files(folder_path):
|
||||||
|
html_contents = {}
|
||||||
|
for root, _, files in os.walk(folder_path):
|
||||||
|
for file in files:
|
||||||
|
if file.endswith(".html"):
|
||||||
|
file_path = os.path.join(root, file)
|
||||||
|
with open(file_path, "r", encoding="utf-8") as f:
|
||||||
|
html_contents[file_path] = f.read()
|
||||||
|
return html_contents
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
analyzer = ArticleAnalyzer()
|
||||||
|
|
||||||
|
html_files = read_html_files("./data")
|
||||||
|
print(f"Parsed {len(html_files)} html files")
|
||||||
|
|
||||||
|
for file, content in html_files.items():
|
||||||
|
result = analyzer.classify_article(content)
|
||||||
|
print(f"article [{file}] - analyzed as [{result}]\n")
|
||||||
8
main_price_predictor.py
Normal file
8
main_price_predictor.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
from BitcoinPricePredictor import BitcoinPricePredictor
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
predictor = BitcoinPricePredictor(db_path='bitcoin_historical_data.db', timeframe='H')
|
||||||
|
predictor.load_data()
|
||||||
|
predictor.train_model()
|
||||||
|
predictor.evaluate_model()
|
||||||
|
predictor.plot_history()
|
||||||
6
main_trend_analysis.py
Normal file
6
main_trend_analysis.py
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
from bitcoin_trend_analysis import BitcoinTrendAnalysis
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
ma = BitcoinTrendAnalysis(db_path='bitcoin_historical_data.db')
|
||||||
|
ma.load_data()
|
||||||
|
ma.analyze_trends_peaks(distance=1)
|
||||||
Loading…
x
Reference in New Issue
Block a user