दोस्तों, शुभ दोपहर।
मैंने नई भाषाओं, रूपरेखा, प्रबंधन प्रथाओं, आदि के उद्भव पर नज़र रखने के उद्देश्य के लिए हब्राह्रा शब्दकोश को संकलित करने की समस्या को हल किया। संक्षेप में, नए शब्द।
परिणाम अंग्रेजी शब्दों की एक सूची थी "नाममात्र मामले और एकवचन में।"
उन्होंने इसे विंडोज 10 x64 वातावरण में किया, एनाकोंडा 5.1.2 में स्पाइडर संपादक में पायथन 3 भाषा का उपयोग किया, और एक वायर्ड नेटवर्क कनेक्शन का उपयोग किया।
इस लेख में, मुझे एक सीमित नमूने में अंग्रेजी शब्दों का एक शब्दकोश मिला। यदि विषय दिलचस्प हो जाता है, तो भविष्य में मैं हबर के लेखों के पूर्ण चयन पर अंग्रेजी और रूसी दोनों शब्दों का शब्दकोश प्राप्त करने की योजना बना रहा हूं। रूसी भाषा के साथ, सब कुछ अधिक जटिल है।
पार्सिंग प्रक्रिया
मैंने यहां से डिस्क ले ली। नीचे मेरे पार्सर के संस्करण के लिए कोड है।
हैबर के शब्दकोश को इकट्ठा करने के लिए, आपको उसके लेखों को दरकिनार करना होगा और उनसे लेखों के पाठ का चयन करना होगा। मैंने लेखों की मेटा-जानकारी को संसाधित नहीं किया। Habré के लेखों में मेरा "नंबर" है, जैसे 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 मेगाबाइट की हो गई।
मुझे वाद्ययंत्रों के अंग्रेजी नामों में दिलचस्पी थी। मुझे विभिन्न रूपों में शब्दों की आवश्यकता नहीं थी, मैं तुरंत शब्दों के सामान्य रूप प्राप्त करना चाहता था। यह स्पष्ट है कि सबसे आम शब्द "इन", "ऑन" और "बाय" हैं, हम उन्हें हटा देते हैं। शब्दकोश को सामान्य करने के लिए, मैंने ntlk लाइब्रेरी से इंग्लिश स्टिमर पोर्टर का उपयोग किया।
मैंने शब्दकोश शब्दों की एक सूची बनाने के लिए अप्रत्यक्ष विधि का उपयोग किया, "sklearn.feature_extraction.text आयात काउंटविक्टराइज़र" से शुरू होने वाले कोड को देखें। मुझे बाद में इसकी आवश्यकता होगी।
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 लेख संख्या और शब्द हैं।
दिलचस्प से:
लेख के लेखक बहुत सारे अजीब "शब्दों" का उपयोग करते हैं, उदाहरण के लिए: आआआआआआआआआआआआआआ, आआआआआआआआआआआआआआआआआआआआआआआआआआआसससससससससससससस, जर, जडजोड़ितकसक्सफपक्कबकर
- ऑब्जेक्ट X से हमें अपने नमूने में शीर्ष 10 सबसे लोकप्रिय अंग्रेजी शब्द मिलते हैं:
वर्ड पीसी
पुनरावृति 4133
सेशन 4030
वापसी 2866
एनएस 2834
आईडी 2740
नाम 2556
नया 2410
डेटा 2381
स्ट्रिंग 2358
http 2304