مكتبة Python لاستخراج الكيانات الجغرافية المصرية مع معالجة الأخطاء الكتابية
Project description
🇪🇬 Egypt NLP - مكتبة استخراج الكيانات الجغرافية المصرية
مكتبة Python متخصصة في التعرف على واستخراج الأسماء الجغرافية المصرية من النصوص العربية.
A specialized Python library for extracting and recognizing Egyptian geographic entities from Arabic text.
✨ المميزات / Features
- 🏛️ قاعدة بيانات شاملة: جميع محافظات مصر الـ 27 مع المراكز والوحدات المحلية
- 🔍 استخراج ذكي: التعرف التلقائي على المواقع في النصوص العربية
- 🗺️ التسلسل الهرمي: الحصول على التقسيم الإداري الكامل لأي موقع
- 📊 تحليل إحصائي: احصاءات شاملة عن المواقع المذكورة في النصوص
- 🌍 الأقاليم الاقتصادية: تصنيف حسب الأقاليم السبعة
- 🔤 تطبيع النصوص: معالجة الاختلافات في الكتابة والتشكيل
- 🚀 سريع وفعال: بحث محسّن باستخدام فهارس متقدمة
📦 التثبيت / Installation
# من المصدر
git clone https://github.com/yourusername/egypt-nlp.git
cd egypt-nlp
pip install -e .
# أو باستخدام pip (قريباً)
pip install egypt-nlp
🚀 بداية سريعة / Quick Start
استخراج بسيط
from egypt_nlp import extract
text = "أنا من القاهرة، أعيش في مدينة نصر"
locations = extract(text)
for loc in locations:
print(f"{loc['name']} - {loc['type']}")
النتيجة:
القاهرة - governorate
مدينة نصر - district
العثور على المحافظة
from egypt_nlp import find_governorate
text = "سافرت إلى شرم الشيخ"
governorate = find_governorate(text)
print(governorate) # جنوب سيناء
📚 أمثلة متقدمة / Advanced Examples
1. استخدام الكلاس الرئيسي
from egypt_nlp import EgyptGeoExtractor
extractor = EgyptGeoExtractor()
# استخراج المواقع
text = "ولدت في الإسكندرية ودرست في القاهرة"
locations = extractor.extract_locations(text)
for loc in locations:
print(f"📍 {loc['name']}")
print(f" النوع: {loc['type']}")
print(f" المحافظة: {loc['info']['governorate']}")
print(f" الإقليم: {loc['info']['region']}")
2. الحصول على معلومات تفصيلية
extractor = EgyptGeoExtractor()
# معلومات عن موقع محدد
info = extractor.get_location_info("مدينة نصر")
print(info)
# {
# 'level': 'district',
# 'district': 'مدينة نصر',
# 'governorate': 'القاهرة',
# 'region': 'القاهرة الكبرى',
# 'type': 'حضري',
# 'units': ['الحي الأول', 'الحي الثامن', ...]
# }
3. التسلسل الهرمي
hierarchy = extractor.get_hierarchy("الزمالك")
print(hierarchy)
# {
# 'region': 'القاهرة الكبرى',
# 'governorate': 'القاهرة',
# 'district': 'القاهرة',
# 'unit': 'الزمالك'
# }
4. إحصائيات النص
text = """
بدأت رحلتي من القاهرة، مررت بالجيزة والإسكندرية.
زرت مرسى مطروح والعلمين قبل العودة.
"""
stats = extractor.get_statistics(text)
print(f"المحافظات: {stats['governorates']}")
print(f"الأقاليم: {stats['regions']}")
print(f"إجمالي المواقع: {stats['total_locations']}")
5. البحث عن محافظة
result = extractor.search_by_governorate("القاهرة")
print(f"الإقليم: {result['region']}")
print(f"عدد المراكز: {result['total_districts']}")
print(f"عدد الوحدات: {result['total_units']}")
6. البحث عن إقليم
result = extractor.search_by_region("القاهرة الكبرى")
print(f"المحافظات: {result['governorates']}")
print(f"عدد المحافظات: {result['total_governorates']}")
7. استخراج مع السياق
locations = extractor.extract_with_context(
text="ولدت في القاهرة ودرست في الإسكندرية",
context_chars=20
)
for loc in locations:
print(f"{loc['name']}: {loc['full_context']}")
🗂️ هيكل البيانات / Data Structure
المستويات الإدارية
الإقليم الاقتصادي (Region)
↓
المحافظة (Governorate)
↓
المركز/الحي (District)
↓
الوحدة المحلية/الحي الفرعي (Unit)
الأقاليم السبعة
- القاهرة الكبرى: القاهرة، الجيزة، القليوبية
- الإسكندرية: الإسكندرية، البحيرة، مطروح
- قناة السويس: بورسعيد، الإسماعيلية، السويس، شمال سيناء، جنوب سيناء
- الدلتا: الدقهلية، الشرقية، الغربية، كفر الشيخ، المنوفية، دمياط
- شمال الصعيد: الفيوم، بني سويف، المنيا
- وسط الصعيد: أسيوط، سوهاج
- جنوب الصعيد: قنا، الأقصر، أسوان، البحر الأحمر، الوادي الجديد
🔧 الوظائف المتاحة / Available Functions
الوظائف السريعة
extract(text)- استخراج سريع للمواقعfind_governorate(text)- العثور على أول محافظة
كلاس EgyptGeoExtractor
وظائف الاستخراج
extract_locations(text)- استخراج كل المواقعextract_with_context(text, context_chars)- استخراج مع السياقfind_governorate(text)- العثور على محافظةfind_all_governorates(text)- كل المحافظاتfind_region(text)- تحديد الإقليم
وظائف المعلومات
get_location_info(location_name)- معلومات تفصيليةget_hierarchy(location_name)- التسلسل الهرميget_statistics(text)- إحصائيات النص
وظائف البحث
search_by_governorate(governorate)- بحث بالمحافظةsearch_by_region(region)- بحث بالإقليمis_location_in_text(text, location)- التحقق من وجود موقع
📊 حالات الاستخدام / Use Cases
1. تحليل النصوص الإخبارية
news = """
افتتح الرئيس مشروع جديد في الإسكندرية يربط العجمي بالعامرية.
المشروع سيخدم محافظات الإسكندرية والبحيرة ومطروح.
"""
locations = extract(news)
stats = extractor.get_statistics(news)
print(f"المناطق المتأثرة: {stats['governorates']}")
2. تصنيف المحتوى الجغرافي
def classify_by_region(text):
extractor = EgyptGeoExtractor()
region = extractor.find_region(text)
return region
# استخدام
article_region = classify_by_region("حادث في طريق القاهرة الإسكندرية")
3. استخراج بيانات من النماذج
form_data = "العنوان: شارع النيل، الزمالك، القاهرة"
extractor = EgyptGeoExtractor()
governorate = extractor.find_governorate(form_data)
hierarchy = extractor.get_hierarchy("الزمالك")
print(f"المحافظة: {governorate}")
print(f"الحي: {hierarchy['unit']}")
4. تحليل وسائل التواصل الاجتماعي
tweet = "الجو جميل اليوم في شرم الشيخ #مصر #السياحة"
locations = extract(tweet)
for loc in locations:
print(f"موقع مذكور: {loc['name']}")
🧪 تشغيل الأمثلة / Running Examples
cd egypt_nlp
python examples.py
📈 الإحصائيات / Statistics
- 27 محافظة
- 283 مركز وحي
- 762 وحدة محلية وحي فرعي
- 7 أقاليم اقتصادية
🤝 المساهمة / Contributing
نرحب بالمساهمات! يرجى:
- Fork المشروع
- إنشاء فرع للميزة الجديدة (
git checkout -b feature/AmazingFeature) - Commit التغييرات (
git commit -m 'Add some AmazingFeature') - Push للفرع (
git push origin feature/AmazingFeature) - فتح Pull Request
📝 الترخيص / License
هذا المشروع مرخص تحت رخصة MIT - انظر ملف LICENSE للتفاصيل.
🙏 شكر وتقدير / Acknowledgments
- بيانات التقسيم الإداري من الجهاز المركزي للتعبئة العامة والإحصاء
- مساهمات المجتمع المفتوح
📧 التواصل / Contact
- GitHub Issues: Report Bug
- Email: your.email@example.com
🗺️ خارطة الطريق / Roadmap
- إضافة fuzzy matching للأسماء المشابهة
- دعم اللغة الإنجليزية
- إضافة الأحداثيات الجغرافية (GPS)
- دمج مع خرائط جوجل
- API للاستخدام عبر الويب
- تطبيق ويب تفاعلي
Made with ❤️ in Egypt 🇪🇬
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file egypt_nlp-2.0.0.tar.gz.
File metadata
- Download URL: egypt_nlp-2.0.0.tar.gz
- Upload date:
- Size: 32.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6c1400dcf0347462ef92fd0fcc8e33a11cbd1b5f899df43f37b7dc9279226d22
|
|
| MD5 |
33be72de9482ed19629ef08bc678137f
|
|
| BLAKE2b-256 |
dea94b749e07a379ed78f9a387bf369ae16fc92cc73b04ecbbd18cc9c732b229
|
Provenance
The following attestation bundles were made for egypt_nlp-2.0.0.tar.gz:
Publisher:
publish.yml on aeleraqi/egypt-nlp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
egypt_nlp-2.0.0.tar.gz -
Subject digest:
6c1400dcf0347462ef92fd0fcc8e33a11cbd1b5f899df43f37b7dc9279226d22 - Sigstore transparency entry: 1017730203
- Sigstore integration time:
-
Permalink:
aeleraqi/egypt-nlp@89607268fde4ce0d79e4c1987661fb798e1c3dea -
Branch / Tag:
refs/tags/v2.0.1 - Owner: https://github.com/aeleraqi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@89607268fde4ce0d79e4c1987661fb798e1c3dea -
Trigger Event:
release
-
Statement type:
File details
Details for the file egypt_nlp-2.0.0-py3-none-any.whl.
File metadata
- Download URL: egypt_nlp-2.0.0-py3-none-any.whl
- Upload date:
- Size: 30.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e57562f78faf673985080ab6e6879cda35679e741ce87f08ea973ab14c16bd9
|
|
| MD5 |
7ce2ff3faa9c9527fc775371c2d4a1fe
|
|
| BLAKE2b-256 |
f6c122b461d9e17661c3572c5854982d5b201cbf6f6defcc892373c937a57ef0
|
Provenance
The following attestation bundles were made for egypt_nlp-2.0.0-py3-none-any.whl:
Publisher:
publish.yml on aeleraqi/egypt-nlp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
egypt_nlp-2.0.0-py3-none-any.whl -
Subject digest:
8e57562f78faf673985080ab6e6879cda35679e741ce87f08ea973ab14c16bd9 - Sigstore transparency entry: 1017730210
- Sigstore integration time:
-
Permalink:
aeleraqi/egypt-nlp@89607268fde4ce0d79e4c1987661fb798e1c3dea -
Branch / Tag:
refs/tags/v2.0.1 - Owner: https://github.com/aeleraqi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@89607268fde4ce0d79e4c1987661fb798e1c3dea -
Trigger Event:
release
-
Statement type: