Kamus Habra. Bagian 1

Teman, selamat sore.


Saya memecahkan masalah penyusunan kamus Habrahabr untuk tujuan melacak kemunculan bahasa baru, kerangka kerja, praktik manajemen, dll. Singkatnya, kata-kata baru.


Hasilnya adalah daftar kata-kata bahasa Inggris "dalam kasus nominatif dan tunggal."


Dia melakukannya di lingkungan Windows 10 x64, menggunakan bahasa Python 3 di editor Spyder di Anaconda 5.1.0, dan menggunakan koneksi jaringan kabel.


Pada artikel ini, saya mendapatkan kamus kata-kata bahasa Inggris dalam sampel terbatas. Jika topiknya ternyata menarik, maka di masa depan saya berencana untuk mendapatkan kamus kata-kata bahasa Inggris dan Rusia pada pilihan penuh artikel Habr. Dengan bahasa Rusia, semuanya jadi lebih rumit.


Proses parsing


Saya mengambil disc dari sini . Di bawah ini adalah kode untuk versi parser saya.


Untuk mengumpulkan kamus Habr, Anda perlu memotong artikelnya dan memilih teks artikel dari mereka. Saya tidak memproses meta-informasi dari artikel-artikel itu. Artikel tentang Habré memiliki "nomor" saya, seperti https://habr.com/post/346198/ . Pencacahan artikel dapat dilakukan dari 0 hingga 354366, ini adalah artikel terakhir pada saat proyek.


Untuk setiap masalah, kami mencoba untuk mendapatkan halaman html dan, ketika ini berhasil, kami mengeluarkan judul dan teks artikel dari struktur html. Kode bypass adalah sebagai berikut:


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) 

Secara empiris menetapkan bahwa artikel itu sendiri kurang dari tiga kali lipat jumlahnya. Saya dilatih pada 4366 angka - ini adalah berapa banyak sistem saya memuat dalam setengah jam.


Saya tidak melakukan optimasi kecepatan, meskipun mereka mengatakan bahwa jika Anda mulai memproses dalam 100 utas, itu akan jauh lebih cepat.


Saya menyimpan hasilnya ke disk


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

- agar tidak mengulang unduhan lambat dari Internet. File ternyata berukuran 10 megabyte.


Saya tertarik dengan nama instrumen dalam bahasa Inggris. Saya tidak membutuhkan istilah dalam bentuk yang berbeda, saya ingin segera mendapatkan bentuk kata-kata normal. Jelas bahwa kata-kata yang paling umum adalah "dalam", "pada" dan "oleh", kami menghapusnya. Untuk menormalkan kamus, saya menggunakan English Stimmer Porter dari perpustakaan ntlk.


Saya menggunakan metode tidak langsung untuk membuat daftar kata-kata kamus, lihat kode dimulai dengan "dari sklearn.feature_extraction.text import CountVectorizer". Saya akan membutuhkan ini nanti.


 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) 

Objek names adalah kamus yang Anda cari. Kami menyimpannya ke disk.


Ikhtisar Hasil


Ternyata lebih dari 30 ribu keping kata yang sudah dinormalisasi. Dan ini hanya 4.366 nomor artikel dan kata-kata dalam bahasa Inggris saja.


Dari yang menarik:


  1. Penulis artikel menggunakan banyak "kata-kata" yang aneh, misalnya: aaaaaaaaaaaa, aaaabbbbccccdddd atau zzzhoditqxfpqbcwr


  2. Dari objek X kita mendapatkan 10 kata bahasa Inggris terpopuler di sampel kami:

Kata pc
iter 4133
op 4030
kembali 2866
ns 2834
id 2740
nama 2556
baru 2410
data 2381
string 2358
http 2304

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


All Articles