# Comprehensive Tagging System A Python-based comprehensive tagging system for Obsidian vaults that analyzes files, generates appropriate tags based on directory structure and content analysis, and updates frontmatter while preserving existing data. ## Features - **Directory-based tagging**: Automatically generates tags based on vault directory structure - **Content analysis**: Analyzes file content to extract topics, technologies, and entities - **Hierarchical tag structures**: Creates organized tag hierarchies using forward slash notation - **Language detection**: Identifies content language (English, Chinese, mixed, unknown) - **Frontmatter management**: Updates YAML frontmatter while preserving existing data - **Batch processing**: Processes entire vaults efficiently with progress tracking - **Sensitive content detection**: Identifies and appropriately tags sensitive information - **Obsidian compatibility**: Ensures tags work with Obsidian's features and plugins ## Installation ```bash pip install -e . ``` ## Development Setup ```bash # Install development dependencies pip install -e ".[dev,test]" # Run tests pytest # Run tests with coverage pytest --cov=tagging_system # Format code black tagging_system tests # Lint code flake8 tagging_system tests # Type checking mypy tagging_system ``` ## Project Structure ``` tagging_system/ ├── __init__.py ├── core/ │ ├── __init__.py │ ├── models.py # Core data models │ └── interfaces.py # Abstract interfaces and protocols ├── config/ │ ├── __init__.py │ └── config.py # Configuration system └── implementations/ # Concrete implementations (to be added) tests/ ├── __init__.py ├── conftest.py # Pytest configuration and fixtures ├── test_models.py # Tests for core models ├── test_config.py # Tests for configuration system └── test_interfaces.py # Tests for interfaces and protocols ``` ## Configuration The system uses a flexible configuration system that supports both YAML and JSON formats. Configuration includes: - Directory mappings for tag generation - Tag hierarchies and structures - Sensitive content detection patterns - File processing settings - Language detection parameters ## Testing The project uses pytest with hypothesis for property-based testing: - **Unit tests**: Test specific functionality and edge cases - **Property-based tests**: Test universal properties across randomized inputs - **Integration tests**: Test component interactions Run tests with: ```bash pytest # Run all tests pytest -m unit # Run only unit tests pytest -m property # Run only property-based tests pytest -v # Verbose output ``` ## Requirements This implementation addresses the following requirements: - 1.1, 1.2, 1.3: Standardized frontmatter structure - Directory-based tag mapping - Content analysis and classification - Tag consistency and validation - Batch processing capabilities ## License MIT License