Entity Node es un paquete de longitud fija de 4 palabras (64 bits) que identifica entidades (personas, lugares, objetos, organizaciones, conceptos, etc.) en el flujo GEUL.

Esencia de SIDX

CaracterísticaDescripción
Non-uniqueMúltiples entidades pueden tener el mismo SIDX
Multi-SIDXUna entidad puede tener varios SIDX (por momento/rol)
Bit = significadoLa posición del bit en sí representa un atributo
Continuo abstracto/concretoSe distingue por el grado de llenado de Mode y Attributes

Ejemplos:

  • Trump (empresario inmobiliario) → SIDX_A
  • Trump (presidente) → SIDX_B (SIDX diferente)
  • “Human + Male + Korea” → abstracto “hombre coreano”
  • “Human + Male + Korea + 1946 + Business + …” → casi una persona específica

Principios de diseño

Renuncia a Q-ID interno:

  • Inversión total de bits en alineación semántica pura
  • Maximización del rendimiento de filtrado SIMD de WMS
  • Q-ID se conecta por separado mediante Triple: (Entity_SIDX, P-externalID, "Q12345")

Serial bits innecesarios:

  • Las consultas WMS tienen 2 fases: reducción de rango con SIMD → verificación de detalle dentro del rango
  • Serial es un número sin significado, no contribuye a SIMD
  • Invertir esos bits en alineación semántica permite reducir más en la primera fase

Disposición de bits (4 palabras = 64 bits)

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

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

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

4th WORD (16 bits)
┌─────────────────────────────┐
│   Attributes inferiores 16 bits  │
└─────────────────────────────┘
CampoBitsTamañoDescripción
Prefix1-770001001 (Entity Node)
Mode8-1038 modos de cuantificación/número
EntityType11-16664 tipos superiores
Attributes17-6448Esquema variable por tipo

Mode (3 bits)

Mode expresa de forma unificada la cuantificación y el número de la entidad en 3 bits.

CódigoBinarioSignificadoEjemplo
0000Entidad registradaYi Sun-sin, Samsung, BTS
1001Singular definido“esa persona”
2010Pocos definidos“esos pocos”
3011Plural definido“esas personas”
4100Universal“todos los ~”
5101Existencial“algún ~”
6110Indefinido“cualquier ~”
7111Genérico“~ en general”

Entidad registrada (Mode=0)

  • Entidades mapeadas a IDs externos como Q-IDs de Wikidata, Synsets de WordNet, etc.
  • El Q-ID se conecta mediante Triple: (Entity_SIDX, P-externalID, "Q12345")
  • Independiente del concepto de número: Samsung es “uno” pero es ambiguo decir singular, BTS es un grupo pero es una sola entidad

Pronombres/abstractos (Mode=1~7)

  • Se especifica el rango semántico con EntityType + Attributes
  • Cuantos más bits se llenen, más concreto es
  • Ejemplo: Human(Type) + Male(Attr) + Korea(Attr) = “hombre coreano”

EntityType (6 bits = 64)

Se asignan 64 tipos superiores basados en estadísticas de frecuencia de Wikidata P31 (instance of). La clasificación detallada se maneja con bits de subcategoría dentro de Attributes.

RangoCategoríaCantidadTipos representativos
0x00-0x07Seres vivos/Personas8Human, Taxon, Gene, Protein
0x08-0x0BQuímica/Materia4Chemical, Compound, Mineral, Drug
0x0C-0x13Cuerpos celestes8Star, Galaxy, Asteroid, Planet
0x14-0x1BGeografía/Naturaleza8Mountain, River, Lake, Island
0x1C-0x23Lugares/Administración8Settlement, Village, Street, Park
0x24-0x2BEdificaciones8Building, Church, School, Bridge
0x2C-0x2FOrganizaciones4Organization, Business, PoliticalParty
0x30-0x3BObras creativas12Painting, Document, Film, Album
0x3C-0x3FEventos/Otros4SportsSeason, Event, Election, Other

Tabla de códigos (64 completos)

CódigoTipoQ-IDEntidades
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-Para extensión

Attributes (48 bits)

Es un esquema variable por tipo que se interpreta con diferente significado para cada EntityType. Se asignan más bits a los atributos de alta frecuencia y se utilizan directamente en el filtrado SIMD de WMS.

Human (0x00) Attributes

┌──────────┬────────┬────────┬──────┬────────┬────────┬─────────┬──────────┬────────────┬──────────┐
│ Subcateg.│ Ocup.  │ Nacion.│ Era  │ Década │ Sexo   │ Notor.  │ Idioma   │ Región nac.│ Campo act│
│  5bit    │  6bit  │  8bit  │ 4bit │  4bit  │  2bit  │  3bit   │  6bit    │   6bit     │   4bit   │
└──────────┴────────┴────────┴──────┴────────┴────────┴─────────┴──────────┴────────────┴──────────┘
offset:  0        5       11      19     23      27      29        32         38          44

Star (0x0C) Attributes

┌────────────┬────────────┬──────────┬──────────┬────────┬────────┬──────────┬──────────┬────────┬────────┐
│ Constelac. │ Tipo espec.│ Cl. lum. │ Mag. ap. │ AR     │ Dec    │ Flags    │ Vel. rad.│ Corr.roj│ Paral. │
│   7bit     │    4bit    │   3bit   │  4bit    │  4bit  │  4bit  │   6bit   │   5bit   │  5bit  │  4bit  │
└────────────┴────────────┴──────────┴──────────┴────────┴────────┴──────────┴──────────┴────────┴────────┘

Definición de bits de flags:

  • bit0: IR (fuente infrarroja)
  • bit1: Radio (fuente de radio)
  • bit2: X-ray (fuente de rayos X)
  • bit3: Binary (estrella binaria)
  • bit4: Variable (estrella variable)
  • bit5: HighPM (movimiento propio alto)

Operaciones

Creación de Entity

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')
    )

Análisis de Entity

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
    }

Ejemplos

Entidad registrada: Yi Sun-sin

# Yi Sun-sin (Q211789)
yi_sun_sin = make_entity(
    mode=0,              # Entidad registrada
    entity_type=0x00,    # Human
    attrs=(
        (0x06 << 43) |   # Subcategoría: Military
        (0x01 << 37) |   # Ocupación: Admiral
        (0x52 << 29) |   # Nacionalidad: Korea
        (0x5 << 25) |    # Era: Early Modern
        (0x0 << 21) |    # Década: 1540s
        (0x01 << 19) |   # Sexo: Male
        (0x7 << 16)      # Notoriedad: 1000+
    )
)
# Conexión Q-ID: Triple(yi_sun_sin_SIDX, P-externalID, "Q211789")

Abstracto: “todos los hombres coreanos”

all_korean_men = make_entity(
    mode=4,              # Universal (todos)
    entity_type=0x00,    # Human
    attrs=(
        (0x52 << 29) |   # Nacionalidad: Korea
        (0x01 << 19)     # Sexo: Male
    )
)

Mapeo de subtipos

Muchos tipos de Wikidata son subtipos de los 64 EntityTypes. El codificador observa el valor P31 y lo enruta al tipo superior apropiado.

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

Cobertura

ElementoValor
Total de entidades Wikidata117,419,925
Internas de Wikimedia (excluidas)8,565,353 (7.3%)
Objetivo SIDX108,854,572 (92.7%)
Cobertura directa de 64 tipos36,295,074 (33.3%)
Absorción de subtipos71,842,429 (66.0%)
Fallback Other717,069 (0.7%)
Cobertura final100%
Tasa de colisión< 0.01%

Conexión de Q-IDs

Entity Node no contiene Q-IDs internamente; se conectan por separado mediante Triple Edge.

Subject:  Entity_SIDX (64 bits)
Property: P-externalID (ej: P-Wikidata)
Object:   "Q12345" (cadena o entero)