D1-lg

چگونه اطلاعات ویکی پدیا را استخراج و تحلیل کنیم؟

یک‌شنبه 18 آذر 1397 - 15:30
مطالعه 4 دقیقه
ویکی‌پدیا بزرگ‌ترین دانشنامه‌ی مردمی دنیا است که همگی با آن آشنا هستیم. در این مقاله، به آموزش ابزار Mixnode و نحوه‌ی استخراج و تحلیل مقالات ویکی‌پدیا می‌پردازیم.
تبلیغات
D4-mcid4

غنای اطلاعات ویکی‌پدیا بر هیچ‌کس پوشیده نیست. از دریای اطلاعات این وبسایت می‌توان برای تحقیق‌های تجاری و غیرتجاری و تقریبا در هر زمینه‌ای بهره برد. شرکت‌ها، محققان، دانشمندان داده و حتی افراد صرفا کنجکاو، همه‌وهمه درزمره‌ی افرادی قرار می‌گیرند که سعی می‌کنند داده‌های ویکی‌پدیا را استخراج و تحلیل کنند.

ویکی‌پدیا به‌مثابه‌ی گنجینه‌ای است که از مجموعه‌ای از صدهامیلیون صفحه‌ی وب و میلیون‌ها مقاله‌ی وزین چندزبانه تشکیل شده‌ است. این امر ویکی‌پدیا را به بهشت خزندگان وب (Web Crawler) تبدیل کرده‌ است. با جست‌وجویی ساده در گیت‌هاب، متوجه می‌شوید بیش از سیصد خزنده‌ی وب و پروژه‌های مشابه برای استخراج داده از ویکی‌پدیا وجود دارد.

وب‌کراولینگ، تنها راه موجود برای استخراج و تحلیل داده‌های ویکی‌پدیا نیست. برای مثال، ویکی‌مدیا اجازه‌ی استخراج داده‌ها در فرمت‌های متنوعی را می‌دهد. همچنین، API ویکی‌مدیا نه‌تنها برای دریافت اطلاعات، بلکه برای ایجاد بات‌ها و تعامل با مقالات به‌طور برنامه‌نویسی‌شده استفاده می‌شود.

در آموزش زیر، روی ابزار Mixnode تمرکز می‌کنیم که استخراج و تحلیل داده‌ها از ویکی‌پدیا با استفاده از کوئری‌های SQL را فراهم می‌آورد. برای استفاده از این ابزار باید با SQL آشنا باشید.

کپی لینک

Mixnode چگونه کار می‌کند؟

Mixnode اجازه می‌دهد با وب مانند پایگاه داده برخورد کنید. با استفاده از Mixnode می‌توانید کوئری بنویسید و آن را روی وب اجرا کنید. با اجرای کوئری مدنظر Mixnode به‌طور خودکار صفحات لازم برای پاسخ به کوئری را پیدا می‌کند.

مثال‌های زیر نحوه‌ی کارکرد Mixnode و استخراج و تحلیل داده‌‌ها را شفاف‌تر می‌کند.

کپی لینک

مثال ۱: به‌دست‌آوردن آدرس تمامی صفحات ویکی‌پدیا

select urlfrom pageswhere url_domain = 'wikipedia.org'

  • متغیر url نمایانگر آدرس صفحه است
  • pages جدولی است که هر ردیف آن مطابق با صفحه‌ی منحصربه‌فرد در وب است
  • با url_domain = 'wikipedia.org' مطمئن می‌شویم که فقط صفحات ویکی‌پدیا و ساب‌دامین‌های آن (مانند en.wikipedia.org) مدنظر قرار می‌گیرند. اگر بخواهید فقط در ویکی‌پدیای فارسی جست‌وجو کنید، کافی است عبارت fa.wikipedia.org را جایگزین کنید.
کپی لینک

مثال ۲: به‌دست‌آوردن آدرس و عنوان تمامی مقالات ویکی‌پدیا

select url, css_text_first(content, 'h1#firstHeading') as titlefrom pageswhere url_domain = 'wikipedia.org' and url like '%/wiki/%'

  • css_text_first(content, 'h1#firstHeading') عنوان مقاله‌ی ویکی‌پدیا را خروجی می‌دهد. با نگاهی به سورس HTML مقالات ویکی‌پدیا، پی می‌بریم h1#firstHeading مسیر CSS برای عنوان مقاله است. css_text_first نیز تابعی است که اجازه‌ی استخراج اولین مورد از انتخابگر CSS را می‌دهد. content در اینجا سورس کامل HTML صفحه است.
  • ازآنجایی‌که قصد داریم عناوین مقالات را به‌دست آوریم و می‌دانیم در آدرس مقالات ویکی‌پدیا از /wiki/ استفاده می‌شود، از url like '%/wiki/%' استفاده می‌کنیم تا مطمئن شویم نتایجمان فقط به مقالات مربوط‌ می‌شود.
کپی لینک

مثال ۳: به‌دست‌آوردن عناوین تمامی مقالات شامل زیررشته‌ی Elon Musk

select url, css_text_first(content, 'h1#firstHeading') as titlefrom pageswhere url_domain = 'wikipedia.org' and url like '%/wiki/%' and contains(content, 'Elon Musk')

  • contains() تابعی است که اجازه‌ی بررسی وجود یک زیررشته در یک رشته را می‌دهد. با استفاده از contains(content, 'elon musk') مطمئن می‌شویم که در نتایجمان عبارت Elon Musk موجود است.
کپی لینک

مثال ۴: مرتب‌سازی مقالات ویکی‌پدیا براساس تعداد ارجاعات

select url, css_text_first(content, 'h1#firstHeading') as title, cardinality(css_text(content, 'ol.references li')) as reference_countfrom pageswhere url_domain = 'wikipedia.org' and url like '%/wiki/%'order by reference_count desc

  • بررسی کد منبع یک مقاله‌ی ویکی‌پدیا نشان می‌دهد تمامی ارجاعات و منابع با انتخابگر ol.references قابل‌دسترسی است. css_text(content, 'ol.references li') متن تمامی منابع مقاله را به ما می‌دهد و ازآنجایی‌که فقط به تعداد نیاز داریم، پس از تابع cardinality() استفاده می‌کنیم که اندازه‌ی یک آرایه را برمی‌گرداند. desc در خط آخر مقالات را به‌صورت نزولی برایمان مرتب می‌کند. برای مرتب‌سازی به‌صورت صعودی از asc استفاده کنید.
کپی لینک

مثال ۵: مرتب‌سازی مقالات ویکی‌پدیا براساس طول مقاله

select url, css_text_first(content, 'h1#firstHeading') as title, cardinality(words(css_text_first(content, '#content'))) as article_lengthfrom pageswhere url_domain = 'wikipedia.org' and url like '%/wiki/%'order by article_length desc

  • words() آرایه‌ای شامل تمامی کلمات یک متن را برمی‌گرداند. استفاده از cardinality(words(css_text_first(content, '#content'))) as article_length، تعداد کلمات یک مقاله را به ما می‌دهد.
کپی لینک

مثال ۶: اندازه‌ی میانگین یک مقاله‌ی ویکی‌پدیا

select avg(cardinality(words(css_text_first(content, '#content')))) as average_article_lengthfrom pageswhere url_domain = 'wikipedia.org' and url like '%/wiki/%'

  • تابع avg() میانگین داده‌های ورودی‌اش را برمی‌گرداند که در اینجا، تعداد کلمات تمامی مقالات ویکی‌پدیاست.
کپی لینک

مثال ۷: مرتب‌سازی مقالات ویکی‌پدیا براساس بحث‌های آن

select url, remove_left(css_text_first(content, 'h1#firstHeading'), 'Talk:') as title, cardinality(words(css_text_first(content, '#content'))) as discussion_lengthfrom pageswhere url_domain = 'wikipedia.org' and url like '%/wiki/Talk:%'order by discussion_length desc

  • مباحث درباره‌ی یک مطلب در آدرسی مشابه /wiki/Talk: قرار دارند؛ به‌همین‌دلیل از این عبارت استفاده می‌کنیم.
کپی لینک

مثال ۸: پیداکردن تمامی مقالات ویکی‌پدیا که لینکی به zoomit.ir دارند

select url, css_text_first(content, 'h1#firstHeading') as titlefrom pageswhere url_domain = 'wikipedia.org' and url like '%/wiki/%' and contains_any(content, array['href="https://www.zoomit.ir', 'href="https://www.zoomit.ir', 'href="https://zoomit.ir', 'href="http://zoomit.ir'])

دیدگاه شما چیست؟ تجربه‌ی استفاده از این ابزار را داشته‌اید؟ ابزارهای دیگری برای تحلیل و استخراج داده‌ها از ویکی‌پدیا می‌شناسید؟ نظرات خود را با ما و کاربران زومیت به‌اشتراک بگذارید.

مقاله رو دوست داشتی؟
نظرت چیه؟

داغ‌ترین مطالب روز
مرد جوان اسلحه به دست کنار خودرو مشکی در پس‌زمینه‌ی برج آزادی
اگر بازی مورد انتظار GTA 6 در تهران روایت می‌شد!

چه می‌شد اگر وقایع بازی GTA 6 در خیابان‌های تهران رقم می‌خورد؟ از هوش مصنوعی پرسیدیم.

152
حدود 20 ساعت قبل
وضعیت اینترنت
گزارش ماه ژوئن اسپیدتست؛ میانه سرعت اینترنت ثابت و سیار افزایش پیدا کرد

طبق گزارش ژوئن ۲۰۲۵ اسپیدتست، میانه‌ی سرعت اینترنت ثابت و همراه افزایش یافته و رتبه‌ی ایران در جدول میانه‌ی سرعت اینترنت موبایل ۶ پله بهبود داشته ...

388
حدود 24 ساعت قبل
آسمان خراش آینه ای لاین عربستان
آینده پرابهام پروژه لاین؛ عربستان به‌دنبال بازنگری در جاه‌طلبانه‌ترین طرح معماری قرن است

گزارش‌ها حاکی از آن است که کاهش قیمت نفت و فشار مالی، عربستان را به بازنگری در پروژه لاین وادار کرده است.

136
2 روز قبل
بهترین گوشی های پوکو در بازار ایران
بهترین گوشی پوکو در بازار ایران [تابستان ۱۴۰۴]

بهترین گوشی‌های پوکو کدام مدل‌ها هستند؟ در مقاله‌ی پیش‌ رو، بهترین مدل‌های پوکو از نظر دوربین، باتری و قدرت پردازشی معرفی می‌شوند.

139
حدود 3 ساعت قبل
نمای جلو پیکان وانت در جنگل
پیکان وانت فیس‌لیفت؛ تجسم آیند‌ه‌نگرانه AI از ماشین محبوب ایران‌خودرو

تصور کنید ایران‌خودرو سراغ مدل فیس‌لیفت خودرو پیکان می‌رفت؛ از هوش مصنوعی خواستیم تا چنین خودرویی را به تصویر بکشد.

55
حدود 20 ساعت قبل
نمای سه‌چهارم جلو جنگنده‌ی F-35
حداکثر سرعت جنگنده F-35 چقدر است؟

F-35، جنگنده‌ی پیشرفته‌ی نسل پنجمی، توان عملیاتی چشمگیری دارد. حداکثر سرعت این جنگنده چقدر است؟

102
حدود 20 ساعت قبل
نمای جلو KGM اکتیون
این شاسی‌بلند کره‌ای، تکنولوژی‌های پیشرفته و قیمت منطقی دارد

اکتیون نام باسابقه‌ای در صنعت خودروسازی است که حالا در قالب شاسی‌بلندی چشم‌نواز و پیشرفته راهی بازار می‌شود.

42
حدود 17 ساعت قبل
تبلیغات
DN-DNShatel

نظرات

با چشم باز خرید کنید
زومیت شما را برای انتخاب بهتر و خرید ارزان‌تر راهنمایی می‌کند
ورود به بخش محصولات