Python

Cara Mengekstrak Kalimat dari Teks Menggunakan Modul Python NLTK

Cara Mengekstrak Kalimat dari Teks Menggunakan Modul Python NLTK
The Natural Language Toolkit (NLTK) adalah modul pemprosesan bahasa dan teks untuk Python. NLTK dapat menganalisis, memproses, dan memberi token pada teks yang tersedia dalam pelbagai bahasa menggunakan perpustakaan korporat terbina dalam dan kumpulan data leksikal. Python adalah salah satu bahasa pengaturcaraan paling popular yang digunakan dalam sains data dan pemprosesan bahasa, terutamanya kerana fleksibiliti bahasa dan ketersediaan modul berguna seperti NLTK. Artikel ini akan menerangkan cara mengekstrak ayat dari perenggan teks menggunakan NLTK. Kod dalam panduan ini telah diuji dengan Python 3.8.2 dan NLTK 3.4.5 di Ubuntu 20.04 LTS.

Memasang NLTK di Linux

Untuk memasang NLTK di Ubuntu, jalankan arahan di bawah:

$ sudo apt pasang python3-nltk

Pakej NLTK terdapat di semua distribusi Linux utama. Cari kata kunci "NLTK" di pengurus pakej untuk memasang pakej. Sekiranya atas sebab tertentu, NLTK tidak tersedia di repositori pengedaran anda, anda boleh memasangnya dari pengurus paket pip dengan menjalankan perintah di bawah:

$ pip install --user -U nltk

Perhatikan bahawa anda perlu memasang pip dari pengurus pakej anda agar arahan di atas berfungsi. Pada sebilangan pengedaran, ia mungkin disebut pip3. Anda juga boleh mengikuti arahan pemasangan terperinci yang terdapat di laman web rasmi dari NLTK.

Mengekstrak Ayat dari Perenggan Menggunakan NLTK

Untuk perenggan tanpa tanda baca dan jarak yang rumit, anda boleh menggunakan tokenizer ayat NLTK bawaan, yang disebut "Punkt tokenizer," yang disertakan dengan model pra-terlatih. Anda juga boleh menggunakan model data terlatih anda sendiri untuk mengubah teks menjadi ayat. Model data yang dilatih khusus berada di luar ruang lingkup artikel ini, jadi kod di bawah ini akan menggunakan tokenizer Punkt English bawaan. Untuk memuat turun fail sumber Punkt, jalankan tiga perintah berikut berturut-turut, dan tunggu muat turun selesai:

$ ular sawa3
$ import nltk
$ nltk.muat turun ('punkt')

Perenggan dari "Alice's Adventures in Wonderland" akan digunakan dalam contoh kod di bawah:

import nltk
para = "Sama ada sumur itu sangat dalam, atau dia jatuh dengan sangat perlahan, kerana ia ada
banyak masa ketika dia pergi untuk melihatnya dan bertanya-tanya apa yang berlaku
berlaku seterusnya. Pertama, dia cuba melihat ke bawah dan mengetahui apa yang dia datangi,
tetapi terlalu gelap untuk melihat apa-apa; kemudian dia melihat sisi perigi, dan
melihat bahawa mereka dipenuhi dengan almari dan rak buku; sana sini dia
melihat peta dan gambar yang digantung di pasak. Dia mengeluarkan balang dari salah satu rak
semasa dia berlalu; ia dilabel 'ORANGE MARMALADE', tetapi sangat mengecewakannya
kosong: dia tidak suka menjatuhkan balang kerana takut membunuh seseorang, sehingga berjaya
untuk memasukkannya ke dalam salah satu almari ketika dia melewatinya."
token = nltk.sent_tokenize (para)
untuk token t:
cetak (t, "\ n")

Menjalankan kod di atas akan memberi anda output berikut:

Sama ada sumur itu sangat dalam, atau dia jatuh dengan sangat perlahan, kerana dia mempunyai banyak waktu
dia turun untuk melihatnya dan bertanya-tanya apa yang akan berlaku seterusnya.
Pertama, dia cuba melihat ke bawah dan melihat apa yang dia datangi, tetapi terlalu gelap
untuk melihat apa sahaja; kemudian dia melihat sisi perigi, dan melihat bahawa mereka berada
dipenuhi dengan almari dan rak buku; di sana sini dia melihat peta dan gambar digantung
pada pasak.
Dia mengeluarkan balang dari salah satu rak semasa dia berlalu; ia dilabel 'ORANGEMARMALADE',
tetapi kerana kekecewaannya itu kosong: dia tidak suka menjatuhkan balang kerana takut
membunuh seseorang, sehingga berjaya memasukkannya ke dalam salah satu almari ketika dia melewatinya.

Token ayat Punkt terbina dalam berfungsi dengan baik jika anda ingin menandakan perenggan mudah. Setelah mengimport modul NLTK, yang perlu anda lakukan adalah menggunakan kaedah "sent_tokenize ()" pada korpus teks besar. Namun, tokenizer ayat Punkt mungkin tidak dapat mengesan ayat dengan betul apabila terdapat perenggan kompleks yang mengandungi banyak tanda baca, tanda seru, singkatan, atau simbol berulang. Tidak mustahil untuk menentukan cara standard untuk mengatasi masalah ini. Anda harus menulis kod tersuai untuk mengatasi masalah ini menggunakan regex, manipulasi rentetan, atau dengan melatih model data anda sendiri dan bukannya menggunakan model data Punkt bawaan.

Anda juga boleh mencuba mengubah model Punkt yang ada untuk memperbaiki tokenisasi yang salah dengan menggunakan beberapa parameter tambahan. Untuk melakukannya, ikuti dokumentasi tokenisasi rasmi Punkt yang tersedia di sini. Untuk menggunakan penyesuaian khas anda sendiri, sedikit perubahan pada kod diperlukan:

dari nltk.tokenkan.punkt import PunktSentenceTokenizer, PunktParameters
para = "Sama ada sumur itu sangat dalam, atau dia jatuh dengan sangat perlahan, kerana dia mempunyai banyak
masa ketika dia turun untuk melihatnya dan bertanya-tanya apa yang akan berlaku
seterusnya. Pertama, dia cuba melihat ke bawah dan mengetahui apa yang dia datangi, tetapi memang begitu
terlalu gelap untuk melihat apa-apa; kemudian dia melihat sisi perigi, dan memerhatikan
bahawa mereka dipenuhi dengan almari dan rak buku; sana sini dia melihat peta
dan gambar digantung di pasak. Dia mengeluarkan balang dari salah satu rak sambil dia
lulus; ia dilabel 'ORANGE MARMALADE', tetapi sangat mengecewakannya
kosong: dia tidak suka menjatuhkan balang kerana takut membunuh seseorang, sehingga berjaya
masukkan ke dalam salah satu almari ketika dia melewatinya."
punkt_params = PunktParameter ()
punkt_params.abbrev_types = set (['Mr', 'Mrs', 'LLC'])
tokenizer = PunktSentenceTokenizer (punkt_params)
token = tokenizer.tokenize (para)
untuk token t:
cetak (t, "\ n")

Kod di atas melakukan pekerjaan yang sama dengan kaedah "sent_tokenize ()". Namun, anda kini dapat menentukan peraturan anda sendiri menggunakan kaedah bawaan dan memberikannya sebagai argumen, seperti yang dijelaskan dalam dokumentasi. Sebagai contoh, beberapa singkatan telah ditambahkan pada kod di atas. Sekiranya singkatan ini diikuti dengan tanda baca, mereka tidak akan dipecah menjadi ayat baru. Tingkah laku yang normal adalah menggunakan titik atau noktah sebagai petunjuk akhir ayat.

Kesimpulannya

NLTK dan kaedah tokenasinya cukup cekap dalam membuat tokenisasi dan memproses data teks. Walau bagaimanapun, model yang dilatih sebelumnya mungkin tidak berfungsi 100% dengan pelbagai jenis teks. Anda mungkin perlu memperbaiki model yang ada, melatih dan menyediakan model anda sendiri, atau menulis kod anda sendiri untuk memperbaiki anomali.

Battle For Wesnoth 1.13.6 Pembangunan Dikeluarkan
Battle For Wesnoth 1.13.6 dilancarkan bulan lalu, adalah rilis pengembangan keenam di 1.13.siri x dan memberikan sejumlah penambahbaikan, terutamanya ...
Cara Memasang League Of Legends di Ubuntu 14.04
Sekiranya anda peminat League of Legends, maka ini adalah peluang bagi anda untuk menguji menjalankan League of Legends. Perhatikan bahawa LOL disokon...
Pasang permainan Strategi OpenRA terkini di Ubuntu Linux
OpenRA adalah mesin permainan Strategi Masa Nyata / Bebas yang mencipta semula permainan Westwood awal seperti Command & Conquer klasik: Makluman Mera...