معاينة مختبر آمنة
MSConcept Graph
هذي معاينة منقّحة للقراءة فقط؛ ما فيه أي شيء يشتغل داخل الصفحة.
قراءة فقط
معاينة الدفتر
MSConcept Graph
> **ملاحظة بيئة التشغيل المدمجة:** هالمعاينة تستخدم عيّنة صغيرة وثابتة وآمنة من ناحية الحقوق عشان تكون النتايج قابلة للتكرار. النتايج بالحجم الكامل تحتاج مجموعة البيانات أو النموذج الموثّق بالدرس داخل بيئة خارجية معتمدة.
## رسم مفاهيم باستخدام ConceptNet
> **ملاحظة:** واجهة API الأصلية لـ[Microsoft Concept Graph](https://www.microsoft.com/en-us/research/project/probase/) ما عادت متاحة. حدّثنا هالدفتر عشان يستخدم [ConceptNet](https://conceptnet.io/) بديلًا عنها؛ وهو **رسم بياني معرفي** (Knowledge Graph, KG) مفتوح ومجاني، وفيه علاقات `is-a` مشابهة بين المفاهيم.
[ConceptNet](https://conceptnet.io/) شبكة دلالية ضخمة للمفاهيم، وتربطها علاقات مثل `IsA` و`PartOf` و`UsedFor` وغيرها. ويتوفر بطريقتين:
* ملف بيانات قابل للتنزيل.
* واجهة REST API ما تحتاج مفتاح API.
إحصاءات ConceptNet:
* أكثر من 8 ملايين عقدة.
* أكثر من 21 مليون حافة موزعة على 83 لغة.
## استخدام خدمة ConceptNet على الويب
يوفر [ConceptNet](https://conceptnet.io/) واجهة REST API لاستكشاف علاقات `is-a` (IsA) بين المفاهيم، وما تحتاج الواجهة مفتاح API.
هذا مثال لعنوان URL للاستدعاء: `https://conceptnet.io/`
_COURSE_CONCEPTS = {
"economy": {"economy": 0.8, "business": 0.2},
"market": {"economy": 0.7, "business": 0.3},
"country": {"nation": 0.8, "place": 0.2},
"nation": {"nation": 0.8, "place": 0.2},
"president": {"person": 0.8, "leader": 0.2},
"leader": {"person": 0.7, "official": 0.3},
"technology": {"technology": 0.8, "topic": 0.2},
}
def query(value):
for word in str(value).lower().replace("_", " ").split():
if word in _COURSE_CONCEPTS:
return dict(_COURSE_CONCEPTS[word])
return {"topic": 1.0}
query("microsoft")خلّونا نحاول نصنّف عناوين الأخبار باستخدام مفاهيمها الأعم. ولجلب العناوين بنستخدم خدمة [NewsApi.org](https://newsapi.org/). تحتاجون مفتاح API خاص بكم؛ ادخلوا الموقع وسجّلوا في خطة المطور المجانية.
all_titles = [
"National economy improves as the market creates new jobs",
"Business leaders discuss the economy and responsible investment",
"The president presents a national technology strategy",
"A regional leader announces support for local businesses",
"The nation expands training for technology workers",
"Market reforms support the economy and small business",
"The president meets a foreign leader for policy talks",
"Technology investment strengthens the national economy",
]all_titlesأول خطوة إننا نستخرج الأسماء من عناوين الأخبار. بنستخدم مكتبة `TextBlob` لأنها تبسّط مهام كثيرة معتادة في معالجة اللغة الطبيعية (Natural Language Processing, NLP)، ومنها هالمهمة.
import re
class TextBlob:
def __init__(self, text):
self.text = text
@property
def noun_phrases(self):
words = re.findall(r"[a-z]+", self.text.lower())
return [word for word in words if word in {"economy", "market", "business", "nation", "national", "president", "leader", "technology"}]w = {}
for x in all_titles:
for n in TextBlob(x).noun_phrases:
if n in w:
w[n].append(x)
else:
w[n]=[x]
{ x:len(w[x]) for x in w.keys()}واضح أن الأسماء ما تعطينا مجموعات موضوعية كبيرة. خلّونا نستبدلها بمصطلحات أعم نجيبها من رسم المفاهيم. العملية بتاخذ وقت؛ لأننا نرسل طلب REST لكل عبارة اسمية.
w = {}
for x in all_titles:
for noun in TextBlob(x).noun_phrases:
terms = query(noun)
for term in [u for u in terms.keys() if terms[u]>0.1]:
if term in w:
w[term].append(x)
else:
w[term]=[x]{ x:len(w[x]) for x in w.keys() if len(w[x])>3}print('\nECONOMY:\n'+'\n'.join(w['economy']))
print('\nNATION:\n'+'\n'.join(w['nation']))
print('\nPERSON:\n'+'\n'.join(w['person']))حذفنا المخرجات وعدّادات التشغيل والودجات والمحتوى النشط وقت الاستيراد. شغّل الدفاتر بس في بيئة خارجية تثق فيها.
سجّل تطبيقك
التسجيل اختياري، يفيدك تتذكر وش طبّقت، ولا يمنع إكمال الدورة.