Entity Node ist ein Paket mit fester Laenge von 4 Woertern (64 Bit), das Entitaeten (Personen, Orte, Objekte, Organisationen, Konzepte usw.) im GEUL-Stream identifiziert.

Wesen von SIDX

EigenschaftBeschreibung
Non-uniqueMehrere Entitaeten koennen denselben SIDX teilen
Multi-SIDXEine Entitaet kann mehrere SIDX haben (je nach Zeitpunkt/Rolle)
Bit = SemantikDie Bitposition selbst repraesentiert ein Attribut
Abstrakt/Konkret-KontinuumUnterscheidung durch Mode und Fuellgrad der Attributes

Beispiele:

  • Trump (Immobilienunternehmer) → SIDX_A
  • Trump (Praesident) → SIDX_B (anderer SIDX)
  • “Human + Male + Korea” → abstraktes “koreanischer Mann”
  • “Human + Male + Korea + 1946 + Business + …” → nahezu eine bestimmte Person

Designprinzipien

Verzicht auf integrierten Q-Identifikator:

  • Vollstaendige Investition aller Bits in reine semantische Ausrichtung
  • Maximierung der WMS-SIMD-Filterleistung
  • Q-ID wird separat ueber Triple Edge verknuepft: (Entity_SIDX, P-externalID, "Q12345")

Keine Serial-Bits noetig:

  • WMS-Abfragen erfolgen in 2 Schritten: Eingrenzung durch SIMD → Detailpruefung im Bereich
  • Serial ist eine bedeutungslose Zahl, die nicht zum SIMD beitraegt
  • Diese Bits in semantische Ausrichtung zu investieren verengt den 1. Schritt weiter

Bit-Layout (4 Woerter = 64 Bit)

1st WORD (16 Bit)
┌─────────┬──────┬────────────┐
│ Prefix  │ Mode │ EntityType │
│  7bit   │ 3bit │   6bit     │
└─────────┴──────┴────────────┘

2nd WORD (16 Bit)
┌─────────────────────────────┐
│   Attributes obere 16 Bit   │
└─────────────────────────────┘

3rd WORD (16 Bit)
┌─────────────────────────────┐
│  Attributes mittlere 16 Bit │
└─────────────────────────────┘

4th WORD (16 Bit)
┌─────────────────────────────┐
│   Attributes untere 16 Bit  │
└─────────────────────────────┘
FeldBitsGroesseBeschreibung
Prefix1-770001001 (Entity Node)
Mode8-1038 Quantifikations-/Numerus-Modi
EntityType11-16664 Obertypen
Attributes17-6448Variables Schema pro Typ

Mode (3 Bit)

Der Mode integriert Quantifikation und Numerus der Entitaet in 3 Bit.

CodeBinaerBedeutungBeispiel
0000Registrierte EntitaetYi Sun-sin, Samsung, BTS
1001Spezifisch Singular“diese Person”
2010Spezifisch wenige“diese paar”
3011Spezifisch Plural“diese Leute”
4100Universell“alle ~”
5101Existenziell“irgendein ~”
6110Unspezifisch“ein beliebiger ~”
7111Generisch“~ im Allgemeinen”

Registrierte Entitaet (Mode=0)

  • Entitaeten, die mit externen IDs wie Wikidata Q-ID, WordNet Synset usw. gemappt sind
  • Die Q-ID selbst wird ueber Triple verknuepft: (Entity_SIDX, P-externalID, "Q12345")
  • Unabhaengig vom Numerus-Konzept: Samsung ist “eins”, aber Singular zu sagen ist ungenau, BTS ist eine Gruppe, aber eine einzelne Entitaet

Pronomen/Abstrakta (Mode=1~7)

  • Der semantische Bereich wird durch EntityType + Attributes definiert
  • Je mehr Bits gefuellt sind, desto spezifischer
  • Beispiel: Human(Type) + Male(Attr) + Korea(Attr) = “koreanischer Mann”

EntityType (6 Bit = 64)

64 Obertypen werden auf Basis der Haeufigkeitsstatistiken von Wikidata P31 (instance of) zugewiesen. Unterklassifikationen werden durch Unterkategorie-Bits in den Attributes behandelt.

BereichKategorieAnzahl TypenRepraesentative Typen
0x00-0x07Lebewesen/Personen8Human, Taxon, Gene, Protein
0x08-0x0BChemie/Materie4Chemical, Compound, Mineral, Drug
0x0C-0x13Himmelskoerper8Star, Galaxy, Asteroid, Planet
0x14-0x1BGelaende/Natur8Mountain, River, Lake, Island
0x1C-0x23Orte/Verwaltung8Settlement, Village, Street, Park
0x24-0x2BGebaeude8Building, Church, School, Bridge
0x2C-0x2FOrganisationen4Organization, Business, PoliticalParty
0x30-0x3BWerke12Painting, Document, Film, Album
0x3C-0x3FEreignisse/Sonstiges4SportsSeason, Event, Election, Other

Codetabelle (alle 64 Eintraege)

CodeTypQ-IDEntitaeten
0x00HumanQ512.5M
0x01TaxonQ165213.8M
0x02GeneQ71871.2M
0x03ProteinQ80541.0M
0x04CellLineQ21014462154K
0x05FamilyNameQ101352662K
0x06GivenNameQ202444128K
0x07FictionalCharacterQ1563261798K
0x08ChemicalQ1131451711.3M
0x09CompoundQ111731.1M
0x0AMineralQ794662K
0x0BDrugQ1214045K
0x0CStarQ5233.6M
0x0DGalaxyQ3182.1M
0x0EAsteroidQ3863249K
0x0FQuasarQ83373178K
0x10PlanetQ63415K
0x11NebulaQ120578K
0x12StarClusterQ1688455K
0x13MoonQ25373K
0x14MountainQ8502518K
0x15HillQ54050321K
0x16RiverQ4022427K
0x17LakeQ23397292K
0x18StreamQ47521194K
0x19IslandQ23442153K
0x1ABayQ3959425K
0x1BCaveQ3550920K
0x1CSettlementQ486972580K
0x1DVillageQ532245K
0x1EHamletQ5084148K
0x1FStreetQ79007711K
0x20CemeteryQ39614298K
0x21AdminRegionQ15284100K
0x22ParkQ2269845K
0x23ProtectedAreaQ47397235K
0x24BuildingQ41176292K
0x25ChurchQ16970286K
0x26SchoolQ9842242K
0x27HouseQ3947235K
0x28StructureQ811979216K
0x29SportsVenueQ1076486145K
0x2ACastleQ2341342K
0x2BBridgeQ1228038K
0x2COrganizationQ43229531K
0x2DBusinessQ4830453242K
0x2EPoliticalPartyQ727835K
0x2FSportsTeamQ84701795K
0x30PaintingQ33052131.1M
0x31DocumentQ4984845M
0x32LiteraryWorkQ7725634395K
0x33FilmQ11424335K
0x34AlbumQ482994303K
0x35MusicalWorkQ105543609195K
0x36TVEpisodeQ21191270177K
0x37VideoGameQ7889172K
0x38TVSeriesQ539842685K
0x39PatentQ43305660289K
0x3ASoftwareQ739713K
0x3BWebsiteQ3512712K
0x3CSportsSeasonQ27020041183K
0x3DEventQ165668210K
0x3EElectionQ4023111K
0x3FOther-Fuer Erweiterung

Attributes (48 Bit)

Ein variables Schema pro Typ, bei dem jeder EntityType mit unterschiedlicher Semantik interpretiert wird. Hochfrequente Attribute erhalten mehr Bits und werden direkt fuer WMS-SIMD-Filterung genutzt.

Attributes Human (0x00)

┌──────────┬────────┬────────┬──────┬────────┬────────┬─────────┬──────────┬────────────┬──────────┐
│ Unterkat.│ Beruf  │ Nation.│ Aera │ Dekade │ Geschl.│ Bekannt.│ Sprache  │ Geburtsreg.│ Taetigk. │
│  5bit    │  6bit  │  8bit  │ 4bit │  4bit  │  2bit  │  3bit   │  6bit    │   6bit     │   4bit   │
└──────────┴────────┴────────┴──────┴────────┴────────┴─────────┴──────────┴────────────┴──────────┘
offset:  0        5       11      19     23      27      29        32         38          44

Attributes Star (0x0C)

┌────────────┬────────────┬──────────┬──────────┬────────┬────────┬──────────┬──────────┬────────┬────────┐
│ Sternbild  │ Spekt.typ  │ Leuchtk. │ Scheinb. │ Rekt.  │ Deklin.│ Flags    │ Rad.ges. │ Rotver.│ Parall.│
│   7bit     │    4bit    │   3bit   │  4bit    │  4bit  │  4bit  │   6bit   │   5bit   │  5bit  │  4bit  │
└────────────┴────────────┴──────────┴──────────┴────────┴────────┴──────────┴──────────┴────────┴────────┘

Flag-Bit-Definitionen:

  • bit0: IR (Infrarotquelle)
  • bit1: Radio (Radioquelle)
  • bit2: X-ray (Roentgenquelle)
  • bit3: Binary (Doppelstern)
  • bit4: Variable (veraenderlicher Stern)
  • bit5: HighPM (hohe Eigenbewegung)

Operationen

Entitaet erstellen

def make_entity(
    mode: int,           # 3 Bit
    entity_type: int,    # 6 Bit
    attrs: int           # 48 Bit
) -> bytes:
    PREFIX = 0b0001001   # 7 Bit (Entity Node)

    word1 = (PREFIX << 9) | (mode << 6) | entity_type
    word2 = (attrs >> 32) & 0xFFFF
    word3 = (attrs >> 16) & 0xFFFF
    word4 = attrs & 0xFFFF

    return (
        word1.to_bytes(2, 'big') +
        word2.to_bytes(2, 'big') +
        word3.to_bytes(2, 'big') +
        word4.to_bytes(2, 'big')
    )

Entitaet parsen

def parse_entity(data: bytes) -> dict:
    word1 = int.from_bytes(data[0:2], 'big')
    word2 = int.from_bytes(data[2:4], 'big')
    word3 = int.from_bytes(data[4:6], 'big')
    word4 = int.from_bytes(data[6:8], 'big')

    prefix = (word1 >> 9) & 0x7F
    mode = (word1 >> 6) & 0x7
    entity_type = word1 & 0x3F
    attrs = (word2 << 32) | (word3 << 16) | word4

    return {
        'prefix': prefix,
        'mode': mode,
        'entity_type': entity_type,
        'attrs': attrs
    }

Beispiele

Registrierte Entitaet: Yi Sun-sin

# Yi Sun-sin (Q211789)
yi_sun_sin = make_entity(
    mode=0,              # Registrierte Entitaet
    entity_type=0x00,    # Human
    attrs=(
        (0x06 << 43) |   # Unterkat.: Military
        (0x01 << 37) |   # Beruf: Admiral
        (0x52 << 29) |   # Nationalitaet: Korea
        (0x5 << 25) |    # Aera: Early Modern
        (0x0 << 21) |    # Dekade: 1540s
        (0x01 << 19) |   # Geschlecht: Male
        (0x7 << 16)      # Bekanntheit: 1000+
    )
)
# Q-ID-Verknuepfung: Triple(yi_sun_sin_SIDX, P-externalID, "Q211789")

Abstrakt: “Alle koreanischen Maenner”

all_korean_men = make_entity(
    mode=4,              # Universell (alle)
    entity_type=0x00,    # Human
    attrs=(
        (0x52 << 29) |   # Nationalitaet: Korea
        (0x01 << 19)     # Geschlecht: Male
    )
)

Untertyp-Mapping

Viele Wikidata-Typen sind Untertypen der 64 EntityType. Der Encoder prueft den P31-Wert und routet zum passenden Obertyp.

Untertyp (P31)ObertypEntitaeten
Q13442814 (scholarly article)Document (0x31)45.2M
Q67206691 (infrared source)Star (0x0C)2.6M
Q13100073 (village of China)Village (0x1D)592K

Abdeckung

ElementWert
Wikidata-Entitaeten gesamt117,419,925
Wikimedia-intern (ausgenommen)8,565,353 (7.3%)
SIDX-Ziel108,854,572 (92.7%)
Direkte Abdeckung 64 Typen36,295,074 (33.3%)
Untertypabsorption71,842,429 (66.0%)
Other-Fallback717,069 (0.7%)
Endabdeckung100%
Kollisionsrate< 0.01%

Q-ID-Verknuepfung

Entity Node integriert die Q-ID nicht, sondern verknuepft sie separat ueber Triple Edge.

Subject:  Entity_SIDX (64 Bit)
Property: P-externalID (z.B.: P-Wikidata)
Object:   "Q12345" (String oder Integer)