Anda harus membersihkan teks terlebih dahulu, yang berarti memisahkannya menjadi kata-kata dan menangani tanda baca dan huruf besar-kecil Show
Bahkan, ada seluruh rangkaian metode persiapan teks yang mungkin perlu Anda gunakan, dan pilihan metode sangat bergantung pada tugas pemrosesan bahasa alami Anda. Dalam tutorial ini, Anda akan menemukan cara membersihkan dan menyiapkan teks agar siap untuk dimodelkan dengan pembelajaran mesin Setelah menyelesaikan tutorial ini, Anda akan tahu
Mulai proyek Anda dengan buku baru saya Deep Learning for Natural Language Processing, termasuk tutorial langkah demi langkah dan file kode sumber Python untuk semua contoh Mari kita mulai
Bagaimana Mengembangkan Model Perceptron Multilayer untuk Time Series Forecasting Sekilas TutorialTutorial ini dibagi menjadi 6 bagian;
Butuh bantuan dengan Pembelajaran Mendalam untuk Data Teks?Ikuti kursus kilat email 7 hari gratis saya sekarang (dengan kode) Klik untuk mendaftar dan juga dapatkan kursus versi Ebook PDF gratis Mulai Kursus Crash GRATIS Anda Sekarang Metamorfosis oleh Franz KafkaMari kita mulai dengan memilih kumpulan data Dalam tutorial ini, kita akan menggunakan teks dari buku Metamorphosis oleh Franz Kafka. Tidak ada alasan khusus, selain pendek, saya menyukainya, dan Anda mungkin menyukainya juga. Saya berharap itu salah satu buku klasik yang harus dibaca sebagian besar siswa di sekolah Teks lengkap untuk Metamorfosis tersedia secara gratis dari Project Gutenberg
Anda dapat mengunduh versi teks ASCII dari teks di sini
Unduh file dan letakkan di direktori kerja Anda saat ini dengan nama file “metamorphosis. txt" File tersebut berisi informasi header dan footer yang tidak kami minati, khususnya informasi hak cipta dan lisensi. Buka file dan hapus informasi header dan footer dan simpan file sebagai “metamorphosis_clean. txt" Awal dari file bersih akan terlihat seperti
File harus diakhiri dengan
Gregor yang malang… Pembersihan Teks Khusus Untuk TugasSetelah benar-benar menguasai data teks Anda, langkah pertama dalam membersihkan data teks adalah memiliki gagasan yang kuat tentang apa yang ingin Anda capai, dan dalam konteks itu, tinjau teks Anda untuk melihat apa sebenarnya yang dapat membantu Luangkan waktu sejenak untuk melihat teks. Apa yang Anda perhatikan? Inilah yang saya lihat
Saya yakin ada lebih banyak hal yang terjadi pada mata yang terlatih Kita akan melihat langkah-langkah pembersihan teks umum dalam tutorial ini Namun demikian, pertimbangkan beberapa kemungkinan tujuan yang mungkin kita miliki saat bekerja dengan dokumen teks ini Sebagai contoh
Gunakan tugas Anda sebagai lensa untuk memilih cara menyiapkan data teks Anda Tokenisasi ManualPembersihan teks itu sulit, tetapi teks yang telah kita pilih untuk dikerjakan sudah cukup bersih Kami hanya bisa menulis beberapa kode Python untuk membersihkannya secara manual, dan ini adalah latihan yang bagus untuk masalah sederhana yang Anda temui. Alat seperti ekspresi reguler dan pemisahan string dapat membantu Anda jauh 1. Muat DataMari memuat data teks sehingga kita dapat bekerja dengannya Teksnya kecil dan akan dimuat dengan cepat dan mudah dimasukkan ke dalam memori. Ini tidak akan selalu terjadi dan Anda mungkin perlu menulis kode ke memori yang memetakan file tersebut. Alat seperti NLTK (dibahas di bagian selanjutnya) akan membuat bekerja dengan file besar menjadi lebih mudah Kita dapat memuat seluruh “metamorphosis_clean. txt” ke dalam memori sebagai berikut 1 2 3 4 5 # memuat teks namafile = 'metamorphosis_clean. txt' berkas = buka(namaberkas, 'rt') teks = file. baca() berkas. tutup() Menjalankan contoh memuat seluruh file ke dalam memori yang siap digunakan 2. Dipisahkan oleh Spasi PutihTeks bersih sering kali berarti daftar kata atau token yang dapat kami kerjakan dalam model pembelajaran mesin kami Ini berarti mengubah teks mentah menjadi daftar kata dan menyimpannya lagi Cara yang sangat sederhana untuk melakukannya adalah dengan membagi dokumen dengan spasi putih, termasuk " ", baris baru, tab, dan lainnya. Kita bisa melakukan ini dengan Python dengan fungsi split() pada string yang dimuat 1 2 3 4 5 6 7 8 # memuat teks namafile = 'metamorphosis_clean. txt' berkas = buka(namaberkas, 'rt') teks = file. baca() berkas. tutup() # dipecah menjadi kata-kata dengan spasi putih kata = teks. pisah() cetak(kata[. 100]) Menjalankan contoh membagi dokumen menjadi daftar kata yang panjang dan mencetak 100 kata pertama untuk kita tinjau Kita dapat melihat bahwa tanda baca dipertahankan (mis. g. "tidak" dan "seperti baju besi"), itu bagus. Kita juga dapat melihat bahwa tanda baca akhir kalimat disimpan dengan kata terakhir (mis. g. "pikiran. ”), yang tidak bagus 1 ['Satu', 'pagi', 'kapan', 'Gregor', 'Samsa', 'terbangun', 'dari', 'bermasalah', 'mimpi', 'dia', 'menemukan', 'dirinya sendiri' . ', 'Dia', 'berbaring', 'pada', 'miliknya', 'seperti baju besi', 'kembali,', 'dan', 'jika', 'dia', 'mengangkat', 'miliknya', ' . ', 'The', 'bedding', 'was', 'hampir', 'mampu', 'untuk', 'menutupi', 'itu', 'dan', 'tampaknya', 'siap', 'untuk', . ', 'Nya', 'banyak', 'kaki', 'menyedihkan', 'tipis', 'dibandingkan', 'dengan', 'itu', 'ukuran', 'dari', 'yang', 'sisanya' . ', '"Apa', 'terjadi', 'pada', 'aku?"', 'dia', 'pikir. ', 'Itu', 'bukan', 'sebuah', 'mimpi. ', 'Nya', 'kamar', 'a', 'pantas', 'manusia'] 3. Pilih KataPendekatan lain mungkin menggunakan model regex (re) dan membagi dokumen menjadi kata-kata dengan memilih string karakter alfanumerik (a-z, A-Z, 0-9 dan '_') Sebagai contoh 1 2 3 4 5 6 7 8 9 # memuat teks namafile = 'metamorphosis_clean. txt' berkas = buka(namaberkas, 'rt') teks = file. baca() berkas. tutup() # dipisah berdasarkan kata saja impor re kata = re. pisah(r'\W+', text) cetak(kata[. 100]) Sekali lagi, menjalankan contoh kita dapat melihat bahwa kita mendapatkan daftar kata-kata kita. Kali ini, kita dapat melihat bahwa "seperti baju besi" sekarang menjadi dua kata "baju besi" dan "seperti" (baik) tetapi kontraksi seperti "Apa" juga dua kata "Apa" dan "s" (tidak bagus) 1 ['Satu', 'pagi', 'kapan', 'Gregor', 'Samsa', 'terbangun', 'dari', 'bermasalah', 'mimpi', 'dia', 'menemukan', 'dirinya', ' 3. Pisahkan dengan Spasi Putih dan Hapus Tanda BacaCatatan. Contoh ini ditulis untuk Python 3 Kita mungkin menginginkan kata-kata, tetapi tanpa tanda baca seperti koma dan tanda kutip. Kami juga ingin menjaga kontraksi bersama Salah satu caranya adalah membagi dokumen menjadi kata-kata dengan spasi putih (seperti pada “2. Pisahkan dengan Spasi Putih“), lalu gunakan terjemahan string untuk mengganti semua tanda baca dengan kosong (mis. g. Singkirkan) Python menyediakan string yang disebut konstan. tanda baca yang menyediakan daftar karakter tanda baca yang bagus. Sebagai contoh 1 cetak(string. tanda baca) Hasil dalam 1 !"#$%&'()*+,-./:;<=>[email protected][\]^_`{|}~ Python menawarkan fungsi yang disebut yang akan memetakan satu set karakter ke yang lain Kita dapat menggunakan fungsi tersebut untuk membuat tabel pemetaan. Kita dapat membuat tabel pemetaan kosong, tetapi argumen ketiga dari fungsi ini memungkinkan kita untuk mencantumkan semua karakter yang akan dihapus selama proses penerjemahan. Sebagai contoh 1 tabel = str. maketrans('', . , string.tanda baca) Kita dapat menyatukan semua ini, memuat file teks, membaginya menjadi kata-kata dengan spasi putih, lalu menerjemahkan setiap kata untuk menghapus tanda baca 1 2 3 4 5 6 7 8 9 10 11 12 # memuat teks namafile = 'metamorphosis_clean. txt' berkas = buka(namaberkas, 'rt') teks = file. baca() berkas. tutup() # dipecah menjadi kata-kata dengan spasi putih kata = teks. pisah() # hapus tanda baca dari setiap kata impor string tabel = str. maketrans('', . , string.tanda baca) dilucuti = [w. terjemahkan(tabel) untuk w in words] cetak(dilucuti[. 100]) Kita dapat melihat bahwa ini memiliki efek yang diinginkan, sebagian besar Kontraksi seperti "What's" telah menjadi "Whats" tetapi "armour-like" telah menjadi "armourlike" 1 ['Satu', 'pagi', 'kapan', 'Gregor', 'Samsa', 'terbangun', 'dari', 'bermasalah', 'mimpi', 'dia', 'menemukan', 'dirinya', ' Jika Anda tahu sesuatu tentang regex, maka Anda tahu hal-hal bisa menjadi rumit dari sini 4. Kasus NormalisasiAdalah umum untuk mengonversi semua kata menjadi satu kasus Ini berarti bahwa kosakata akan menyusut ukurannya, tetapi beberapa perbedaan hilang (mis. g. "Apple" perusahaan vs "apel" buah adalah contoh yang umum digunakan) Kita dapat mengonversi semua kata menjadi huruf kecil dengan memanggil fungsi lower() pada setiap kata Sebagai contoh 1 2 3 4 5 6 7 8 9 namafile = 'metamorphosis_clean. txt' berkas = buka(namaberkas, 'rt') teks = file. baca() berkas. tutup() # dipecah menjadi kata-kata dengan spasi putih kata = teks. pisah() # konversi ke huruf kecil kata = [kata. turunkan() untuk kata in words] cetak(kata[. 100]) Menjalankan contoh, kita dapat melihat bahwa semua kata sekarang menjadi huruf kecil 1 ['satu', 'pagi', 'kapan', 'gregor', 'samsa', 'terbangun', 'dari', 'galau', 'mimpi', 'dia', 'menemukan', 'dirinya' . ', 'dia', 'berbaring', 'pada', 'miliknya', 'seperti baju besi', 'kembali,', 'dan', 'jika', 'dia', 'mengangkat', 'miliknya', ' . ',', . ', 'dia', 'banyak', 'kaki', 'menyedihkan', 'kurus', 'dibandingkan', 'dengan', 'itu', 'ukuran', 'dari', 'yang', 'sisanya' . ', '"apa', 'terjadi', 'pada', 'aku?"', 'dia', 'pikir. ', 'itu', "bukan", 'sebuah', 'mimpi. ', 'miliknya', 'kamarnya,', 'a', 'pantas', 'manusia'] CatatanMembersihkan teks sangat sulit, khusus masalah, dan penuh pengorbanan Ingat, sederhana lebih baik Data teks lebih sederhana, model lebih sederhana, kosakata lebih kecil. Anda selalu dapat membuat sesuatu menjadi lebih kompleks nanti untuk melihat apakah itu menghasilkan keterampilan model yang lebih baik Selanjutnya, kita akan melihat beberapa alat di perpustakaan NLTK yang menawarkan lebih dari sekadar pemisahan string Tokenisasi dan Pembersihan dengan NLTKNatural Language Toolkit, atau singkatnya NLTK, adalah pustaka Python yang ditulis untuk bekerja dan memodelkan teks Ini menyediakan alat yang bagus untuk memuat dan membersihkan teks yang dapat kita gunakan untuk menyiapkan data kita untuk bekerja dengan pembelajaran mesin dan algoritme pembelajaran mendalam 1. Instal NLTKAnda dapat menginstal NLTK menggunakan pengelola paket favorit Anda, seperti pip 1 sudo pip install -U nltk Setelah penginstalan, Anda perlu menginstal data yang digunakan dengan pustaka, termasuk kumpulan dokumen yang bagus yang dapat Anda gunakan nanti untuk menguji alat lain di NLTK Ada beberapa cara untuk melakukan ini, seperti dari dalam skrip 1 2 impor nltk nltk. unduh() Atau dari baris perintah 1 python -m nltk. pengunduh semua Untuk bantuan lebih lanjut dalam menginstal dan menyiapkan NLTK, lihat
2. Dibagi menjadi KalimatLangkah pertama yang baik dan bermanfaat adalah membagi teks menjadi kalimat Beberapa tugas pemodelan lebih memilih input dalam bentuk paragraf atau kalimat, seperti word2vec. Pertama-tama Anda dapat membagi teks menjadi kalimat, membagi setiap kalimat menjadi kata-kata, lalu menyimpan setiap kalimat ke file, satu kalimat per baris NLTK menyediakan fungsi sent_tokenize() untuk membagi teks menjadi kalimat Contoh di bawah ini memuat file “metamorphosis_clean. txt” ke dalam memori, membaginya menjadi kalimat, dan mencetak kalimat pertama 1 2 3 4 5 6 7 8 9 # memuat data namafile = 'metamorphosis_clean. txt' berkas = buka(namaberkas, 'rt') teks = file. baca() berkas. tutup() # dipecah menjadi kalimat dari nltk impor sent_tokenize kalimat = sent_tokenize(teks) cetak(kalimat[0]) Menjalankan contoh, kita dapat melihat bahwa meskipun dokumen dipecah menjadi kalimat, setiap kalimat masih mempertahankan baris baru dari bungkus buatan baris di dokumen asli.
3. Dibagi menjadi Kata-kataNLTK menyediakan fungsi yang disebut word_tokenize() untuk memisahkan string menjadi token (nominal kata-kata) Itu membagi token berdasarkan ruang putih dan tanda baca. Misalnya, koma dan titik diambil sebagai token terpisah. Kontraksi dipisahkan (mis. g. "Apa" menjadi "Apa" "'s"). Kutipan disimpan, dan seterusnya Sebagai contoh 1 2 3 4 5 6 7 8 9 # memuat data namafile = 'metamorphosis_clean. txt' berkas = buka(namaberkas, 'rt') teks = file. baca() berkas. tutup() # dibagi menjadi kata-kata dari nltk. tokenize import word_tokenize token = word_tokenize(teks) cetak(token[. 100]) Menjalankan kode, kita dapat melihat bahwa tanda baca sekarang adalah token yang kemudian dapat kita putuskan untuk difilter secara khusus 1 ['Satu', 'pagi', ',', 'ketika', 'Gregor', 'Samsa', 'bangun', 'dari', 'bermasalah', 'mimpi', ',', 'dia', ' . ', 'Dia', 'berbaring', 'pada', 'miliknya', 'seperti baju besi', 'kembali', ',', 'dan', 'jika', 'dia', 'mengangkat', 'miliknya . ', 'The', 'bedding', 'was', 'hampir', 'mampu', 'untuk', 'menutupi', 'itu', 'dan', 'tampaknya', 'siap', 'untuk', . ', 'Nya', 'banyak', 'kaki', ',', 'menyedihkan', 'kurus', 'dibandingkan', 'dengan', 'itu', 'ukuran', 'dari', 'itu', . ', '``', 'Apa', "'s", 'terjadi', 'untuk'] 4. Saring Tanda BacaKami dapat memfilter semua token yang tidak kami minati, seperti semua tanda baca mandiri Ini dapat dilakukan dengan mengulangi semua token dan hanya menyimpan token yang semuanya alfabet. Python memiliki fungsi yang dapat digunakan. Sebagai contoh 1 2 3 4 5 6 7 8 9 10 11 # memuat data namafile = 'metamorphosis_clean. txt' berkas = buka(namaberkas, 'rt') teks = file. baca() berkas. tutup() # dibagi menjadi kata-kata dari nltk. tokenize import word_tokenize token = word_tokenize(teks) # hapus semua token yang bukan abjad kata = [kata untuk word in tokens if word.isalpha()] cetak(kata[. 100]) Menjalankan contoh, Anda dapat melihat bahwa tidak hanya tanda baca, tetapi contoh seperti "mirip baju besi" dan "'s" juga difilter 1 ['Satu', 'pagi', 'kapan', 'Gregor', 'Samsa', 'terbangun', 'dari', 'bermasalah', 'mimpi', 'dia', 'menemukan', 'dirinya', ' 5. Saring Stop Words (dan Pipeline)Kata-kata berhenti adalah kata-kata yang tidak berkontribusi pada makna frasa yang lebih dalam Mereka adalah kata-kata yang paling umum seperti. “itu”, “a”, dan “adalah” Untuk beberapa aplikasi seperti klasifikasi dokumentasi, mungkin masuk akal untuk menghapus kata-kata berhenti NLTK menyediakan daftar kata-kata berhenti yang disepakati bersama untuk berbagai bahasa, seperti bahasa Inggris. Mereka dapat dimuat sebagai berikut 1 2 3 dari nltk. corpus impor stopwords stop_words = stopwords. kata-kata('bahasa inggris') cetak(stop_words) Anda dapat melihat daftar lengkapnya sebagai berikut 1 ['aku', 'aku', 'milikku', 'diriku', 'kita', 'milik kita', 'milik kita', 'kamu', 'kamu', 'milikmu', 'dirimu', ' Anda dapat melihat bahwa semuanya menggunakan huruf kecil dan tanda baca telah dihapus Anda dapat membandingkan token Anda dengan kata berhenti dan memfilternya, tetapi Anda harus memastikan bahwa teks Anda disiapkan dengan cara yang sama Mari kita tunjukkan ini dengan saluran kecil persiapan teks termasuk
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # memuat data namafile = 'metamorphosis_clean. txt' berkas = buka(namaberkas, 'rt') teks = file. baca() berkas. tutup() # dibagi menjadi kata-kata dari nltk. tokenize import word_tokenize token = word_tokenize(teks) # konversi ke huruf kecil token = [w. lebih rendah() untuk w in tokens] # hapus tanda baca dari setiap kata impor string tabel = str. maketrans('', . , string.tanda baca) dilucuti = [w. terjemahkan(tabel) untuk w in tokens] # hapus sisa token yang bukan abjad kata = [kata untuk word in stripped if word.isalpha()] # menyaring kata berhenti dari nltk. corpus impor stopwords stop_words = set(stopwords.kata-kata('bahasa inggris')) kata = [w untuk w in words if not w in stop_words] cetak(kata[. 100]) Menjalankan contoh ini, kita dapat melihat bahwa selain semua transformasi lainnya, hentikan kata-kata seperti "a" dan "to" telah dihapus Saya perhatikan bahwa kita masih memiliki token seperti "nt". Lubang kelinci itu dalam; 1 ['satu', 'pagi', 'gregor', 'samsa', 'terbangun', 'bermasalah', 'mimpi', 'ditemukan', 'berubah', 'tempat tidur', 'mengerikan', 'hama', ' 6. Kata BatangStemming mengacu pada proses mengurangi setiap kata ke akar atau basisnya Misalnya "fishing", "fished", "fisher" semuanya direduksi menjadi "fish". ” Beberapa aplikasi, seperti klasifikasi dokumen, mungkin mendapat manfaat dari stemming untuk mengurangi kosa kata dan untuk fokus pada pengertian atau sentimen dokumen daripada makna yang lebih dalam. Ada banyak algoritma stemming, meskipun metode yang populer dan sudah lama ada adalah algoritma Porter Stemming. Metode ini tersedia di NLTK melalui kelas PorterStemmer Sebagai contoh 1 2 3 4 5 6 7 8 9 10 11 12 13 # memuat data namafile = 'metamorphosis_clean. txt' berkas = buka(namaberkas, 'rt') teks = file. baca() berkas. tutup() # dibagi menjadi kata-kata dari nltk. tokenize import word_tokenize token = word_tokenize(teks) # stemming kata dari nltk. batang. porter impor PorterStemmer porter = PorterStemmer() stemmed = [porter. batang(kata) untuk word in tokens] cetak(stemmed[. 100]) Menjalankan contoh, Anda dapat melihat bahwa kata-kata telah direduksi menjadi akarnya, seperti "masalah" telah menjadi "masalah". Anda juga dapat melihat bahwa penerapan stemming juga telah mengurangi token menjadi huruf kecil, kemungkinan untuk pencarian internal di tabel kata Anda juga dapat melihat bahwa penerapan stemming juga telah mengurangi token menjadi huruf kecil, kemungkinan untuk pencarian internal di tabel kata 1 ['satu', 'pagi', ',', 'ketika', 'gregor', 'samsa', 'terbangun', 'dari', 'galau', 'mimpi', ',', 'dia', ' . ', 'He', 'lay', 'on', 'hai', 'armour-lik', 'back', ',', 'and', 'if', 'he', 'lift', 'hai . ', 'the', 'bed', 'was', 'hampir', 'mampu', 'to', 'cover', 'it', 'and', 'tampaknya', 'ready', 'to', . ', 'hai', 'mani', 'kaki', ',', 'piti', 'tipis', 'dibandingkan', 'dengan', 'itu', 'ukuran', 'dari', 'itu', . ', '``', 'apa', "'s", 'terjadi', 'untuk' Ada rangkaian algoritma stemming dan lemmatisasi yang bagus untuk dipilih di NLTK, jika mereduksi kata ke akarnya adalah sesuatu yang Anda perlukan untuk proyek Anda Pertimbangan Pembersihan Teks TambahanKami baru memulai Karena teks sumber untuk tutorial ini pada awalnya cukup bersih, kami melewatkan banyak masalah pembersihan teks yang mungkin perlu Anda tangani dalam proyek Anda sendiri Berikut adalah daftar singkat pertimbangan tambahan saat membersihkan teks
Daftarnya bisa terus berlanjut Mudah-mudahan, Anda dapat melihat bahwa tidak mungkin mendapatkan teks yang benar-benar bersih, bahwa kami benar-benar melakukan yang terbaik berdasarkan waktu, sumber daya, dan pengetahuan yang kami miliki Gagasan "bersih" benar-benar ditentukan oleh tugas atau perhatian khusus dari proyek Anda Tip pro adalah untuk terus meninjau token Anda setelah setiap transformasi. Saya telah mencoba menunjukkannya dalam tutorial ini dan saya harap Anda mengingatnya Idealnya, Anda menyimpan file baru setelah setiap transformasi sehingga Anda dapat menghabiskan waktu dengan semua data dalam formulir baru. Hal-hal selalu muncul saat Anda meluangkan waktu untuk meninjau data Anda Pernahkah Anda melakukan pembersihan teks sebelumnya? Tips Membersihkan Teks untuk Penyematan KataBaru-baru ini, bidang pemrosesan bahasa alami telah beralih dari model bag-of-word dan pengkodean kata menuju penyisipan kata. Manfaat dari penyematan kata adalah mereka menyandikan setiap kata menjadi vektor padat yang menangkap sesuatu tentang makna relatifnya di dalam teks pelatihan Artinya, variasi kata seperti huruf besar/kecil, ejaan, tanda baca, dan lain-lain akan dipelajari secara otomatis agar mirip di ruang penyematan. Pada gilirannya, ini dapat berarti bahwa jumlah pembersihan yang diperlukan dari teks Anda mungkin lebih sedikit dan mungkin sangat berbeda dengan pembersihan teks klasik Misalnya, mungkin tidak masuk akal lagi untuk membendung kata-kata atau menghapus tanda baca untuk kontraksi Tomas Mikolov adalah salah satu pengembang word2vec, metode penyisipan kata yang populer. Dia menyarankan hanya pembersihan teks yang sangat minim diperlukan saat mempelajari model penyisipan kata Di bawah ini adalah tanggapannya saat ditekan dengan pertanyaan tentang cara terbaik menyiapkan data teks untuk word2vec
|