Skip to main content

Represent Danbooru folksonomy as a directed graph

Project description

Danbooru Tag Graph

A NetworkX-based graph system for efficiently managing Danbooru tag relationships including implications, aliases, and deprecated status.

Features

  • High-performance graph operations using NetworkX
  • Tag relationship management (implications and aliases)
  • Deprecated tag tracking
  • Efficient serialization with pickle
  • Transitive relationship queries
  • Batch operations for optimal performance

Installation

pip install danbooru-tag-graph

Quick Start

from danbooru_tag_graph import DanbooruTagGraph

# Create a new graph
graph = DanbooruTagGraph()

# Add tags
graph.add_tag("cat", is_deprecated=False, fetched=True)
graph.add_tag("animal", is_deprecated=False, fetched=True)
graph.add_tag("feline", is_deprecated=False, fetched=True)

# Add relationships
graph.add_implication("cat", "animal")  # cat implies animal
graph.add_alias("cat", "feline")        # cat and feline are aliases

# Query relationships
implications = graph.get_implications("cat")
aliases = graph.get_aliases("cat")
transitive = graph.get_transitive_implications("cat")

# Expand tags with frequencies
expanded_tags, frequencies = graph.expand_tags(["cat"])
print(f"Expanded: {expanded_tags}")
print(f"Frequencies: {frequencies}")

# Save/load graph
graph.save_graph("my_tags.pickle")
new_graph = DanbooruTagGraph("my_tags.pickle")

Graph Structure

The tag graph uses NetworkX's MultiDiGraph with:

  • Nodes: Individual tags with metadata (deprecated status, fetched status, etc.)
  • Edges: Two types:
    1. 'implication': Directed edges from antecedent to consequent tags
    2. 'alias': Bidirectional edges between alias tags

Performance Benefits

  • Single file load vs thousands of individual files
  • In-memory graph operations instead of repeated file I/O
  • Batch relationship queries and transitive closure pre-computation
  • Efficient serialization with pickle

API Reference

DanbooruTagGraph

Core Methods

  • add_tag(tag, is_deprecated=False, fetched=False, **metadata) - Add a tag node
  • add_implication(antecedent, consequent) - Add implication relationship
  • add_alias(tag1, tag2) - Add alias relationship
  • is_tag_deprecated(tag) - Check if tag is deprecated
  • mark_tag_fetched(tag) - Mark tag as having relationships fetched
  • is_tag_fetched(tag) - Check if tag relationships are fetched

Query Methods

  • get_implications(tag, include_deprecated=False) - Get direct implications
  • get_aliases(tag, include_deprecated=False) - Get direct aliases
  • get_transitive_implications(tag, include_deprecated=False) - Get all transitive implications
  • get_alias_group(tag, include_deprecated=False) - Get complete alias group
  • expand_tags(tags, include_deprecated=False) - Expand tags with frequencies

Persistence Methods

  • load_graph(cache_file) - Load graph from pickle file
  • save_graph(cache_file=None) - Save graph to pickle file
  • auto_save() - Save if graph has been modified

Utility Methods

  • stats() - Get graph statistics
  • get_unfetched_tags(tags) - Get list of tags needing data fetch
  • import_from_json_cache(cache_dir) - Import from old JSON cache format

License

MIT License - see LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

danbooru_tag_graph-0.2.2.tar.gz (15.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

danbooru_tag_graph-0.2.2-py3-none-any.whl (9.4 kB view details)

Uploaded Python 3

File details

Details for the file danbooru_tag_graph-0.2.2.tar.gz.

File metadata

  • Download URL: danbooru_tag_graph-0.2.2.tar.gz
  • Upload date:
  • Size: 15.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.17

File hashes

Hashes for danbooru_tag_graph-0.2.2.tar.gz
Algorithm Hash digest
SHA256 9c671b56503d034a55073b89ad801b3f466f599fd35eb494694f03150f35bdb0
MD5 7abf55032b6f0d57470d686e1a1b30a6
BLAKE2b-256 2d8f0020cc7b7f8e89872db9120be86dd26507aedf233ec63352d4a5f8e0fc1a

See more details on using hashes here.

File details

Details for the file danbooru_tag_graph-0.2.2-py3-none-any.whl.

File metadata

File hashes

Hashes for danbooru_tag_graph-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c89d6572c158340129bcb3592517f80615c60ca00f46cc7d27eaf210f33c8ff4
MD5 6f63af9bf0c66ac71b0de7cf8f745b08
BLAKE2b-256 9b07a6bb58a86cc188e506081a0196640325eafeaef98573fb39423bdd960bfe

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page