قاموس هبرة. الجزء الأول

الأصدقاء ، مساء الخير.


لقد قمت بحل مشكلة تجميع قاموس Habrahabr بغرض تتبع ظهور لغات وأطر وممارسات إدارية جديدة ، إلخ. باختصار ، كلمات جديدة.


وكانت النتيجة قائمة بالكلمات الإنجليزية "في الحالة الاسمية والمفرد".


قام بذلك في بيئة Windows 10 x64 ، واستخدم لغة Python 3 في محرر Spyder في Anaconda 5.1.0 ، واستخدم اتصال شبكة سلكية.


في هذه المقالة أحصل على قاموس للكلمات الإنجليزية في عينة محدودة. إذا تبين أن الموضوع مثير للاهتمام ، فإنني أخطط في المستقبل للحصول على قاموس لكل من الكلمات الإنجليزية والروسية حول مجموعة كاملة من مقالات هابر. مع اللغة الروسية ، كل شيء أكثر تعقيدًا.


عملية التحليل


أخذت القرص من هنا . يوجد أدناه رمز إصدار المحلل الخاص بي.


لجمع قاموس هبر ، تحتاج إلى تجاوز مقالاته واختيار نص المقالات منها. لم أقم بمعالجة المعلومات الوصفية للمقالات. تحتوي المقالات على حبري على "رقمي" ، مثل https://habr.com/post/346198/ . يمكن إجراء تعداد المقالات من 0 إلى 354366 ، وكانت هذه هي المقالة الأخيرة في وقت المشروع.


لكل مشكلة نحاول الحصول على صفحة html ، وعندما ينجح ذلك ، نسحب عنوان ونص المقال من بنية html. رمز التجاوز كما يلي:


import pandas as pd import requests from bs4 import BeautifulSoup dataset = pd.DataFrame() for pid in range(350000,354366): r = requests.get('https://habrahabr.ru/post/' +str(pid) + '/') soup = BeautifulSoup(r.text, 'html5lib') if soup.find("span", {"class": "post__title-text"}): title = soup.find("span", {"class": "post__title-text"}).text text = soup.find("div", {"class": "post__text"}).text my_series = pd.Series([pid, title, text], index=['id', 'title', 'text']) df_new = pd.DataFrame(my_series).transpose() dataset = dataset.append(df_new, ignore_index = True) 

ثبت تجريبيا أن المقالات نفسها أقل من ثلاثة أضعاف الرقم. تدربت على 4366 رقمًا - هذا هو مقدار تحميل نظامي في نصف ساعة.


لم أقم بتحسين السرعة ، على الرغم من أنهم يقولون أنه إذا بدأت المعالجة في 100 سلسلة ، فسيكون ذلك أسرع بكثير.


لقد حفظت النتيجة على القرص


 dataset.to_excel(directory+'dataset.xlsx', sheet_name='sheet1', index=False) 

- حتى لا يتم تكرار التحميل البطيء من الإنترنت. وتبين أن حجم الملف يبلغ 10 ميجابايت.


كنت مهتمًا بالأسماء الإنجليزية للأدوات. لم أكن بحاجة إلى مصطلحات بأشكال مختلفة ، أردت أن أحصل على الفور على أشكال طبيعية من الكلمات. من الواضح أن الكلمات الأكثر شيوعًا هي "in" و "on" و "by" ، ونزيلها. لتطبيع القاموس ، استخدمت الإنجليزية Stimmer Porter من مكتبة ntlk.


لقد استخدمت الطريقة غير المباشرة لإنشاء قائمة بكلمات القاموس ، راجع التعليمات البرمجية التي تبدأ بـ "من استيراد sklearn.feature_extraction.text CountVectorizer". سأحتاج هذا لاحقًا.


 import re import nltk nltk.download('stopwords') from nltk.corpus import stopwords from nltk.stem.porter import PorterStemmer corpus = [] for i in range(0, len(dataset.index)): review = re.sub('[^a-zA-Z]', ' ', dataset['text'][i]) review = review.lower() review = review.split() ps = PorterStemmer() review = [ps.stem(word) for word in review if not word in set(stopwords.words('english'))] review = ' '.join(review) corpus.append(review) from sklearn.feature_extraction.text import CountVectorizer cv = CountVectorizer() X = cv.fit_transform(corpus).toarray() names = cv.get_feature_names() dfnames = pd.DataFrame(names).transpose() dfnames.to_excel(directory+'names.xlsx', sheet_name='sheet1', index=False) 

كائن الأسماء هو القاموس الذي تبحث عنه. حفظناه على القرص.


نظرة عامة على النتائج


اتضح أكثر من 30 ألف قطعة من الكلمات التي تم تطبيعها بالفعل. وهذه فقط 4366 رقم مقال وكلمة باللغة الإنجليزية فقط.


من المثير للاهتمام:


  1. يستخدم مؤلفو المقالات الكثير من "الكلمات" الغريبة ، على سبيل المثال: aaaaaaaaaaaa أو aaaabbbbccccdddd أو zzzhoditqxfpqbcwr


  2. من الكائن X نحصل على أفضل 10 كلمات إنجليزية شائعة في عينتنا:

كمبيوتر وورد
إتير 4133
المرجع 4030
عودة 2866
نانوثانية 2834
معرف 2740
اسم 2556
جديد 2410
البيانات 2381
السلسلة 2358
http 2304

Source: https://habr.com/ru/post/ar413223/


All Articles