Pelajari cara men-scrape novel dari web dan membuat plot distribusi frekuensi kata; Anda akan mendapatkan pengalaman dengan paket Python requests, BeautifulSoup, dan nltk.
Awal minggu ini, saya melakukan sesi Facebook Live Code along. Di dalamnya, kami menggunakan beberapa Pemrosesan Bahasa Alami dasar untuk membuat plot kata yang paling sering muncul dalam novel Moby Dick. Dalam proses itu, kita juga melihat efektivitas berpikir dalam kerangka pipeline Data Science berikut dengan tetap memperhatikan proses:
Rumuskan pertanyaan Anda;
Dapatkan data Anda;
Olah data Anda untuk menjawab pertanyaan Anda;
Jawab pertanyaan Anda;
Presentasikan solusi Anda agar dapat dipahami orang lain.
Dalam tulisan ini, Anda akan belajar membangun pipeline data science untuk membuat plot distribusi frekuensi kata dalam Moby Dick, serta banyak novel lainnya.
Tip: jika Anda ingin menonton ulang Facebook Live, lihat video berikut; Anda bisa langsung lompat ke menit ke-12 saat Hugo tampil dan sesi benar-benar dimulai.
Kami tidak akan memberikan novelnya: Anda akan belajar men-scrape novel tersebut dari situs web Project Gutenberg (yang pada dasarnya berisi korpus buku yang besar) menggunakan paket Python requests dan cara mengekstrak novel dari data web ini menggunakan BeautifulSoup. Lalu Anda akan menyelami analisis novel menggunakan Natural Language ToolKit (nltk). Dalam prosesnya, Anda akan mempelajari aspek penting Pemrosesan Bahasa Alami (NLP) seperti tokenisasi dan stopword.
Pada akhirnya, Anda akan bisa memvisualisasikan distribusi frekuensi kata dari novel apa pun yang dapat Anda temukan di Project Gutenberg. Keterampilan NLP yang Anda kembangkan, bagaimanapun, akan berlaku untuk banyak data yang dihadapi data scientist karena porsi terbesar data di dunia adalah data tidak terstruktur dan mencakup banyak teks.
Misalnya, menurut Anda distribusi frekuensi kata berikut ini berasal dari apa?
Tulisan ini dihasilkan dari Jupyter Notebook; Anda dapat menemukannya di repositori ini. Jika Anda punya pemikiran, tanggapan, dan/atau renungan, jangan ragu menghubungi saya di Twitter: @hugobowne.
Pra-langkah
Ikuti instruksi di README.md untuk menyiapkan sistem Anda dan siap digunakan.
1. Rumuskan Pertanyaan Anda
Apa saja kata yang paling sering muncul dalam novel Moby Dick dan seberapa sering kemunculannya?
2. Dapatkan Data Anda
Data mentah Anda adalah teks novel Melville, Moby Dick. Bagaimana cara Anda memasukkan teks buku ~800 kata ini ke dalam Python?
Ada beberapa cara untuk melakukannya, tetapi pertama-tama sadari bahwa teksnya tersedia gratis secara daring di Project Gutenberg. Mari menuju ke sana, coba temukan Moby Dick lalu simpan URL terkait di namespace Python Anda:
# Store url
url ='https://www.gutenberg.org/files/2701/2701-h/2701-h.htm'Didukung oleh
Sekarang setelah Anda memiliki URL-nya, Anda perlu mengambil HTML dari situs web tersebut.
Catatan bahwa HTML adalah singkatan dari Hypertext Markup Language dan merupakan bahasa markup standar untuk web.
Requests memungkinkan Anda mengirim permintaan HTTP/1.1 yang organik dan grass-fed, tanpa perlu kerja manual.
dan organisasi berikut mengklaim menggunakan requests secara internal:
Pemerintah Kerajaan Inggris, Amazon, Google, Twilio, NPR, Obama for America, Twitter, Sony, dan lembaga federal AS yang memilih untuk tidak disebutkan namanya.
Selain itu,
Requests adalah salah satu paket Python yang paling banyak diunduh sepanjang masa, dengan lebih dari 13.000.000 unduhan setiap bulan. Semua anak keren memakainya!
Anda akan melakukan permintaan GET dari situs web, yang berarti Anda mengambil data darinya. Ini yang Anda lakukan melalui peramban saat mengunjungi sebuah laman. Ada jenis permintaan lain, seperti permintaan POST, tetapi kita tidak akan membahasnya di sini.
requests memudahkan ini dengan fungsi get. Lakukan permintaan di sini dan periksa tipe objek yang dikembalikan.
# Import `requests`import requests
# Make the request and check object type
r = requests.get(url)type(r)Didukung oleh
Ini adalah objek Response. Anda dapat melihat di panduan kickstart requests bahwa objek Response memiliki atribut text yang memungkinkan Anda mengambil HTML darinya! Mari lakukan ini dan cetak HTML-nya untuk mengeceknya:
# Extract HTML from Response object and print
html = r.text
#print(html)Didukung oleh
OK! HTML ini belum persis seperti yang Anda inginkan. Namun, di dalamnya terkandung apa yang Anda mau: teks Moby Dick. Sekarang yang perlu Anda lakukan adalah mengolah HTML ini untuk mengekstrak novelnya.
3. Olah Data untuk Menjawab Pertanyaan
Bagian 1: Ambil Teks dari HTML
Di sini Anda akan menggunakan paket BeautifulSoup. Situs paket tersebut mengatakan:
Ini terlihat menjanjikan!
Pertama, sedikit tentang nama paket: Beautiful Soup? Dalam pengembangan web, istilah "tag soup" mengacu pada kode HTML yang secara struktural atau sintaksis tidak benar yang ditulis untuk sebuah halaman web. Yang paling baik dilakukan Beautiful Soup adalah membuat tag soup menjadi indah kembali dan mengekstrak informasi darinya dengan mudah! Faktanya, objek utama yang dibuat dan dikueri saat menggunakan paket ini disebut BeautifulSoup. Setelah membuat soup, kita dapat menggunakan metode .get_text() untuk mengekstrak teks.
# Import BeautifulSoup from bs4from bs4 import BeautifulSoup
# Create a BeautifulSoup object from the HTML
soup = BeautifulSoup(html,"html5lib")type(soup)Didukung oleh
<title>
Moby Dick; Or the Whale, by Herman Melville
</title>Didukung oleh
Atau judulnya sebagai string:
# Get soup title as string
soup.title.string
Didukung oleh
'\n Moby Dick; Or the Whale, by Herman Melville\n 'Didukung oleh
Atau semua URL yang ditemukan di dalam tag < a > suatu halaman (hyperlink):
# Get hyperlinks from soup and check out first several
soup.findAll('a')[:8]Didukung oleh
[<a href="#link2H_4_0002">ETYMOLOGY.</a>,<a href="#link2H_4_0003">EXTRACTS(Supplied by a Sub-Sub-Librarian).</a>,<a href="#link2HCH0001">CHAPTER1. Loomings.</a>,<a href="#link2HCH0002">CHAPTER2. The Carpet-Bag.</a>,<a href="#link2HCH0003">CHAPTER3. The Spouter-Inn.</a>,<a href="#link2HCH0004">CHAPTER4. The Counterpane.</a>,<a href="#link2HCH0005">CHAPTER5. Breakfast.</a>,<a href="#link2HCH0006">CHAPTER6. The Street.</a>]Didukung oleh
Yang ingin Anda lakukan adalah mengekstrak teks dari soup dan ada metode .get_text() yang sangat membantu untuk ini.
Ambil teksnya, cetak, dan lihat. Apakah ini yang Anda inginkan?
# Get the text out of the soup and print it
text = soup.get_text()#print(text)Didukung oleh
Perhatikan bahwa ini sekarang hampir seperti yang Anda inginkan.
Ini adalah teks novel dengan beberapa bagian yang tidak diinginkan di awal dan di akhir. Anda bisa menghapusnya jika mau. Namun, konten ini jauh lebih sedikit dibandingkan teks Moby Dick sehingga, pada pendekatan pertama, membiarkannya tidak masalah dan ini akan menjadi pendekatan di sini. Untuk hasil yang lebih andal, saya sarankan menghapusnya.
Sekarang setelah Anda memiliki teks yang diminati, saatnya menghitung berapa kali setiap kata muncul dan membuat plot histogram frekuensi yang Anda inginkan: saatnya memanggil Natural Language Processing!
Bagian 2: Ekstrak Kata dari Teks Anda dengan NLP
Sekarang Anda akan menggunakan nltk, Natural Language Toolkit, untuk
Melakukan tokenisasi teks (istilah keren untuk memecah menjadi token, seperti kata);
Menghapus stopword (kata seperti 'a' dan 'the' yang sangat sering muncul di ~ hampir semua teks berbahasa Inggris).
Langkah 1: Tokenisasi
Anda ingin melakukan tokenisasi pada teks Anda, yaitu memecahnya menjadi daftar kata. Intinya, Anda ingin memisahkan bagian-bagian teks yang dipisahkan oleh spasi kosong.
Untuk melakukan ini, Anda akan menggunakan alat yang kuat yang disebut regular expressions. Regular expression, atau disingkat regex, adalah urutan karakter yang mendefinisikan pola pencarian. Regex terkenal membingungkan dan paling baik diperkenalkan melalui contoh.
Anda memiliki string 'peter piper picked a peck of pickled peppers' dan Anda ingin mengekstrak dari daftar semua kata di dalamnya yang dimulai dengan huruf 'p'.
Regular expression yang cocok dengan semua kata yang diawali 'p' adalah 'p\w+'. Mari kita uraikan:
'p' di awal regular expression berarti Anda hanya akan mencocokkan urutan karakter yang dimulai dengan 'p';
'\w' adalah karakter khusus yang akan mencocokkan karakter alfanumerik A-z, a-z, 0-9, bersama dengan garis bawah;
'+' memberi tahu bahwa karakter sebelumnya dalam regex dapat muncul sebanyak yang Anda inginkan dalam string yang ingin Anda cocokan. Ini berarti '\w+' akan mencocokkan sebarang urutan karakter alfanumerik dan garis bawah.
Gabungkan semuanya dan regular expression 'p\w+' akan mencocokkan semua substring yang dimulai dengan 'p' dan diikuti oleh karakter alfanumerik dan garis bawah. Dalam kebanyakan teks bahasa Inggris yang masuk akal, ini akan sesuai dengan kata yang dimulai dengan 'p'.
Sekarang Anda akan menggunakan paket bawaan Python re untuk mengekstrak semua kata yang dimulai dengan 'p' dari kalimat 'peter piper picked a peck of pickled peppers' sebagai pemanasan.
# Import regex packageimport re
# Define sentence
sentence ='peter piper pick a peck of pickled peppers'# Define regex
ps ='p\w+'# Find all words in sentence that match the regex and print them
re.findall(ps, sentence)Didukung oleh
['peter','piper','pick','peck','pickled','peppers']Didukung oleh
Ini terlihat cukup bagus. Sekarang, jika 'p\w+' adalah regex yang mencocokkan kata yang dimulai dengan 'p', apa regex yang mencocokkan semua kata?
Sekarang tugas Anda melakukannya untuk kalimat mainan Peter Piper di atas.
# Find all words and print them
re.findall('\w+', sentence)Didukung oleh
['peter','piper','pick','a','peck','of','pickled','peppers']Didukung oleh
Sekarang Anda dapat melakukan hal yang sama dengan text, string yang berisi Moby Dick:
# Find all words in Moby Dick and print several
tokens = re.findall('\w+', text)
tokens[:8]Didukung oleh
['Moby','Dick','Or','the','Whale','by','Herman','Melville']Didukung oleh
['Moby','Dick','Or','the','Whale','by','Herman','Melville']Didukung oleh
Baik! Anda hampir sampai. Perhatikan, meskipun, bahwa pada bagian di atas, 'Or' memiliki huruf 'O' kapital dan di tempat lain mungkin tidak, tetapi baik 'Or' maupun 'or' ingin Anda hitung sebagai kata yang sama. Untuk alasan ini, Anda perlu membangun daftar semua kata dalam Moby Dick di mana semua huruf kapital telah diubah menjadi huruf kecil. Anda akan menemukan metode string .lower() berguna:
# Initialize new list
words =[]# Loop through list tokens and make lower casefor word in tokens:
words.append(word.lower())# Print several items from list as sanity check
words[:8]Didukung oleh
['moby','dick','or','the','whale','by','herman','melville']Didukung oleh
Langkah 2: Hapus stopword
Praktik umum adalah menghapus kata yang sangat sering muncul dalam bahasa Inggris seperti 'the', 'of', dan 'a' (dikenal sebagai stopword) karena kurang menarik. Untuk selengkapnya tentang semua teknik ini, lihat kursus Natural Language Processing Fundamentals in Python kami.
Paket nltk memiliki daftar stopword dalam bahasa Inggris yang sekarang akan Anda simpan sebagai sw dan dari mana Anda akan mencetak beberapa elemen pertamanya.
Jika Anda mendapat error di sini, jalankan perintah nltk.download('stopwords') untuk memasang stopword di sistem Anda.
# Import nltkimport nltk
# Get English stopwords and print some of them
sw = nltk.corpus.stopwords.words('english')
sw[:5]Didukung oleh
Anda menginginkan daftar semua kata dalam words yang bukan ada di sw. Salah satu cara mendapatkan daftar ini adalah dengan melintasi semua elemen words dan menambahkannya ke daftar baru jika tidak ada di sw:
# Initialize new list
words_ns =[]# Add to words_ns all words that are in words but not in swfor word in words:if word notin sw:
words_ns.append(word)# Print several list items as sanity check
words_ns[:5]Didukung oleh
['moby','dick','whale','herman','melville']Didukung oleh
4. Jawab Pertanyaan Anda
Pertanyaan kita adalah 'Apa saja kata yang paling sering muncul dalam novel Moby Dick dan seberapa sering kemunculannya?'
Sekarang Anda dapat membuat plot histogram frekuensi kata dalam Moby Dick hanya dengan dua baris kode menggunakan nltk. Untuk melakukan ini,
Anda membuat objek distribusi frekuensi menggunakan fungsi nltk.FreqDist();
Anda menggunakan metode plot() dari objek yang dihasilkan.
#Import datavis librariesimport matplotlib.pyplot as plt
import seaborn as sns
# Figures inline and set visualization style%matplotlib inline
sns.set()# Create freq dist and plot
freqdist1 = nltk.FreqDist(words_ns)
freqdist1.plot(25)Didukung oleh
5. Presentasikan Solusi Anda
Hal menariknya adalah, dengan menggunakan nltk untuk menjawab pertanyaan kita, kita sebenarnya sudah mempresentasikan solusi dengan cara yang dapat dikomunikasikan kepada orang lain: sebuah plot distribusi frekuensi! Anda dapat membaca kata yang paling umum, beserta frekuensinya. Misalnya, 'whale' adalah kata yang paling umum dalam novel (tidak mengherankan), mengecualikan stopword, dan muncul lebih dari 1200 kali!
MATERIAL BONUS
Karena Anda telah melihat bahwa ada banyak novel di Project Gutenberg yang bisa kita buatkan histogram frekuensi katanya, masuk akal untuk menulis fungsi Anda sendiri yang melakukan semua ini:
defplot_word_freq(url):"""Takes a url (from Project Gutenberg) and plots a word frequency
distribution"""# Make the request and check object type
r = requests.get(url)# Extract HTML from Response object and print
html = r.text
# Create a BeautifulSoup object from the HTML
soup = BeautifulSoup(html,"html5lib")# Get the text out of the soup and print it
text = soup.get_text()# Create tokenizer
tokenizer = RegexpTokenizer('\w+')# Create tokens
tokens = tokenizer.tokenize(text)# Initialize new list
words =[]# Loop through list tokens and make lower casefor word in tokens:
words.append(word.lower())# Get English stopwords and print some of them
sw = nltk.corpus.stopwords.words('english')# Initialize new list
words_ns =[]# Add to words_ns all words that are in words but not in swfor word in words:if word notin sw:
words_ns.append(word)# Create freq dist and plot
freqdist1 = nltk.FreqDist(words_ns)
freqdist1.plot(25)Didukung oleh
Sekarang gunakan fungsi tersebut untuk membuat plot distribusi frekuensi kata dari teks lain di Project Gutenberg:
Pride and Prejudice:
plot_word_freq('https://www.gutenberg.org/files/42671/42671-h/42671-h.htm')Didukung oleh
Robinson Crusoe
plot_word_freq('https://www.gutenberg.org/files/521/521-h/521-h.htm')Didukung oleh
The King James Bible
plot_word_freq('https://www.gutenberg.org/files/10/10-h/10-h.htm')Didukung oleh
Kesimpulan
Dalam tulisan ini, Anda mempelajari cara membangun pipeline Data Science untuk membuat plot distribusi frekuensi kata dalam Moby Dick, serta banyak novel lainnya. Anda mempelajari cara men-scrape novel tersebut dari situs web Project Gutenberg (korpus buku yang besar) menggunakan paket Python requests dan cara mengekstrak novel dari data web ini menggunakan BeautifulSoup. Lalu Anda langsung menganalisis novel menggunakan Natural Language ToolKit (nltk). Dalam prosesnya Anda mempelajari aspek penting Pemrosesan Bahasa Alami (NLP) seperti tokenisasi dan stopword. Sekarang Anda mampu memvisualisasikan distribusi frekuensi kata dari novel apa pun yang dapat Anda temukan di Project Gutenberg. Keterampilan NLP yang Anda kembangkan juga berlaku untuk banyak data yang dihadapi Data Scientist karena porsi terbesar data di dunia adalah data tidak terstruktur dan mencakup banyak teks.
Tulisan ini dihasilkan dari Jupyter Notebook; Anda dapat menemukannya di repositori ini. Jika Anda punya pemikiran, tanggapan, dan/atau renungan, jangan ragu menghubungi saya di twitter: @hugobowne. Beri tahu saya proyek keren apa yang Anda bangun.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Awal minggu ini, saya melakukan sesi Facebook Live Code along. Di dalamnya, kami menggunakan beberapa Pemrosesan Bahasa Alami dasar untuk membuat plot kata yang paling sering muncul dalam novel Moby Dick. Dalam proses itu, kita juga melihat efektivitas berpikir dalam kerangka pipeline Data Science berikut dengan tetap memperhatikan proses:
Dalam tulisan ini, Anda akan belajar membangun pipeline data science untuk membuat plot distribusi frekuensi kata dalam Moby Dick, serta banyak novel lainnya.
Tip: jika Anda ingin menonton ulang Facebook Live, lihat video berikut; Anda bisa langsung lompat ke menit ke-12 saat Hugo tampil dan sesi benar-benar dimulai.
Kami tidak akan memberikan novelnya: Anda akan belajar men-scrape novel tersebut dari situs web Project Gutenberg (yang pada dasarnya berisi korpus buku yang besar) menggunakan paket Python
requestsdan cara mengekstrak novel dari data web ini menggunakanBeautifulSoup. Lalu Anda akan menyelami analisis novel menggunakan Natural Language ToolKit (nltk). Dalam prosesnya, Anda akan mempelajari aspek penting Pemrosesan Bahasa Alami (NLP) seperti tokenisasi dan stopword.Pada akhirnya, Anda akan bisa memvisualisasikan distribusi frekuensi kata dari novel apa pun yang dapat Anda temukan di Project Gutenberg. Keterampilan NLP yang Anda kembangkan, bagaimanapun, akan berlaku untuk banyak data yang dihadapi data scientist karena porsi terbesar data di dunia adalah data tidak terstruktur dan mencakup banyak teks.
Misalnya, menurut Anda distribusi frekuensi kata berikut ini berasal dari apa?
Tulisan ini dihasilkan dari Jupyter Notebook; Anda dapat menemukannya di repositori ini. Jika Anda punya pemikiran, tanggapan, dan/atau renungan, jangan ragu menghubungi saya di Twitter: @hugobowne.
Pra-langkah
Ikuti instruksi di README.md untuk menyiapkan sistem Anda dan siap digunakan.
1. Rumuskan Pertanyaan Anda
Apa saja kata yang paling sering muncul dalam novel Moby Dick dan seberapa sering kemunculannya?
2. Dapatkan Data Anda
Data mentah Anda adalah teks novel Melville, Moby Dick. Bagaimana cara Anda memasukkan teks buku ~800 kata ini ke dalam Python?
Ada beberapa cara untuk melakukannya, tetapi pertama-tama sadari bahwa teksnya tersedia gratis secara daring di Project Gutenberg. Mari menuju ke sana, coba temukan Moby Dick lalu simpan URL terkait di namespace Python Anda:
Sekarang setelah Anda memiliki URL-nya, Anda perlu mengambil HTML dari situs web tersebut.
Catatan bahwa HTML adalah singkatan dari Hypertext Markup Language dan merupakan bahasa markup standar untuk web.
Anda akan menggunakan
requestsuntuk melakukan ini, salah satu paket Python yang paling populer dan berguna. Anda dapat mempelajari lebih lanjut di kursus Importing Data in Python (Bagian 2) di DataCamp.Menurut situs paket
requests:dan organisasi berikut mengklaim menggunakan
requestssecara internal:Selain itu,
Anda akan melakukan permintaan
GETdari situs web, yang berarti Anda mengambil data darinya. Ini yang Anda lakukan melalui peramban saat mengunjungi sebuah laman. Ada jenis permintaan lain, seperti permintaanPOST, tetapi kita tidak akan membahasnya di sini.requestsmemudahkan ini dengan fungsiget. Lakukan permintaan di sini dan periksa tipe objek yang dikembalikan.Ini adalah objek
Response. Anda dapat melihat di panduan kickstartrequestsbahwa objekResponsememiliki atributtextyang memungkinkan Anda mengambil HTML darinya! Mari lakukan ini dan cetak HTML-nya untuk mengeceknya:OK! HTML ini belum persis seperti yang Anda inginkan. Namun, di dalamnya terkandung apa yang Anda mau: teks Moby Dick. Sekarang yang perlu Anda lakukan adalah mengolah HTML ini untuk mengekstrak novelnya.
3. Olah Data untuk Menjawab Pertanyaan
Bagian 1: Ambil Teks dari HTML
Di sini Anda akan menggunakan paket
BeautifulSoup. Situs paket tersebut mengatakan:Ini terlihat menjanjikan!
Pertama, sedikit tentang nama paket: Beautiful Soup? Dalam pengembangan web, istilah "tag soup" mengacu pada kode HTML yang secara struktural atau sintaksis tidak benar yang ditulis untuk sebuah halaman web. Yang paling baik dilakukan Beautiful Soup adalah membuat tag soup menjadi indah kembali dan mengekstrak informasi darinya dengan mudah! Faktanya, objek utama yang dibuat dan dikueri saat menggunakan paket ini disebut
BeautifulSoup. Setelah membuat soup, kita dapat menggunakan metode.get_text()untuk mengekstrak teks.Dari objek soup ini, Anda dapat mengekstrak berbagai informasi menarik tentang situs yang Anda scrape, seperti judul:
Atau judulnya sebagai string:
Atau semua URL yang ditemukan di dalam tag < a > suatu halaman (hyperlink):
Yang ingin Anda lakukan adalah mengekstrak teks dari
soupdan ada metode.get_text()yang sangat membantu untuk ini.Ambil teksnya, cetak, dan lihat. Apakah ini yang Anda inginkan?
Perhatikan bahwa ini sekarang hampir seperti yang Anda inginkan.
Ini adalah teks novel dengan beberapa bagian yang tidak diinginkan di awal dan di akhir. Anda bisa menghapusnya jika mau. Namun, konten ini jauh lebih sedikit dibandingkan teks Moby Dick sehingga, pada pendekatan pertama, membiarkannya tidak masalah dan ini akan menjadi pendekatan di sini. Untuk hasil yang lebih andal, saya sarankan menghapusnya.
Sekarang setelah Anda memiliki teks yang diminati, saatnya menghitung berapa kali setiap kata muncul dan membuat plot histogram frekuensi yang Anda inginkan: saatnya memanggil Natural Language Processing!
Bagian 2: Ekstrak Kata dari Teks Anda dengan NLP
Sekarang Anda akan menggunakan
nltk, Natural Language Toolkit, untukLangkah 1: Tokenisasi
Anda ingin melakukan tokenisasi pada teks Anda, yaitu memecahnya menjadi daftar kata. Intinya, Anda ingin memisahkan bagian-bagian teks yang dipisahkan oleh spasi kosong.
Untuk melakukan ini, Anda akan menggunakan alat yang kuat yang disebut regular expressions. Regular expression, atau disingkat regex, adalah urutan karakter yang mendefinisikan pola pencarian. Regex terkenal membingungkan dan paling baik diperkenalkan melalui contoh.
Regular expression yang cocok dengan semua kata yang diawali 'p' adalah 'p\w+'. Mari kita uraikan:
Gabungkan semuanya dan regular expression 'p\w+' akan mencocokkan semua substring yang dimulai dengan 'p' dan diikuti oleh karakter alfanumerik dan garis bawah. Dalam kebanyakan teks bahasa Inggris yang masuk akal, ini akan sesuai dengan kata yang dimulai dengan 'p'.
Sekarang Anda akan menggunakan paket bawaan Python
reuntuk mengekstrak semua kata yang dimulai dengan 'p' dari kalimat 'peter piper picked a peck of pickled peppers' sebagai pemanasan.Ini terlihat cukup bagus. Sekarang, jika 'p\w+' adalah regex yang mencocokkan kata yang dimulai dengan 'p', apa regex yang mencocokkan semua kata?
Sekarang tugas Anda melakukannya untuk kalimat mainan Peter Piper di atas.
Sekarang Anda dapat melakukan hal yang sama dengan
text, string yang berisi Moby Dick:Catatan bahwa ada juga cara untuk melakukan ini dengan
nltk, Natural Language Toolkit:Baik! Anda hampir sampai. Perhatikan, meskipun, bahwa pada bagian di atas, 'Or' memiliki huruf 'O' kapital dan di tempat lain mungkin tidak, tetapi baik 'Or' maupun 'or' ingin Anda hitung sebagai kata yang sama. Untuk alasan ini, Anda perlu membangun daftar semua kata dalam Moby Dick di mana semua huruf kapital telah diubah menjadi huruf kecil. Anda akan menemukan metode string
.lower()berguna:Langkah 2: Hapus stopword
Praktik umum adalah menghapus kata yang sangat sering muncul dalam bahasa Inggris seperti 'the', 'of', dan 'a' (dikenal sebagai stopword) karena kurang menarik. Untuk selengkapnya tentang semua teknik ini, lihat kursus Natural Language Processing Fundamentals in Python kami.
Paket
nltkmemiliki daftar stopword dalam bahasa Inggris yang sekarang akan Anda simpan sebagaiswdan dari mana Anda akan mencetak beberapa elemen pertamanya.Jika Anda mendapat error di sini, jalankan perintah
nltk.download('stopwords')untuk memasang stopword di sistem Anda.Anda menginginkan daftar semua kata dalam
wordsyang bukan ada disw. Salah satu cara mendapatkan daftar ini adalah dengan melintasi semua elemenwordsdan menambahkannya ke daftar baru jika tidak ada disw:4. Jawab Pertanyaan Anda
Pertanyaan kita adalah 'Apa saja kata yang paling sering muncul dalam novel Moby Dick dan seberapa sering kemunculannya?'
Sekarang Anda dapat membuat plot histogram frekuensi kata dalam Moby Dick hanya dengan dua baris kode menggunakan
nltk. Untuk melakukan ini,nltk.FreqDist();plot()dari objek yang dihasilkan.5. Presentasikan Solusi Anda
Hal menariknya adalah, dengan menggunakan
nltkuntuk menjawab pertanyaan kita, kita sebenarnya sudah mempresentasikan solusi dengan cara yang dapat dikomunikasikan kepada orang lain: sebuah plot distribusi frekuensi! Anda dapat membaca kata yang paling umum, beserta frekuensinya. Misalnya, 'whale' adalah kata yang paling umum dalam novel (tidak mengherankan), mengecualikan stopword, dan muncul lebih dari 1200 kali!MATERIAL BONUS
Karena Anda telah melihat bahwa ada banyak novel di Project Gutenberg yang bisa kita buatkan histogram frekuensi katanya, masuk akal untuk menulis fungsi Anda sendiri yang melakukan semua ini:
Sekarang gunakan fungsi tersebut untuk membuat plot distribusi frekuensi kata dari teks lain di Project Gutenberg:
Kesimpulan
Dalam tulisan ini, Anda mempelajari cara membangun pipeline Data Science untuk membuat plot distribusi frekuensi kata dalam Moby Dick, serta banyak novel lainnya. Anda mempelajari cara men-scrape novel tersebut dari situs web Project Gutenberg (korpus buku yang besar) menggunakan paket Python
requestsdan cara mengekstrak novel dari data web ini menggunakanBeautifulSoup. Lalu Anda langsung menganalisis novel menggunakan Natural Language ToolKit (nltk). Dalam prosesnya Anda mempelajari aspek penting Pemrosesan Bahasa Alami (NLP) seperti tokenisasi dan stopword. Sekarang Anda mampu memvisualisasikan distribusi frekuensi kata dari novel apa pun yang dapat Anda temukan di Project Gutenberg. Keterampilan NLP yang Anda kembangkan juga berlaku untuk banyak data yang dihadapi Data Scientist karena porsi terbesar data di dunia adalah data tidak terstruktur dan mencakup banyak teks.Tulisan ini dihasilkan dari Jupyter Notebook; Anda dapat menemukannya di repositori ini. Jika Anda punya pemikiran, tanggapan, dan/atau renungan, jangan ragu menghubungi saya di twitter: @hugobowne. Beri tahu saya proyek keren apa yang Anda bangun.
Lihat tutorial DataCamp Web Scraping menggunakan Python (dan Beautiful Soup) dan Cara Menggunakan Python untuk Men-scrape Amazon.