Spaces:
Sleeping
Sleeping
| import pandas as pd | |
| class FastFacts: | |
| def __init__(self): | |
| self.facts = {} # Dictionary to store facts by category | |
| def add_fact(self, category, fact): | |
| """ | |
| Add a single fact under a specific category. | |
| """ | |
| if not isinstance(category, str) or not isinstance(fact, str): | |
| print("Both category and fact must be strings.") | |
| return | |
| # Initialize category if it doesn't exist | |
| if category not in self.facts: | |
| self.facts[category] = [] | |
| self.facts[category].append(fact) | |
| def add_facts(self, category_facts): | |
| """ | |
| Add multiple facts under their respective categories. | |
| category_facts should be a dictionary where keys are categories and values are lists of facts. | |
| """ | |
| if not isinstance(category_facts, dict): | |
| print("Facts must be provided as a dictionary with categories as keys.") | |
| return | |
| for category, facts in category_facts.items(): | |
| if not isinstance(category, str) or not isinstance(facts, list): | |
| print(f"Skipping invalid category or facts: {category}") | |
| continue | |
| if category not in self.facts: | |
| self.facts[category] = [] | |
| self.facts[category].extend(f for f in facts if isinstance(f, str)) | |
| def get_all_facts(self): | |
| """ | |
| Returns all facts grouped by category. | |
| """ | |
| return self.facts | |
| def get_facts_by_category(self, category): | |
| """ | |
| Returns all facts under a specific category. | |
| """ | |
| return self.facts.get(category, []) | |
| def get_categories(self): | |
| """ | |
| Returns a list of all available categories. | |
| """ | |
| return list(self.facts.keys()) | |
| def __repr__(self): | |
| if not self.facts: | |
| return f"{self.__class__.__name__}: No facts available" | |
| return "\n".join( | |
| f"{category}: " + ", ".join(f"<{fact}>" for fact in facts) | |
| for category, facts in self.facts.items() | |
| ) | |
| def to_dict(self): | |
| """ | |
| Convert the FastFacts to a dictionary. | |
| """ | |
| return {"facts": self.facts} | |
| def read_from_excel(fact_file): | |
| """ | |
| Read facts from an Excel file and populate a FastFacts object. | |
| Args: | |
| fact_file (str): Path to the Excel file. | |
| Returns: | |
| FastFacts: A populated FastFacts object. | |
| """ | |
| try: | |
| df = pd.read_excel(fact_file) | |
| # Ensure the expected columns exist | |
| if "Category" not in df.columns or "FastFacts" not in df.columns: | |
| print("Error: Expected columns 'Category' and 'FastFacts' not found in the file.") | |
| return None | |
| # Drop rows with missing FastFacts | |
| df = df.dropna(subset=["FastFacts"]) | |
| # Group facts by category | |
| grouped_facts = df.groupby("Category")["FastFacts"].apply(list).to_dict() | |
| # Create a FastFacts object and populate it | |
| fast_facts_obj = FastFacts() | |
| fast_facts_obj.add_facts(grouped_facts) | |
| return fast_facts_obj | |
| except Exception as e: | |
| print(f"An error occurred while reading from the Excel file: {e}") | |
| return None | |