mirror of
https://github.com/semantica-agi/semantica.git
synced 2026-08-29 04:26:20 +00:00
Add a Cite Us section to the README with BibTeX citation info, and align it with docs/citation.md (author/organization: Semantica, 2026). Update LICENSE and docs/project-license.md copyright holder to Semantica, and replace the stale Hawksight-AI GitHub org slug with semantica-agi across READMEs, plugin manifests, cookbook notebooks, and GitHub templates.
24 KiB
24 KiB
In [ ]:
!pip install semantica
In [ ]:
from semantica.semantic_extract import RelationExtractor, NERExtractor
# Initialize extractors
ner_extractor = NERExtractor()
relation_extractor = RelationExtractor()
# Sample text with clear relationships
text = """
Apple Inc. was founded by Steve Jobs, Steve Wozniak, and Ronald Wayne in 1976.
The company is headquartered in Cupertino, California. Tim Cook is the current CEO
of Apple Inc. and took over from Steve Jobs in August 2011.
"""
# First, extract entities
entities = ner_extractor.extract(text)
print(f" Extracted {len(entities)} entities\n")
# Then, extract relationships
relationships = relation_extractor.extract(text, entities)
print(f" Extracted {len(relationships)} relationships:\n")
print("=" * 80)
for i, rel in enumerate(relationships, 1):
# Handle both dict and object formats
source = rel.get('source', rel.get('subject', '')) if isinstance(rel, dict) else getattr(rel, 'subject', '')
target = rel.get('target', rel.get('object', '')) if isinstance(rel, dict) else getattr(rel, 'object', '')
rel_type = rel.get('type', rel.get('predicate', 'related_to')) if isinstance(rel, dict) else getattr(rel, 'predicate', 'related_to')
confidence = rel.get('confidence', 1.0) if isinstance(rel, dict) else getattr(rel, 'confidence', 1.0)
# Get source and target text
if isinstance(source, dict):
source_text = source.get('text', source.get('entity', str(source)))
else:
source_text = getattr(source, 'text', str(source))
if isinstance(target, dict):
target_text = target.get('text', target.get('entity', str(target)))
else:
target_text = getattr(target, 'text', str(target))
print(f"{i:2d}. {source_text:20s} --[{rel_type:15s}]--> {target_text:20s} (conf: {confidence:.2f})")
print("=" * 80)In [ ]:
from semantica.semantic_extract import RelationExtractor
sample_text = "Apple Inc. was founded by Steve Jobs in Cupertino, California."
sample_entities = ner_extractor.extract(sample_text)
print(" Comparing Relation Extraction Methods:\n")
print("=" * 80)
# Try different methods
methods_to_try = ["pattern", "dependency", "cooccurrence"]
for method_name in methods_to_try:
try:
print(f"\n Method: {method_name.upper()}")
print("-" * 40)
extractor = RelationExtractor(method=method_name)
relations = extractor.extract(sample_text, sample_entities)
print(f"Found {len(relations)} relations:")
for rel in relations[:3]: # Show first 3
source = rel.get('source', rel.get('subject', '')) if isinstance(rel, dict) else getattr(rel, 'subject', '')
target = rel.get('target', rel.get('object', '')) if isinstance(rel, dict) else getattr(rel, 'object', '')
rel_type = rel.get('type', rel.get('predicate', 'related_to')) if isinstance(rel, dict) else getattr(rel, 'predicate', 'related_to')
# Get text representations
source_text = source.get('text', str(source)) if isinstance(source, dict) else getattr(source, 'text', str(source))
target_text = target.get('text', str(target)) if isinstance(target, dict) else getattr(target, 'text', str(target))
print(f" • {source_text} --[{rel_type}]--> {target_text}")
except Exception as e:
print(f" ️ Method '{method_name}' not available: {str(e)[:50]}")
print("\n" + "=" * 80)In [ ]:
# Create extractor with custom configuration
advanced_extractor = RelationExtractor(
relation_types=["founded_by", "located_in", "works_for"], # Only extract these types
confidence_threshold=0.7, # Higher threshold for quality
bidirectional=False, # One-way relations only
max_distance=50 # Max 50 tokens between entities
)
# Sample texts
texts = [
"Microsoft was founded by Bill Gates and Paul Allen in Albuquerque, New Mexico.",
"Satya Nadella works for Microsoft as the CEO.",
"Google is located in Mountain View, California.",
"Amazon was founded by Jeff Bezos in Seattle, Washington."
]
print(" Advanced Relation Extraction:\n")
print("=" * 80)
for i, text in enumerate(texts, 1):
entities = ner_extractor.extract(text)
relations = advanced_extractor.extract(text, entities)
print(f"\n Text {i}: {text}")
print(f" Relations found: {len(relations)}")
for rel in relations:
source = rel.get('source', rel.get('subject', '')) if isinstance(rel, dict) else getattr(rel, 'subject', '')
target = rel.get('target', rel.get('object', '')) if isinstance(rel, dict) else getattr(rel, 'object', '')
rel_type = rel.get('type', rel.get('predicate', 'related_to')) if isinstance(rel, dict) else getattr(rel, 'predicate', 'related_to')
confidence = rel.get('confidence', 1.0) if isinstance(rel, dict) else getattr(rel, 'confidence', 1.0)
source_text = source.get('text', str(source)) if isinstance(source, dict) else getattr(source, 'text', str(source))
target_text = target.get('text', str(target)) if isinstance(target, dict) else getattr(target, 'text', str(target))
print(f" • {source_text} --[{rel_type}]--> {target_text} (conf: {confidence:.2f})")
print("\n" + "=" * 80)In [ ]:
# Extract relations from all texts
all_relations = []
for text in texts:
entities = ner_extractor.extract(text)
relations = advanced_extractor.extract(text, entities)
all_relations.extend(relations)
# Classify relations
classified_relations = advanced_extractor.classify_relations(all_relations)
print("️ Relation Classification:\n")
print("=" * 80)
for rel_type, rel_list in sorted(classified_relations.items()):
print(f"\n{rel_type.upper()} ({len(rel_list)} relations):")
print("-" * 40)
for rel in rel_list:
source = rel.get('source', rel.get('subject', '')) if isinstance(rel, dict) else getattr(rel, 'subject', '')
target = rel.get('target', rel.get('object', '')) if isinstance(rel, dict) else getattr(rel, 'object', '')
source_text = source.get('text', str(source)) if isinstance(source, dict) else getattr(source, 'text', str(source))
target_text = target.get('text', str(target)) if isinstance(target, dict) else getattr(target, 'text', str(target))
print(f" • {source_text} → {target_text}")
print("\n" + "=" * 80)In [ ]:
from semantica.semantic_extract import TripletExtractor
# Initialize triplet extractor
triplet_extractor = TripletExtractor(
include_temporal=True, # Include temporal information
include_provenance=True # Track source sentences
)
# Sample text
triplet_text = """
Apple Inc. was founded by Steve Jobs in 1976. The company is based in Cupertino, California.
Tim Cook became CEO in 2011. Apple develops the iPhone and MacBook products.
"""
# Extract triplets
triplets = triplet_extractor.extract_triplets(triplet_text)
print(f" Extracted {len(triplets)} RDF Triplets:\n")
print("=" * 80)
for i, triplet in enumerate(triplets, 1):
subject = triplet.get('subject', '') if isinstance(triplet, dict) else triplet.subject
predicate = triplet.get('predicate', '') if isinstance(triplet, dict) else triplet.predicate
obj = triplet.get('object', '') if isinstance(triplet, dict) else triplet.object
confidence = triplet.get('confidence', 1.0) if isinstance(triplet, dict) else getattr(triplet, 'confidence', 1.0)
print(f"{i:2d}. ({subject}, {predicate}, {obj})")
print(f" Confidence: {confidence:.2f}")
# Show temporal info if available
metadata = triplet.get('metadata', {}) if isinstance(triplet, dict) else getattr(triplet, 'metadata', {})
if metadata.get('temporal'):
print(f" Temporal: {metadata['temporal']}")
print()
print("=" * 80)In [ ]:
from semantica.semantic_extract import RDFSerializer
# Initialize serializer
serializer = RDFSerializer()
print(" RDF Serialization Examples:\n")
print("=" * 80)
# Serialize to different formats
formats = ["turtle", "ntriples", "jsonld"]
for fmt in formats:
print(f"\n {fmt.upper()} Format:")
print("-" * 40)
try:
serialized = serializer.serialize_to_rdf(triplets[:3], format=fmt) # Show first 3
# Show preview (first 300 chars)
preview = serialized[:300] + "..." if len(serialized) > 300 else serialized
print(preview)
except Exception as e:
print(f"Error: {str(e)[:50]}")
print("\n" + "=" * 80)In [ ]:
def extract_knowledge(text):
"""
Complete knowledge extraction pipeline.
Args:
text: Input text
Returns:
dict: Extracted entities, relations, and triplets
"""
# Step 1: Extract entities
entities = ner_extractor.extract(text)
# Step 2: Extract relations
relations = relation_extractor.extract(text, entities)
# Step 3: Extract triplets
triplets = triplet_extractor.extract_triplets(text, entities=entities, relationships=relations)
return {
'entities': entities,
'relations': relations,
'triplets': triplets
}
# Sample knowledge-rich text
knowledge_text = """
Tesla Inc. was founded by Elon Musk, JB Straubel, Martin Eberhard, Marc Tarpenning,
and Ian Wright in 2003. The company is headquartered in Austin, Texas. Tesla produces
electric vehicles including the Model S, Model 3, Model X, and Model Y. Elon Musk serves
as CEO and has been instrumental in the company's growth.
"""
print(" Complete Extraction Pipeline:\n")
print("=" * 80)
# Run pipeline
result = extract_knowledge(knowledge_text)
print(f"\n Extraction Results:")
print("-" * 40)
print(f"Entities extracted: {len(result['entities'])}")
print(f"Relations extracted: {len(result['relations'])}")
print(f"Triplets extracted: {len(result['triplets'])}")
print(f"\n Sample Triplets:")
for i, triplet in enumerate(result['triplets'][:5], 1):
subject = triplet.get('subject', '') if isinstance(triplet, dict) else triplet.subject
predicate = triplet.get('predicate', '') if isinstance(triplet, dict) else triplet.predicate
obj = triplet.get('object', '') if isinstance(triplet, dict) else triplet.object
print(f" {i}. ({subject}, {predicate}, {obj})")
print("\n" + "=" * 80)