Rename bondFacet to bond_edge_type and clean up slipnet.json

The slipnet node previously called "bondFacet" was misleading since
"facet" is used throughout the codebase as a property name on Bond,
Group, and Rule objects. Renamed to "bond_edge_type" to better reflect
its role as a descriptor type category. Also removed precomputed
minPathToLetter data from slipnet.json.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Alex Linhares
2026-02-21 23:19:55 +00:00
parent 72d0bf3d3e
commit 866881be69
8 changed files with 121 additions and 603 deletions

View File

@ -3,7 +3,7 @@ from .workspaceStructure import WorkspaceStructure
class Bond(WorkspaceStructure):
# pylint: disable=too-many-arguments
def __init__(self, ctx, source, destination, bondCategory, bondFacet,
def __init__(self, ctx, source, destination, bondCategory, bond_edge_type,
sourceDescriptor, destinationDescriptor):
WorkspaceStructure.__init__(self, ctx)
slipnet = self.ctx.slipnet
@ -17,7 +17,7 @@ class Bond(WorkspaceStructure):
self.leftObject = self.destination
self.rightObject = self.source
self.directionCategory = slipnet.left
self.facet = bondFacet
self.facet = bond_edge_type
self.sourceDescriptor = sourceDescriptor
self.destinationDescriptor = destinationDescriptor
self.category = bondCategory

View File

@ -136,12 +136,12 @@ def __getScoutSource(ctx, slipnode, relevanceMethod, typeName):
return source
def __getDescriptors(bondFacet, source, destination):
def __getDescriptors(bond_edge_type, source, destination):
"""
Extract descriptors from source and destination objects for a given bond facet.
Args:
bondFacet: The descriptor type/facet for the bond (e.g., letterCategory)
bond_edge_type: The descriptor type/facet for the bond (e.g., letterCategory)
source: The source workspace object
destination: The destination workspace object
@ -151,8 +151,8 @@ def __getDescriptors(bondFacet, source, destination):
Raises:
AssertionError: If either object lacks the required descriptor type
"""
sourceDescriptor = source.getDescriptor(bondFacet)
destinationDescriptor = destination.getDescriptor(bondFacet)
sourceDescriptor = source.getDescriptor(bond_edge_type)
destinationDescriptor = destination.getDescriptor(bond_edge_type)
assert sourceDescriptor and destinationDescriptor
return sourceDescriptor, destinationDescriptor
@ -619,9 +619,9 @@ def __chooseBondFacet(ctx, source, destination):
]
sourceFacets = [d.descriptionType for d in source.descriptions if d.descriptionType in b]
bondFacets = [d.descriptionType for d in destination.descriptions if d.descriptionType in sourceFacets]
supports = [__supportForDescriptionType(ctx, f, source.string) for f in bondFacets]
return random.weighted_choice(bondFacets, supports)
bond_edge_types = [d.descriptionType for d in destination.descriptions if d.descriptionType in sourceFacets]
supports = [__supportForDescriptionType(ctx, f, source.string) for f in bond_edge_types]
return random.weighted_choice(bond_edge_types, supports)
@codelet('bottom-up-bond-scout')
@ -661,11 +661,11 @@ def bottom_up_bond_scout(ctx, codelet):
destination = chooseNeighbor(ctx, source)
assert destination
logging.info('destination: %s', destination)
bondFacet = __chooseBondFacet(ctx, source, destination)
assert bondFacet
logging.info('chosen bond facet: %s', bondFacet.get_name())
bond_edge_type = __chooseBondFacet(ctx, source, destination)
assert bond_edge_type
logging.info('chosen bond facet: %s', bond_edge_type.get_name())
logging.info('Source: %s, destination: %s', source, destination)
bond_descriptors = __getDescriptors(bondFacet, source, destination)
bond_descriptors = __getDescriptors(bond_edge_type, source, destination)
sourceDescriptor, destinationDescriptor = bond_descriptors
logging.info("source descriptor: %s", sourceDescriptor.name.upper())
logging.info("destination descriptor: %s",
@ -675,7 +675,7 @@ def bottom_up_bond_scout(ctx, codelet):
if category == slipnet.identity:
category = slipnet.sameness
logging.info('proposing %s bond ', category.name)
coderack.proposeBond(source, destination, category, bondFacet,
coderack.proposeBond(source, destination, category, bond_edge_type,
sourceDescriptor, destinationDescriptor)
@ -913,10 +913,10 @@ def top_down_bond_scout__category(ctx, codelet):
destination = chooseNeighbor(ctx, source)
logging.info('source: %s, destination: %s', source, destination)
assert destination
bondFacet = __chooseBondFacet(ctx, source, destination)
assert bondFacet
bond_edge_type = __chooseBondFacet(ctx, source, destination)
assert bond_edge_type
sourceDescriptor, destinationDescriptor = __getDescriptors(
bondFacet, source, destination)
bond_edge_type, source, destination)
forwardBond = sourceDescriptor.getBondCategory(destinationDescriptor)
if forwardBond == slipnet.identity:
forwardBond = slipnet.sameness
@ -926,11 +926,11 @@ def top_down_bond_scout__category(ctx, codelet):
assert category == forwardBond or category == backwardBond
if category == forwardBond:
coderack.proposeBond(source, destination, category,
bondFacet, sourceDescriptor,
bond_edge_type, sourceDescriptor,
destinationDescriptor)
else:
coderack.proposeBond(destination, source, category,
bondFacet, destinationDescriptor,
bond_edge_type, destinationDescriptor,
sourceDescriptor)
@ -972,15 +972,15 @@ def top_down_bond_scout__direction(ctx, codelet):
destination = chooseDirectedNeighbor(ctx, source, direction)
assert destination
logging.info('to object: %s', destination)
bondFacet = __chooseBondFacet(ctx, source, destination)
assert bondFacet
bond_edge_type = __chooseBondFacet(ctx, source, destination)
assert bond_edge_type
sourceDescriptor, destinationDescriptor = __getDescriptors(
bondFacet, source, destination)
bond_edge_type, source, destination)
category = sourceDescriptor.getBondCategory(destinationDescriptor)
assert category
if category == slipnet.identity:
category = slipnet.sameness
coderack.proposeBond(source, destination, category, bondFacet,
coderack.proposeBond(source, destination, category, bond_edge_type,
sourceDescriptor, destinationDescriptor)
@ -1171,7 +1171,7 @@ def top_down_group_scout__category(ctx, codelet):
return
direction = firstBond.directionCategory
search = True
bondFacet = None
bond_edge_type = None
# find leftmost object in group with these bonds
while search:
search = False
@ -1182,8 +1182,8 @@ def top_down_group_scout__category(ctx, codelet):
if source.leftBond.directionCategory != direction:
if source.leftBond.directionCategory:
continue
if not bondFacet or bondFacet == source.leftBond.facet:
bondFacet = source.leftBond.facet
if not bond_edge_type or bond_edge_type == source.leftBond.facet:
bond_edge_type = source.leftBond.facet
direction = source.leftBond.directionCategory
source = source.leftBond.leftObject
search = True
@ -1199,8 +1199,8 @@ def top_down_group_scout__category(ctx, codelet):
if destination.rightBond.directionCategory != direction:
if destination.rightBond.directionCategory:
continue
if not bondFacet or bondFacet == destination.rightBond.facet:
bondFacet = destination.rightBond.facet
if not bond_edge_type or bond_edge_type == destination.rightBond.facet:
bond_edge_type = destination.rightBond.facet
direction = source.rightBond.directionCategory
destination = destination.rightBond.rightObject
search = True
@ -1212,7 +1212,7 @@ def top_down_group_scout__category(ctx, codelet):
objects += [source.rightBond.rightObject]
source = source.rightBond.rightObject
coderack.proposeGroup(objects, bonds, groupCategory,
direction, bondFacet)
direction, bond_edge_type)
@codelet('top-down-group-scout--direction')
@ -1291,7 +1291,7 @@ def top_down_group_scout__direction(ctx, codelet):
assert category
groupCategory = category.getRelatedNode(slipnet.groupCategory)
logging.info('trying from %s to %s', source, category.name)
bondFacet = None
bond_edge_type = None
# find leftmost object in group with these bonds
search = True
while search:
@ -1303,8 +1303,8 @@ def top_down_group_scout__direction(ctx, codelet):
if source.leftBond.directionCategory != direction:
if source.leftBond.directionCategory:
continue
if not bondFacet or bondFacet == source.leftBond.facet:
bondFacet = source.leftBond.facet
if not bond_edge_type or bond_edge_type == source.leftBond.facet:
bond_edge_type = source.leftBond.facet
direction = source.leftBond.directionCategory
source = source.leftBond.leftObject
search = True
@ -1319,8 +1319,8 @@ def top_down_group_scout__direction(ctx, codelet):
if destination.rightBond.directionCategory != direction:
if destination.rightBond.directionCategory:
continue
if not bondFacet or bondFacet == destination.rightBond.facet:
bondFacet = destination.rightBond.facet
if not bond_edge_type or bond_edge_type == destination.rightBond.facet:
bond_edge_type = destination.rightBond.facet
direction = source.rightBond.directionCategory
destination = destination.rightBond.rightObject
search = True
@ -1333,7 +1333,7 @@ def top_down_group_scout__direction(ctx, codelet):
objects += [source.rightBond.rightObject]
source = source.rightBond.rightObject
coderack.proposeGroup(objects, bonds, groupCategory,
direction, bondFacet)
direction, bond_edge_type)
# noinspection PyStringFormat
@ -1402,8 +1402,8 @@ def group_scout__whole_string(ctx, codelet):
category = chosenBond.category
groupCategory = category.getRelatedNode(slipnet.groupCategory)
directionCategory = chosenBond.directionCategory
bondFacet = chosenBond.facet
coderack.proposeGroup(objects, bonds, groupCategory, directionCategory, bondFacet)
bond_edge_type = chosenBond.facet
coderack.proposeGroup(objects, bonds, groupCategory, directionCategory, bond_edge_type)
@codelet('group-strength-tester')
@ -1742,7 +1742,7 @@ def bottom_up_correspondence_scout(ctx, codelet):
# string description needs to be flipped
opposites = [m for m in distinguishingMappings
if m.initialDescriptionType == slipnet.stringPositionCategory
and m.initialDescriptionType != slipnet.bondFacet]
and m.initialDescriptionType != slipnet.bond_edge_type]
initialDescriptionTypes = [m.initialDescriptionType for m in opposites]
flipTargetObject = False
if (objectFromInitial.spansString() and
@ -1835,7 +1835,7 @@ def important_object_correspondence_scout(ctx, codelet):
# string description needs to be flipped
opposites = [m for m in distinguishingMappings
if m.initialDescriptionType == slipnet.stringPositionCategory
and m.initialDescriptionType != slipnet.bondFacet]
and m.initialDescriptionType != slipnet.bond_edge_type]
initialDescriptionTypes = [m.initialDescriptionType for m in opposites]
flipTargetObject = False
if (objectFromInitial.spansString()

View File

@ -230,23 +230,23 @@ class Coderack(object):
slipnet.letterCategory)
def proposeGroup(self, objects, bondList, groupCategory, directionCategory,
bondFacet):
bond_edge_type):
slipnet = self.ctx.slipnet
bondCategory = groupCategory.getRelatedNode(slipnet.bondCategory)
bondCategory.buffer = 100.0
if directionCategory:
directionCategory.buffer = 100.0
group = Group(objects[0].string, groupCategory, directionCategory,
bondFacet, objects, bondList)
bond_edge_type, objects, bondList)
urgency = bondCategory.bondDegreeOfAssociation()
self.newCodelet('group-strength-tester', urgency, [group])
def proposeBond(self, source, destination, bondCategory, bondFacet,
def proposeBond(self, source, destination, bondCategory, bond_edge_type,
sourceDescriptor, destinationDescriptor):
bondFacet.buffer = 100.0
bond_edge_type.buffer = 100.0
sourceDescriptor.buffer = 100.0
destinationDescriptor.buffer = 100.0
bond = Bond(self.ctx, source, destination, bondCategory, bondFacet,
bond = Bond(self.ctx, source, destination, bondCategory, bond_edge_type,
sourceDescriptor, destinationDescriptor)
urgency = bondCategory.bondDegreeOfAssociation()
self.newCodelet('bond-strength-tester', urgency, [bond])

View File

@ -32,7 +32,7 @@ class Group(WorkspaceObject):
if self.bondList and len(self.bondList):
firstFacet = self.bondList[0].facet
self.addBondDescription(
Description(self, slipnet.bondFacet, firstFacet))
Description(self, slipnet.bond_edge_type, firstFacet))
self.addBondDescription(
Description(self, slipnet.bondCategory, self.bondCategory))

View File

@ -106,7 +106,7 @@ class Slipnet(object):
self.groupCategory = self.__addNode('groupCategory', 80.0)
self.length = self.__addNode('length', 60.0)
self.objectCategory = self.__addNode('objectCategory', 90.0)
self.bondFacet = self.__addNode('bondFacet', 90.0)
self.bond_edge_type = self.__addNode('bond_edge_type', 90.0)
# some factors are considered "very relevant" a priori
self.initiallyClampedSlipnodes = [
@ -164,9 +164,9 @@ class Slipnet(object):
(self.groupCategory, self.predecessorGroup),
(self.groupCategory, self.successorGroup),
(self.groupCategory, self.samenessGroup),
# bond facets
(self.bondFacet, self.letterCategory),
(self.bondFacet, self.length),
# bond edge types
(self.bond_edge_type, self.letterCategory),
(self.bond_edge_type, self.length),
]
for a, b in links:
self.__addInstanceLink(a, b)

View File

@ -160,7 +160,7 @@ class SlipnetExporter:
self.groupCategory = self._addNode('groupCategory', 80.0)
self.length = self._addNode('length', 60.0)
self.objectCategory = self._addNode('objectCategory', 90.0)
self.bondFacet = self._addNode('bondFacet', 90.0)
self.bond_edge_type = self._addNode('bond_edge_type', 90.0)
self.initiallyClampedSlipnodes = [
self.letterCategory,
@ -222,9 +222,9 @@ class SlipnetExporter:
(self.groupCategory, self.predecessorGroup),
(self.groupCategory, self.successorGroup),
(self.groupCategory, self.samenessGroup),
# bond facets
(self.bondFacet, self.letterCategory),
(self.bondFacet, self.length),
# bond edge types
(self.bond_edge_type, self.letterCategory),
(self.bond_edge_type, self.length),
]
for a, b in links:
self._addInstanceLink(a, b)

View File

@ -11,528 +11,229 @@
"name": "a",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"a"
],
"nearestLetter": "a"
}
"shrunkLinkLength": 0.0
},
{
"name": "b",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"b"
],
"nearestLetter": "b"
}
"shrunkLinkLength": 0.0
},
{
"name": "c",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"c"
],
"nearestLetter": "c"
}
"shrunkLinkLength": 0.0
},
{
"name": "d",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"d"
],
"nearestLetter": "d"
}
"shrunkLinkLength": 0.0
},
{
"name": "e",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"e"
],
"nearestLetter": "e"
}
"shrunkLinkLength": 0.0
},
{
"name": "f",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"f"
],
"nearestLetter": "f"
}
"shrunkLinkLength": 0.0
},
{
"name": "g",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"g"
],
"nearestLetter": "g"
}
"shrunkLinkLength": 0.0
},
{
"name": "h",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"h"
],
"nearestLetter": "h"
}
"shrunkLinkLength": 0.0
},
{
"name": "i",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"i"
],
"nearestLetter": "i"
}
"shrunkLinkLength": 0.0
},
{
"name": "j",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"j"
],
"nearestLetter": "j"
}
"shrunkLinkLength": 0.0
},
{
"name": "k",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"k"
],
"nearestLetter": "k"
}
"shrunkLinkLength": 0.0
},
{
"name": "l",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"l"
],
"nearestLetter": "l"
}
"shrunkLinkLength": 0.0
},
{
"name": "m",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"m"
],
"nearestLetter": "m"
}
"shrunkLinkLength": 0.0
},
{
"name": "n",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"n"
],
"nearestLetter": "n"
}
"shrunkLinkLength": 0.0
},
{
"name": "o",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"o"
],
"nearestLetter": "o"
}
"shrunkLinkLength": 0.0
},
{
"name": "p",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"p"
],
"nearestLetter": "p"
}
"shrunkLinkLength": 0.0
},
{
"name": "q",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"q"
],
"nearestLetter": "q"
}
"shrunkLinkLength": 0.0
},
{
"name": "r",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"r"
],
"nearestLetter": "r"
}
"shrunkLinkLength": 0.0
},
{
"name": "s",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"s"
],
"nearestLetter": "s"
}
"shrunkLinkLength": 0.0
},
{
"name": "t",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"t"
],
"nearestLetter": "t"
}
"shrunkLinkLength": 0.0
},
{
"name": "u",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"u"
],
"nearestLetter": "u"
}
"shrunkLinkLength": 0.0
},
{
"name": "v",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"v"
],
"nearestLetter": "v"
}
"shrunkLinkLength": 0.0
},
{
"name": "w",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"w"
],
"nearestLetter": "w"
}
"shrunkLinkLength": 0.0
},
{
"name": "x",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"x"
],
"nearestLetter": "x"
}
"shrunkLinkLength": 0.0
},
{
"name": "y",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"y"
],
"nearestLetter": "y"
}
"shrunkLinkLength": 0.0
},
{
"name": "z",
"conceptualDepth": 10.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 0,
"path": [
"z"
],
"nearestLetter": "z"
}
"shrunkLinkLength": 0.0
},
{
"name": "1",
"conceptualDepth": 30.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 3,
"path": [
"1",
"length",
"letterCategory",
"j"
],
"nearestLetter": "j"
}
"shrunkLinkLength": 0.0
},
{
"name": "2",
"conceptualDepth": 30.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 3,
"path": [
"2",
"length",
"letterCategory",
"j"
],
"nearestLetter": "j"
}
"shrunkLinkLength": 0.0
},
{
"name": "3",
"conceptualDepth": 30.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 3,
"path": [
"3",
"length",
"letterCategory",
"j"
],
"nearestLetter": "j"
}
"shrunkLinkLength": 0.0
},
{
"name": "4",
"conceptualDepth": 30.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 3,
"path": [
"4",
"length",
"letterCategory",
"j"
],
"nearestLetter": "j"
}
"shrunkLinkLength": 0.0
},
{
"name": "5",
"conceptualDepth": 30.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 3,
"path": [
"5",
"length",
"letterCategory",
"j"
],
"nearestLetter": "j"
}
"shrunkLinkLength": 0.0
},
{
"name": "leftmost",
"conceptualDepth": 40.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 2,
"path": [
"leftmost",
"last",
"z"
],
"nearestLetter": "z"
}
"shrunkLinkLength": 0.0
},
{
"name": "rightmost",
"conceptualDepth": 40.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 2,
"path": [
"rightmost",
"last",
"z"
],
"nearestLetter": "z"
}
"shrunkLinkLength": 0.0
},
{
"name": "middle",
"conceptualDepth": 40.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 4,
"path": [
"middle",
"stringPositionCategory",
"leftmost",
"last",
"z"
],
"nearestLetter": "z"
}
"shrunkLinkLength": 0.0
},
{
"name": "single",
"conceptualDepth": 40.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 4,
"path": [
"single",
"stringPositionCategory",
"leftmost",
"last",
"z"
],
"nearestLetter": "z"
}
"shrunkLinkLength": 0.0
},
{
"name": "whole",
"conceptualDepth": 40.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 4,
"path": [
"whole",
"stringPositionCategory",
"leftmost",
"last",
"z"
],
"nearestLetter": "z"
}
"shrunkLinkLength": 0.0
},
{
"name": "first",
"conceptualDepth": 60.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 1,
"path": [
"first",
"a"
],
"nearestLetter": "a"
}
"shrunkLinkLength": 0.0
},
{
"name": "last",
"conceptualDepth": 60.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 1,
"path": [
"last",
"z"
],
"nearestLetter": "z"
}
"shrunkLinkLength": 0.0
},
{
"name": "left",
@ -542,17 +243,7 @@
"codelets": [
"top-down-bond-scout--direction",
"top-down-group-scout--direction"
],
"minPathToLetter": {
"hops": 3,
"path": [
"left",
"leftmost",
"last",
"z"
],
"nearestLetter": "z"
}
]
},
{
"name": "right",
@ -562,17 +253,7 @@
"codelets": [
"top-down-bond-scout--direction",
"top-down-group-scout--direction"
],
"minPathToLetter": {
"hops": 3,
"path": [
"right",
"leftmost",
"last",
"z"
],
"nearestLetter": "z"
}
]
},
{
"name": "predecessor",
@ -581,18 +262,7 @@
"shrunkLinkLength": 24.0,
"codelets": [
"top-down-bond-scout--category"
],
"minPathToLetter": {
"hops": 4,
"path": [
"predecessor",
"predecessorGroup",
"length",
"letterCategory",
"j"
],
"nearestLetter": "j"
}
]
},
{
"name": "successor",
@ -601,18 +271,7 @@
"shrunkLinkLength": 24.0,
"codelets": [
"top-down-bond-scout--category"
],
"minPathToLetter": {
"hops": 4,
"path": [
"successor",
"successorGroup",
"length",
"letterCategory",
"j"
],
"nearestLetter": "j"
}
]
},
{
"name": "sameness",
@ -621,17 +280,7 @@
"shrunkLinkLength": 0.0,
"codelets": [
"top-down-bond-scout--category"
],
"minPathToLetter": {
"hops": 3,
"path": [
"sameness",
"samenessGroup",
"letterCategory",
"j"
],
"nearestLetter": "j"
}
]
},
{
"name": "predecessorGroup",
@ -640,17 +289,7 @@
"shrunkLinkLength": 0.0,
"codelets": [
"top-down-group-scout--category"
],
"minPathToLetter": {
"hops": 3,
"path": [
"predecessorGroup",
"length",
"letterCategory",
"j"
],
"nearestLetter": "j"
}
]
},
{
"name": "successorGroup",
@ -659,17 +298,7 @@
"shrunkLinkLength": 0.0,
"codelets": [
"top-down-group-scout--category"
],
"minPathToLetter": {
"hops": 3,
"path": [
"successorGroup",
"length",
"letterCategory",
"j"
],
"nearestLetter": "j"
}
]
},
{
"name": "samenessGroup",
@ -678,74 +307,37 @@
"shrunkLinkLength": 0.0,
"codelets": [
"top-down-group-scout--category"
],
"minPathToLetter": {
"hops": 2,
"path": [
"samenessGroup",
"letterCategory",
"j"
],
"nearestLetter": "j"
}
]
},
{
"name": "identity",
"conceptualDepth": 90.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 8,
"path": null,
"nearestLetter": null
}
"shrunkLinkLength": 0.0
},
{
"name": "opposite",
"conceptualDepth": 90.0,
"intrinsicLinkLength": 80.0,
"shrunkLinkLength": 32.0,
"minPathToLetter": {
"hops": 8,
"path": null,
"nearestLetter": null
}
"shrunkLinkLength": 32.0
},
{
"name": "letter",
"conceptualDepth": 20.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 8,
"path": null,
"nearestLetter": null
}
"shrunkLinkLength": 0.0
},
{
"name": "group",
"conceptualDepth": 80.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 8,
"path": null,
"nearestLetter": null
}
"shrunkLinkLength": 0.0
},
{
"name": "letterCategory",
"conceptualDepth": 30.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 1,
"path": [
"letterCategory",
"j"
],
"nearestLetter": "j"
}
"shrunkLinkLength": 0.0
},
{
"name": "stringPositionCategory",
@ -754,17 +346,7 @@
"shrunkLinkLength": 0.0,
"codelets": [
"top-down-description-scout"
],
"minPathToLetter": {
"hops": 3,
"path": [
"stringPositionCategory",
"leftmost",
"last",
"z"
],
"nearestLetter": "z"
}
]
},
{
"name": "alphabeticPositionCategory",
@ -773,107 +355,43 @@
"shrunkLinkLength": 0.0,
"codelets": [
"top-down-description-scout"
],
"minPathToLetter": {
"hops": 2,
"path": [
"alphabeticPositionCategory",
"last",
"z"
],
"nearestLetter": "z"
}
]
},
{
"name": "directionCategory",
"conceptualDepth": 70.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 4,
"path": [
"directionCategory",
"left",
"leftmost",
"last",
"z"
],
"nearestLetter": "z"
}
"shrunkLinkLength": 0.0
},
{
"name": "bondCategory",
"conceptualDepth": 80.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 4,
"path": [
"bondCategory",
"sameness",
"samenessGroup",
"letterCategory",
"j"
],
"nearestLetter": "j"
}
"shrunkLinkLength": 0.0
},
{
"name": "groupCategory",
"conceptualDepth": 80.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 3,
"path": [
"groupCategory",
"samenessGroup",
"letterCategory",
"j"
],
"nearestLetter": "j"
}
"shrunkLinkLength": 0.0
},
{
"name": "length",
"conceptualDepth": 60.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 2,
"path": [
"length",
"letterCategory",
"j"
],
"nearestLetter": "j"
}
"shrunkLinkLength": 0.0
},
{
"name": "objectCategory",
"conceptualDepth": 90.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 8,
"path": null,
"nearestLetter": null
}
"shrunkLinkLength": 0.0
},
{
"name": "bondFacet",
"name": "bond_edge_type",
"conceptualDepth": 90.0,
"intrinsicLinkLength": 0,
"shrunkLinkLength": 0.0,
"minPathToLetter": {
"hops": 2,
"path": [
"bondFacet",
"letterCategory",
"j"
],
"nearestLetter": "j"
}
"shrunkLinkLength": 0.0
}
],
"links": [
@ -1967,24 +1485,24 @@
},
{
"source": "letterCategory",
"destination": "bondFacet",
"destination": "bond_edge_type",
"fixedLength": 60.0,
"type": "category"
},
{
"source": "bondFacet",
"source": "bond_edge_type",
"destination": "letterCategory",
"fixedLength": 100.0,
"type": "instance"
},
{
"source": "length",
"destination": "bondFacet",
"destination": "bond_edge_type",
"fixedLength": 30.0,
"type": "category"
},
{
"source": "bondFacet",
"source": "bond_edge_type",
"destination": "length",
"fixedLength": 100.0,
"type": "instance"

View File

@ -120,7 +120,7 @@ Figure~\ref{fig:comparison} shows scatter plots for all metrics. The eccentricit
The hop distance analysis ($r = 0.281$, $p = 0.113$) found no significant relationship between conceptual depth and distance to letter nodes. This weak positive trend fails significance, with $R^2 = 0.079$ explaining less than 8\% of variance.
Counterexamples abound: \texttt{bondFacet} (depth=90) is only 2 hops from letters, while \texttt{middle} (depth=40) requires 4 hops.
Counterexamples abound: \texttt{bond\_edge\_type} (depth=90) is only 2 hops from letters, while \texttt{middle} (depth=40) requires 4 hops.
\subsection{Eccentricity: The Significant Finding}
@ -143,7 +143,7 @@ Node & Depth & Eccentricity \\
\midrule
letterCategory & 30 & 4 \\
length & 60 & 5 \\
bondFacet & 90 & 5 \\
bond\_edge\_type & 90 & 5 \\
\midrule
middle & 40 & 7 \\
identity & 90 & 3 (isolated) \\
@ -170,7 +170,7 @@ Standard centrality measures show weak negative correlations but none reach sign
The eccentricity finding reveals that conceptual depth partially reflects \emph{global} network position. Nodes with high depth tend to have lower eccentricity, meaning they are never ``too far'' from any other node. This differs from local centrality (degree, clustering), which shows no relationship.
Intuitively, abstract concepts like \texttt{bondFacet} or \texttt{samenessGroup} may have been positioned to be accessible from many parts of the conceptual space, even if they don't have many direct connections.
Intuitively, abstract concepts like \texttt{bond\_edge\_type} or \texttt{samenessGroup} may have been positioned to be accessible from many parts of the conceptual space, even if they don't have many direct connections.
\subsection{Local vs Global Structure}
@ -255,7 +255,7 @@ Node & Depth & Deg & Btw & Ecc \\
\midrule
letterCategory & 30 & 0.50 & 0.68 & 4 \\
length & 60 & 0.17 & 0.25 & 5 \\
bondFacet & 90 & 0.03 & 0.00 & 5 \\
bond\_edge\_type & 90 & 0.03 & 0.00 & 5 \\
middle & 40 & 0.02 & 0.00 & 7 \\
identity & 90 & 0.00 & 0.00 & 3 \\
opposite & 90 & 0.00 & 0.00 & 3 \\