Entity Node é um pacote de comprimento fixo de 4 palavras (64 bits) que identifica entidades (pessoas, lugares, objetos, organizações, conceitos, etc.) no fluxo GEUL.

Essência do SIDX

CaracterísticaDescrição
Non-uniqueMúltiplas entidades podem ter o mesmo SIDX
Multi-SIDXUma entidade pode ter vários SIDX (por momento/papel)
Bit = significadoA posição do bit em si representa um atributo
Contínuo abstrato/concretoDistingue-se pelo grau de preenchimento de Mode e Attributes

Exemplos:

  • Trump (empresário imobiliário) → SIDX_A
  • Trump (presidente) → SIDX_B (SIDX diferente)
  • “Human + Male + Korea” → abstrato “homem coreano”
  • “Human + Male + Korea + 1946 + Business + …” → quase uma pessoa específica

Princípios de design

Renúncia ao Q-ID interno:

  • Investimento total de bits no alinhamento semântico puro
  • Maximização do desempenho de filtragem SIMD do WMS
  • Q-ID é conectado separadamente via Triple: (Entity_SIDX, P-externalID, "Q12345")

Bits Serial desnecessários:

  • Consultas WMS têm 2 fases: redução de alcance com SIMD → verificação de detalhe dentro do alcance
  • Serial é um número sem significado, não contribui para SIMD
  • Investir esses bits em alinhamento semântico permite reduzir mais na primeira fase

Layout de bits (4 palavras = 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 médios 16 bits      │
└─────────────────────────────┘

4th WORD (16 bits)
┌─────────────────────────────┐
│   Attributes inferiores 16 bits  │
└─────────────────────────────┘
CampoBitsTamanhoDescrição
Prefix1-770001001 (Entity Node)
Mode8-1038 modos de quantificação/número
EntityType11-16664 tipos superiores
Attributes17-6448Esquema variável por tipo

Mode (3 bits)

Mode expressa de forma unificada a quantificação e o número da entidade em 3 bits.

CódigoBinárioSignificadoExemplo
0000Entidade registradaYi Sun-sin, Samsung, BTS
1001Singular definido“essa pessoa”
2010Poucos definidos“esses poucos”
3011Plural definido“essas pessoas”
4100Universal“todos os ~”
5101Existencial“algum ~”
6110Indefinido“qualquer ~”
7111Genérico“~ em geral”

Entidade registrada (Mode=0)

  • Entidades mapeadas para IDs externos como Q-IDs do Wikidata, Synsets do WordNet, etc.
  • O Q-ID é conectado via Triple: (Entity_SIDX, P-externalID, "Q12345")
  • Independente do conceito de número: Samsung é “um” mas é ambíguo dizer singular, BTS é um grupo mas é uma única entidade

Pronomes/abstratos (Mode=1~7)

  • Especifica-se o alcance semântico com EntityType + Attributes
  • Quanto mais bits preenchidos, mais concreto
  • Exemplo: Human(Type) + Male(Attr) + Korea(Attr) = “homem coreano”

EntityType (6 bits = 64)

Atribuem-se 64 tipos superiores com base em estatísticas de frequência do Wikidata P31 (instance of). A classificação detalhada é tratada com bits de subcategoria dentro dos Attributes.

FaixaCategoriaQuantidadeTipos representativos
0x00-0x07Seres vivos/Pessoas8Human, Taxon, Gene, Protein
0x08-0x0BQuímica/Matéria4Chemical, Compound, Mineral, Drug
0x0C-0x13Corpos celestes8Star, Galaxy, Asteroid, Planet
0x14-0x1BGeografia/Natureza8Mountain, River, Lake, Island
0x1C-0x23Lugares/Administração8Settlement, Village, Street, Park
0x24-0x2BEdificações8Building, Church, School, Bridge
0x2C-0x2FOrganizações4Organization, Business, PoliticalParty
0x30-0x3BObras criativas12Painting, Document, Film, Album
0x3C-0x3FEventos/Outros4SportsSeason, Event, Election, Other

Tabela 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 extensão

Attributes (48 bits)

É um esquema variável por tipo que é interpretado com significado diferente para cada EntityType. Atribuem-se mais bits aos atributos de alta frequência e são utilizados diretamente na filtragem SIMD do WMS.

Human (0x00) Attributes

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

Star (0x0C) Attributes

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

Definição dos bits de flags:

  • bit0: IR (fonte infravermelha)
  • bit1: Radio (fonte de rádio)
  • bit2: X-ray (fonte de raios X)
  • bit3: Binary (estrela binária)
  • bit4: Variable (estrela variável)
  • bit5: HighPM (movimento próprio alto)

Operações

Criação 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álise 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
    }

Exemplos

Entidade registrada: Yi Sun-sin

# Yi Sun-sin (Q211789)
yi_sun_sin = make_entity(
    mode=0,              # Entidade registrada
    entity_type=0x00,    # Human
    attrs=(
        (0x06 << 43) |   # Subcategoria: Military
        (0x01 << 37) |   # Ocupação: Admiral
        (0x52 << 29) |   # Nacionalidade: Korea
        (0x5 << 25) |    # Era: Early Modern
        (0x0 << 21) |    # Década: 1540s
        (0x01 << 19) |   # Sexo: Male
        (0x7 << 16)      # Notoriedade: 1000+
    )
)
# Conexão Q-ID: Triple(yi_sun_sin_SIDX, P-externalID, "Q211789")

Abstrato: “todos os homens coreanos”

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

Mapeamento de subtipos

Muitos tipos do Wikidata são subtipos dos 64 EntityTypes. O codificador observa o valor P31 e o direciona para o tipo superior apropriado.

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 do Wikimedia (excluídas)8,565,353 (7.3%)
Alvo SIDX108,854,572 (92.7%)
Cobertura direta de 64 tipos36,295,074 (33.3%)
Absorção de subtipos71,842,429 (66.0%)
Fallback Other717,069 (0.7%)
Cobertura final100%
Taxa de colisão< 0.01%

Conexão de Q-IDs

Entity Node não contém Q-IDs internamente; são conectados separadamente via Triple Edge.

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