Entity Node est un paquet a longueur fixe de 4 mots (64 bits) qui identifie les entites (personnes, lieux, objets, organisations, concepts, etc.) dans le flux GEUL.

Essence de SIDX

CaracteristiqueDescription
Non-uniquePlusieurs entites peuvent partager le meme SIDX
Multi-SIDXUne entite peut avoir plusieurs SIDX (selon le moment/role)
Bit = SemantiqueLa position du bit elle-meme represente un attribut
Continuum abstrait/concretDistingue par le Mode et le degre de remplissage des Attributes

Exemples :

  • Trump (homme d’affaires immobilier) → SIDX_A
  • Trump (president) → SIDX_B (SIDX different)
  • “Human + Male + Korea” → abstrait : “homme coreen”
  • “Human + Male + Korea + 1946 + Business + …” → presque un individu specifique

Principes de conception

Abandon de l’identifiant Q integre :

  • Investissement total des bits dans l’alignement semantique pur
  • Maximisation des performances de filtrage SIMD du WMS
  • L’identifiant Q est relie separement via Triple Edge : (Entity_SIDX, P-externalID, "Q12345")

Bits Serial non necessaires :

  • Les requetes WMS se font en 2 etapes : reduction de portee par SIMD → verification des details dans la portee
  • Serial est un nombre sans signification qui ne contribue pas au SIMD
  • Investir ces bits dans l’alignement semantique resserre davantage la 1re etape

Disposition des bits (4 mots = 64 bits)

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

2nd WORD (16 bits)
┌─────────────────────────────┐
│   Attributes bits sup. 16   │
└─────────────────────────────┘

3rd WORD (16 bits)
┌─────────────────────────────┐
│   Attributes bits moy. 16   │
└─────────────────────────────┘

4th WORD (16 bits)
┌─────────────────────────────┐
│   Attributes bits inf. 16   │
└─────────────────────────────┘
ChampBitsTailleDescription
Prefix1-770001001 (Entity Node)
Mode8-1038 modes de quantification/nombre
EntityType11-16664 types superieurs
Attributes17-6448Schema variable par type

Mode (3 bits)

Le Mode integre la quantification et le nombre de l’entite en 3 bits.

CodeBinaireSignificationExemple
0000Entite enregistreeYi Sun-sin, Samsung, BTS
1001Specifique singulier“cette personne”
2010Specifique petit nombre“ces quelques-uns”
3011Specifique pluriel“ces personnes”
4100Universel“tous les ~”
5101Existentiel“un certain ~”
6110Non specifique“n’importe quel ~”
7111Generique“~ en general”

Entite enregistree (Mode=0)

  • Entites mappees avec des identifiants externes tels que Wikidata Q-ID, WordNet Synset, etc.
  • Le Q-ID lui-meme est relie via Triple : (Entity_SIDX, P-externalID, "Q12345")
  • Independant du concept de nombre : Samsung est “un” mais dire singulier est ambigu, BTS est un groupe mais une seule entite

Pronoms/Abstraits (Mode=1~7)

  • La portee semantique est definie par EntityType + Attributes
  • Plus les bits sont remplis, plus c’est specifique
  • Exemple : Human(Type) + Male(Attr) + Korea(Attr) = “homme coreen”

EntityType (6 bits = 64)

64 types superieurs sont attribues sur la base de statistiques de frequence de Wikidata P31 (instance of). Les sous-classifications sont gerees par des bits de sous-categorie dans les Attributes.

PlageCategorieNb typesTypes representatifs
0x00-0x07Etres vivants/Personnes8Human, Taxon, Gene, Protein
0x08-0x0BChimie/Matiere4Chemical, Compound, Mineral, Drug
0x0C-0x13Objets celestes8Star, Galaxy, Asteroid, Planet
0x14-0x1BRelief/Nature8Mountain, River, Lake, Island
0x1C-0x23Lieux/Administration8Settlement, Village, Street, Park
0x24-0x2BBatiments8Building, Church, School, Bridge
0x2C-0x2FOrganisations4Organization, Business, PoliticalParty
0x30-0x3BOeuvres12Painting, Document, Film, Album
0x3C-0x3FEvenements/Divers4SportsSeason, Event, Election, Other

Table de codes (64 entrees completes)

CodeTypeQ-IDNb entites
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-Pour extension

Attributes (48 bits)

Un schema variable par type ou chaque EntityType est interprete avec une semantique differente. Les attributs a haute frequence recoivent davantage de bits et sont directement utilises pour le filtrage SIMD du WMS.

Attributes Human (0x00)

┌──────────┬────────┬────────┬──────┬────────┬────────┬─────────┬──────────┬────────────┬──────────┐
│ Sous-cat │ Metier │ Nation.│ Ere  │ Decen. │ Genre  │ Notori. │ Langue   │ Region     │ Domaine  │
│  5bit    │  6bit  │  8bit  │ 4bit │  4bit  │  2bit  │  3bit   │  6bit    │   6bit     │   4bit   │
└──────────┴────────┴────────┴──────┴────────┴────────┴─────────┴──────────┴────────────┴──────────┘
offset:  0        5       11      19     23      27      29        32         38          44

Attributes Star (0x0C)

┌────────────┬────────────┬──────────┬──────────┬────────┬────────┬──────────┬──────────┬────────┬────────┐
│ Constell.  │ Sp. type   │ Cl. lum. │ Mag. app.│ Asc. dr│ Declin.│ Drapeaux │ Vit. rad.│ Redsh. │ Parall.│
│   7bit     │    4bit    │   3bit   │  4bit    │  4bit  │  4bit  │   6bit   │   5bit   │  5bit  │  4bit  │
└────────────┴────────────┴──────────┴──────────┴────────┴────────┴──────────┴──────────┴────────┴────────┘

Definition des bits de drapeaux :

  • bit0 : IR (source infrarouge)
  • bit1 : Radio (source radio)
  • bit2 : X-ray (source de rayons X)
  • bit3 : Binary (etoile binaire)
  • bit4 : Variable (etoile variable)
  • bit5 : HighPM (mouvement propre eleve)

Operations

Creation d’entite

def make_entity(
    mode: int,           # 3 bits
    entity_type: int,    # 6 bits
    attrs: int           # 48 bits
) -> bytes:
    PREFIX = 0b0001001   # 7 bits (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')
    )

Analyse d’entite

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
    }

Exemples

Entite enregistree : Yi Sun-sin

# Yi Sun-sin (Q211789)
yi_sun_sin = make_entity(
    mode=0,              # Entite enregistree
    entity_type=0x00,    # Human
    attrs=(
        (0x06 << 43) |   # Sous-cat : Military
        (0x01 << 37) |   # Metier : Admiral
        (0x52 << 29) |   # Nationalite : Korea
        (0x5 << 25) |    # Ere : Early Modern
        (0x0 << 21) |    # Decennie : 1540s
        (0x01 << 19) |   # Genre : Male
        (0x7 << 16)      # Notoriete : 1000+
    )
)
# Liaison Q-ID : Triple(yi_sun_sin_SIDX, P-externalID, "Q211789")

Abstrait : “Tous les hommes coreens”

all_korean_men = make_entity(
    mode=4,              # Universel (tous)
    entity_type=0x00,    # Human
    attrs=(
        (0x52 << 29) |   # Nationalite : Korea
        (0x01 << 19)     # Genre : Male
    )
)

Mappage des sous-types

De nombreux types de Wikidata sont des sous-types des 64 EntityType. L’encodeur examine la valeur P31 et route vers le type superieur approprie.

Sous-type (P31)Type superieurNb entites
Q13442814 (scholarly article)Document (0x31)45.2M
Q67206691 (infrared source)Star (0x0C)2.6M
Q13100073 (village of China)Village (0x1D)592K

Couverture

ElementValeur
Total entites Wikidata117,419,925
Interne Wikimedia (exclu)8,565,353 (7.3%)
Cible SIDX108,854,572 (92.7%)
Couverture directe 64 types36,295,074 (33.3%)
Absorption sous-types71,842,429 (66.0%)
Repli Other717,069 (0.7%)
Couverture finale100%
Taux de collision< 0.01%

Liaison Q-ID

Entity Node n’integre pas le Q-ID ; il est relie separement via Triple Edge.

Subject:  Entity_SIDX (64 bits)
Property: P-externalID (ex: P-Wikidata)
Object:   "Q12345" (chaine ou entier)