Merge pull request 'feat/dbIntigration' (#13) from feat/dbIntigration into develop

Reviewed-on: Berufsschule/Veracity_AI#13
This commit is contained in:
Falko Victor Habel 2024-10-10 07:40:25 +00:00
commit b6dbc1dd6a
6 changed files with 91 additions and 26 deletions

Binary file not shown.

View File

@ -34,5 +34,6 @@ class VeraMindInference:
return {
"result": "FAKE" if is_fake else "REAL",
"confidence": float(confidence)
"confidence": float(confidence),
"is_fake": is_fake
}

View File

@ -1,10 +1,15 @@
from urllib.parse import urlparse
from typing import Optional
from utils.webTextExtractor import WebTextExtractor
class TextData:
def __init__(self, url: str = "") -> None:
def __init__(self, url: str = "",text: str = "",result: str = "", is_fake_news: bool = False, provider: str = "") -> None:
self.url = url
self.text = ""
self.result = ""
self.text = text
self.result = result
self.is_fake_news = is_fake_news
self.provider = provider
self.confidence = None
self._extractor = None
@ -31,4 +36,34 @@ class TextData:
if self.confidence != None:
output = f"Prediction: {self.result}" + f" Confidence: {self.confidence:.4f}"
print(output)
return output
return output
def get_provider(self)-> str:
self.extract_provider()
return self.provider
def extract_provider(self):
"""
Extract the domain (anbieter) from a given URL.
:param url: The URL to process
:return: The extracted domain or None if the URL is invalid
"""
if not self._is_valid_url(self.url):
self.provider = "None"
parsed_url = urlparse(self.url)
domain_parts = parsed_url.netloc.split('.')
self.provider = f"{domain_parts[-2]}.{domain_parts[-1]}" if len(domain_parts) >= 2 else "None"
def _is_valid_url(self, url: str) -> bool:
"""
Check if a given URL is valid.
:param url: The URL to validate
:return: True if the URL is valid, False otherwise
"""
try:
result = urlparse(url)
return all([result.scheme, result.netloc])
except ValueError:
return False

24
src/models/provider.py Normal file
View File

@ -0,0 +1,24 @@
class Provider():
def __init__(self, title: str, count: int, text_data_list) -> None:
self.title = title
self.count = count
self.text_data_list = text_data_list
def get_fake_percentage(self) -> float:
count_all = 0
count_fake = 0
for text_data in self.text_data_list:
#print(text_data.provider)
#print("FAKE" if text_data.is_fake_news else "REAL")
count_all += 1
if text_data.is_fake_news:
count_fake += 1
if count_all == 0:
return 0.0
return (count_fake / count_all) * 100

View File

@ -1,4 +1,4 @@
import sqlite3
import duckdb
class FakeNewsChecker:
def __init__(self, db_name='fake_news_checker.db'):
@ -6,49 +6,50 @@ class FakeNewsChecker:
self.create_table()
def create_connection(self):
return sqlite3.connect(self.db_name)
return duckdb.connect(self.db_name)
def create_table(self):
conn = self.create_connection()
cursor = conn.cursor()
cursor.execute('''
conn.execute('''
CREATE TABLE IF NOT EXISTS url_info (
id INTEGER PRIMARY KEY AUTOINCREMENT,
url TEXT NOT NULL,
anbieter TEXT NOT NULL,
id INTEGER PRIMARY KEY,
url VARCHAR NOT NULL,
anbieter VARCHAR NOT NULL,
is_fake_news BOOLEAN NOT NULL
)
''')
conn.commit()
conn.close()
def get_next_id(self):
conn = self.create_connection()
result = conn.execute('SELECT COALESCE(MAX(id), 0) + 1 FROM url_info').fetchone()
conn.close()
return result[0]
def insert_data(self, url, anbieter, is_fake_news):
conn = self.create_connection()
cursor = conn.cursor()
cursor.execute('''
INSERT INTO url_info (url, anbieter, is_fake_news)
VALUES (?, ?, ?)
''', (url, anbieter, is_fake_news))
conn.commit()
next_id = self.get_next_id()
conn.execute('''
INSERT INTO url_info (id, url, anbieter, is_fake_news)
VALUES (?, ?, ?, ?)
''', [next_id, url, anbieter, bool(is_fake_news)])
conn.close()
def fetch_data(self):
conn = self.create_connection()
cursor = conn.cursor()
cursor.execute('SELECT * FROM url_info')
rows = cursor.fetchall()
result = conn.execute('SELECT * FROM url_info').fetchall()
conn.close()
return rows
return result
# Beispielnutzung der Klasse
if __name__ == '__main__':
checker = FakeNewsChecker()
# Daten hinzufügen
checker.insert_data('https://example.com/news/123', 'Example News', 0)
checker.insert_data('https://fakenews.com/article/456', 'Fake News', 1)
checker.insert_data('https://example.com/news/123', 'Example News', False)
checker.insert_data('https://fakenews.com/article/456', 'Fake News', True)
# Daten abrufen
data = checker.fetch_data()
for row in data:
print(f"ID: {row[0]}, URL: {row[1]}, Anbieter: {row[2]}, Fake News: {'Ja' if row[3] else 'Nein'}")
print(f"ID: {row[0]}, URL: {row[1]}, Anbieter: {row[2]}, Fake News: {'Ja' if row[3] else 'Nein'}")

View File

@ -38,6 +38,10 @@ class MainFrame(ctk.CTkFrame):
self.header = ctk.CTkLabel(self.scrollview, text="Leaderboard", font=("Arial", 24, "bold"))
self.header.pack(pady=10, padx=10, anchor="w")
# Container für Provider-Einträge
self.provider_container = ctk.CTkFrame(self.scrollview)
self.provider_container.pack(fill="both", expand=True)
def set_controller(self, controller):
self.controller = controller