A GPTC model to classify American news as right- or left-leaning
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
1.7 KiB

import sqlite3
import tomli
with open("sources.toml", "rb") as f:
sources = tomli.load(f)
con = sqlite3.connect("articles.db")
con.execute("CREATE TABLE IF NOT EXISTS articles(source, category, url, text);")
article_count = len(list(con.execute("SELECT url FROM articles")))
left_article_count = len(list(con.execute("SELECT url FROM articles WHERE category = 'left'")))
right_article_count = len(list(con.execute("SELECT url FROM articles WHERE category = 'right'")))
source_count = 0
left_source_count = 0
right_source_count = 0
left_sources = []
right_sources = []
for source_id, source_info in sources.items():
source_count += 1
if source_info["category"] == "left":
left_source_count += 1
source_list = left_sources
else:
right_source_count += 1
source_list = right_sources
source_list.append({
"name": source_info["name"],
"sort": source_info.get("sort", source_info["name"]),
"count": len(list(con.execute("SELECT url FROM articles WHERE source = ?", (source_id,)))),
})
left_sources.sort(key=lambda x: x["sort"])
right_sources.sort(key=lambda x: x["sort"])
left_breakdown = "\n".join([f"* {source['name']}: {source['count']}" for source in left_sources])
right_breakdown = "\n".join([f"* {source['name']}: {source['count']}" for source in right_sources])
con.commit()
con.close()
print(f"""\
This model contains a total of {article_count} articles from {source_count} sources.
## Left
{left_breakdown}
Left total: {left_article_count} articles from {left_source_count} sources
## Right
{right_breakdown}
Right total: {right_article_count} articles from {right_source_count} sources""")