103 lines
3.0 KiB
Markdown
103 lines
3.0 KiB
Markdown
# 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
|