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.
25 KiB
25 KiB
In [ ]:
!pip install semantica
In [ ]:
from semantica.semantic_extract import NERExtractor
# Initialize the extractor
ner_extractor = NERExtractor()
# Sample text with various entity types
text = """
Apple Inc. is a technology company founded by Steve Jobs, Steve Wozniak, and Ronald Wayne
in Cupertino, California on April 1, 1976. The company's current CEO is Tim Cook, who took
over from Steve Jobs in August 2011. Apple is headquartered at One Apple Park Way in Cupertino.
"""
# Extract entities
entities = ner_extractor.extract(text)
print(f" Extracted {len(entities)} entities:\n")
print("-" * 80)
for i, entity in enumerate(entities, 1):
# Handle both dict and object formats
entity_text = entity.get('text', entity.get('entity', '')) if isinstance(entity, dict) else entity.text
entity_type = entity.get('type', entity.get('label', 'Unknown')) if isinstance(entity, dict) else entity.label
confidence = entity.get('confidence', 1.0) if isinstance(entity, dict) else getattr(entity, 'confidence', 1.0)
print(f"{i:2d}. {entity_text:30s} | Type: {entity_type:12s} | Confidence: {confidence:.2f}")
print("-" * 80)In [ ]:
def highlight_entities(text, entities):
"""
Create a simple text visualization with entity markers.
"""
# Group entities by type
entity_types = {}
for entity in entities:
entity_text = entity.get('text', entity.get('entity', '')) if isinstance(entity, dict) else entity.text
entity_type = entity.get('type', entity.get('label', 'Unknown')) if isinstance(entity, dict) else entity.label
if entity_type not in entity_types:
entity_types[entity_type] = []
entity_types[entity_type].append(entity_text)
print("\n Entity Visualization:\n")
print("=" * 80)
for entity_type, entity_list in sorted(entity_types.items()):
unique_entities = list(set(entity_list))
print(f"\n{entity_type}:")
for ent in unique_entities:
print(f" • {ent}")
print("\n" + "=" * 80)
# Visualize the extracted entities
highlight_entities(text, entities)In [ ]:
from semantica.semantic_extract import NERExtractor
sample_text = "Apple Inc. was founded by Steve Jobs in Cupertino, California in 1976."
print(" Comparing Extraction Methods:\n")
print("=" * 80)
# Try different methods
methods_to_try = ["pattern", "regex", "ml"]
for method_name in methods_to_try:
try:
print(f"\n Method: {method_name.upper()}")
print("-" * 40)
extractor = NERExtractor(method=method_name)
entities = extractor.extract(sample_text)
print(f"Found {len(entities)} entities:")
for entity in entities[:5]: # Show first 5
entity_text = entity.get('text', entity.get('entity', '')) if isinstance(entity, dict) else entity.text
entity_type = entity.get('type', entity.get('label', 'Unknown')) if isinstance(entity, dict) else entity.label
print(f" • {entity_text} ({entity_type})")
except Exception as e:
print(f" ️ Method '{method_name}' not available: {str(e)[:50]}")
print("\n" + "=" * 80)In [ ]:
from semantica.semantic_extract import NamedEntityRecognizer
# Create recognizer with custom configuration
ner = NamedEntityRecognizer(
methods=["spacy"], # Use spaCy for ML-based extraction
confidence_threshold=0.7, # Only keep high-confidence entities
merge_overlapping=True, # Merge overlapping entity mentions
include_standard_types=True # Include standard entity types
)
# Sample texts for batch processing
texts = [
"Tim Cook is the CEO of Apple Inc., based in Cupertino.",
"Microsoft Corporation, founded by Bill Gates, is headquartered in Redmond, Washington.",
"Amazon was founded by Jeff Bezos in Seattle in 1994.",
"Google was started by Larry Page and Sergey Brin at Stanford University."
]
print(" Advanced Entity Recognition Results:\n")
print("=" * 80)
all_entities = []
for i, text in enumerate(texts, 1):
entities = ner.extract_entities(text)
all_entities.extend(entities)
print(f"\n Text {i}: {text[:60]}...")
print(f" Found {len(entities)} entities:")
for entity in entities:
entity_text = entity.get('text', entity.get('entity', '')) if isinstance(entity, dict) else entity.text
entity_type = entity.get('type', entity.get('label', 'Unknown')) if isinstance(entity, dict) else entity.label
confidence = entity.get('confidence', 1.0) if isinstance(entity, dict) else getattr(entity, 'confidence', 1.0)
print(f" • {entity_text:25s} | {entity_type:10s} | Confidence: {confidence:.2f}")
print(f"\n Total entities extracted: {len(all_entities)}")
print("=" * 80)In [ ]:
from semantica.semantic_extract import EntityClassifier
# Initialize classifier
classifier = EntityClassifier()
# Classify the entities we extracted earlier
classified = classifier.classify_entities(all_entities)
print("️ Entity Classification Results:\n")
print("=" * 80)
for entity_type, entity_list in sorted(classified.items()):
print(f"\n{entity_type} ({len(entity_list)} entities):")
print("-" * 40)
# Get unique entity texts
unique_entities = set()
for entity in entity_list:
entity_text = entity.get('text', entity.get('entity', '')) if isinstance(entity, dict) else entity.text
unique_entities.add(entity_text)
for entity_text in sorted(unique_entities):
print(f" • {entity_text}")
print("\n" + "=" * 80)In [ ]:
from semantica.semantic_extract import EntityConfidenceScorer
# Initialize confidence scorer
scorer = EntityConfidenceScorer()
# Score the entities
scored_entities = scorer.score_entities(all_entities)
print(" Entity Confidence Scoring:\n")
print("=" * 80)
# Group by confidence levels
high_confidence = []
medium_confidence = []
low_confidence = []
for entity in scored_entities:
confidence = entity.get('confidence', 1.0) if isinstance(entity, dict) else getattr(entity, 'confidence', 1.0)
if confidence >= 0.8:
high_confidence.append(entity)
elif confidence >= 0.5:
medium_confidence.append(entity)
else:
low_confidence.append(entity)
print(f" High Confidence (≥0.8): {len(high_confidence)} entities")
print(f"️ Medium Confidence (0.5-0.8): {len(medium_confidence)} entities")
print(f" Low Confidence (<0.5): {len(low_confidence)} entities")
print("\n Confidence Distribution:")
print("-" * 40)
# Show some examples from each category
if high_confidence:
print("\nHigh Confidence Examples:")
for entity in high_confidence[:3]:
entity_text = entity.get('text', entity.get('entity', '')) if isinstance(entity, dict) else entity.text
entity_type = entity.get('type', entity.get('label', 'Unknown')) if isinstance(entity, dict) else entity.label
confidence = entity.get('confidence', 1.0) if isinstance(entity, dict) else getattr(entity, 'confidence', 1.0)
print(f" • {entity_text} ({entity_type}) - {confidence:.2f}")
print("\n" + "=" * 80)In [ ]:
from semantica.semantic_extract import CustomEntityDetector
import re
# Define custom patterns
custom_patterns = {
"EMAIL": r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b',
"PHONE": r'\b\d{3}[-.]?\d{3}[-.]?\d{4}\b',
"PRODUCT_CODE": r'\b[A-Z]{2,3}-\d{4,6}\b',
"URL": r'https?://[^\s]+'
}
# Initialize custom detector
custom_detector = CustomEntityDetector(patterns=custom_patterns)
# Sample text with custom entities
custom_text = """
For support, contact support@apple.com or call 1-800-692-7753.
Order product SKU-12345 from https://store.apple.com.
Technical inquiries: tech@apple.com or visit our website.
"""
print(" Custom Entity Detection:\n")
print("=" * 80)
for entity_type in custom_patterns.keys():
entities = custom_detector.detect_custom_entities(custom_text, entity_type)
if entities:
print(f"\n{entity_type}:")
for entity in entities:
entity_text = entity.get('text', entity.get('entity', '')) if isinstance(entity, dict) else entity.text
print(f" • {entity_text}")
print("\n" + "=" * 80)In [ ]:
# Sample document collection
documents = [
"Apple Inc. released the iPhone 15 in September 2023.",
"Microsoft announced Azure AI updates at Build 2023 in Seattle.",
"Google's Sundar Pichai spoke at I/O 2023 in Mountain View, California.",
"Tesla's Elon Musk unveiled the Cybertruck in Austin, Texas.",
"Amazon Web Services launched new features in Northern Virginia."
]
print(" Batch Processing Results:\n")
print("=" * 80)
# Process all documents
batch_results = ner.process_batch(documents)
# Analyze results
total_entities = 0
entity_type_counts = {}
for i, (doc, entities) in enumerate(zip(documents, batch_results), 1):
total_entities += len(entities)
print(f"\n Document {i}:")
print(f" Text: {doc[:50]}...")
print(f" Entities: {len(entities)}")
for entity in entities:
entity_type = entity.get('type', entity.get('label', 'Unknown')) if isinstance(entity, dict) else entity.label
entity_type_counts[entity_type] = entity_type_counts.get(entity_type, 0) + 1
print(f"\n Batch Processing Summary:")
print("-" * 40)
print(f"Documents processed: {len(documents)}")
print(f"Total entities: {total_entities}")
print(f"Average per document: {total_entities/len(documents):.1f}")
print("\n Entity Type Distribution:")
for entity_type, count in sorted(entity_type_counts.items(), key=lambda x: x[1], reverse=True):
print(f" {entity_type}: {count}")
print("\n" + "=" * 80)