Stemming dan Lemmatization dengan Python NLTK

Isi kandungan:

Anonim

Apa itu Stemming?

Stemming adalah sejenis normalisasi untuk perkataan. Normalisasi adalah teknik di mana sekumpulan kata dalam ayat diubah menjadi urutan untuk memendekkan pencariannya. Kata-kata yang mempunyai makna yang sama tetapi mempunyai beberapa variasi mengikut konteks atau ayat dinormalisasi.

Dengan kata lain, ada satu kata akar, tetapi ada banyak variasi kata yang sama. Contohnya, kata akarnya adalah "makan" dan variasinya adalah "makan, makan, dimakan dan seumpamanya". Dengan cara yang sama, dengan bantuan Stemming, kita dapat mencari akar kata dari sebarang variasi.

Sebagai contoh

He was riding.He was taking the ride.

Dalam dua ayat di atas, maknanya sama, iaitu aktiviti menunggang pada masa lalu. Manusia dengan mudah dapat memahami bahawa kedua-dua makna itu sama. Tetapi untuk mesin, kedua-dua ayat itu berbeza. Oleh itu, sukar untuk mengubahnya menjadi baris data yang sama. Sekiranya kami tidak menyediakan set data yang sama, maka mesin gagal membuat ramalan. Oleh itu, adalah perlu untuk membezakan makna setiap perkataan untuk menyediakan set data untuk pembelajaran mesin. Dan di sini stemming digunakan untuk mengkategorikan jenis data yang sama dengan mendapatkan kata dasarnya.

Mari kita laksanakan ini dengan program Python.NLTK mempunyai algoritma yang dinamakan sebagai "PorterStemmer". Algoritma ini menerima senarai kata token dan membaginya menjadi kata akar.

Program untuk memahami Stemming

from nltk.stem import PorterStemmere_words= ["wait", "waiting", "waited", "waits"]ps =PorterStemmer()for w in e_words:rootWord=ps.stem(w)print(rootWord)

Keluaran :

waitwaitwaitwait

Penjelasan Kod:

  • Terdapat modul modul di NLTk yang diimport. Sekiranya anda mengimport modul lengkap, maka program menjadi berat kerana mengandungi ribuan baris kod. Oleh itu, dari keseluruhan modul induk, kami hanya mengimport "PorterStemmer."
  • Kami menyediakan senarai data variasi palsu dengan kata yang sama.
  • Objek dibuat yang tergolong dalam kelas nltk.stem.porter.PorterStemmer.
  • Selanjutnya, kami menyebarkannya ke PorterStemmer satu persatu menggunakan gelung "untuk". Akhirnya, kami mendapat kata akar keluaran setiap perkataan yang disebut dalam senarai.

Dari penjelasan di atas, dapat juga disimpulkan bahawa penangkapan dianggap sebagai langkah pemrosesan penting kerana ia menghilangkan kelebihan data dan variasi dalam kata yang sama. Hasilnya, data disaring yang akan membantu dalam latihan mesin yang lebih baik.

Sekarang kita mengeluarkan ayat yang lengkap dan memeriksa kelakuannya sebagai output.

Program:

from nltk.stem import PorterStemmerfrom nltk.tokenize import sent_tokenize, word_tokenizesentence="Hello Guru99, You have to build a very good site and I love visiting your site."words = word_tokenize(sentence)ps = PorterStemmer()for w in words:rootWord=ps.stem(w)print(rootWord)

Pengeluaran:

helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite

Penjelasan Kod

  • Package PorterStemer diimport dari batang modul
  • Pakej untuk tokenisasi ayat dan juga perkataan diimport
  • Satu ayat ditulis yang akan diberi tanda pada langkah seterusnya.
  • Token kata dilaksanakan dalam langkah ini.
  • Objek untuk PorterStemmer dibuat di sini.
  • Gelung dijalankan dan penangkapan setiap perkataan dilakukan menggunakan objek yang dibuat pada baris kod 5

Kesimpulan:

Stemming adalah modul pemprosesan data. Bahasa Inggeris mempunyai banyak variasi dari satu perkataan. Variasi ini menimbulkan kekaburan dalam latihan dan ramalan pembelajaran mesin. Untuk membuat model yang berjaya, sangat penting untuk menyaring kata-kata tersebut dan menukar ke jenis data yang diuraikan dengan menggunakan batang. Juga, ini adalah teknik penting untuk mendapatkan data baris dari satu set ayat dan penghapusan data berlebihan yang juga dikenali sebagai normalisasi.

Apa itu Lemmatization?

Lemmatization adalah proses algoritma mencari lemma sesuatu perkataan bergantung pada maknanya. Lemmatization biasanya merujuk kepada analisis morfologi kata-kata, yang bertujuan untuk menghilangkan akhiran infleksi. Ini membantu dalam mengembalikan bentuk dasar atau kamus kata, yang dikenali sebagai lemma. Kaedah NLTK Lemmatization didasarkan pada fungsi morph bawaan WorldNet. Praprosesan teks merangkumi kedua-duanya dan juga lemmatisasi. Ramai orang menganggap kedua-dua istilah itu mengelirukan. Ada yang menganggap ini sama, tetapi ada perbezaan antara keduanya. Lemmatization lebih disukai daripada yang sebelumnya kerana alasan di bawah.

Mengapa Lemmatization lebih baik daripada Stemming?

Stemming algoritma berfungsi dengan memotong akhiran dari perkataan. Dalam erti kata yang lebih luas, memotong awal atau akhir perkataan.

Sebaliknya, Lemmatization adalah operasi yang lebih kuat, dan mengambil kira analisis morfologi kata-kata. Ia mengembalikan lemma yang merupakan bentuk asas dari semua bentuk infleksi. Pengetahuan linguistik mendalam diperlukan untuk membuat kamus dan mencari bentuk perkataan yang tepat. Stemming adalah operasi umum sementara lemmatization adalah operasi cerdas di mana bentuk yang tepat akan dilihat dalam kamus. Oleh itu, lemmatisasi membantu membentuk ciri pembelajaran mesin yang lebih baik.

Kod untuk membezakan antara Lemmatization dan Stemming

Stemming code

import nltkfrom nltk.stem.porter import PorterStemmerporter_stemmer = PorterStemmer()text = "studies studying cries cry"tokenization = nltk.word_tokenize(text)for w in tokenization:print("Stemming for {} is {}".format(w,porter_stemmer.stem(w)))

Pengeluaran:

Stemming for studies is studiStemming for studying is studiStemming for cries is criStemming for cry is cri

Kod lematisasi

import nltkfrom nltk.stem import WordNetLemmatizerwordnet_lemmatizer = WordNetLemmatizer()text = "studies studying cries cry"tokenization = nltk.word_tokenize(text)for w in tokenization:print("Lemma for {} is {}".format(w, wordnet_lemmatizer.lemmatize(w)))

Pengeluaran:

Lemma for studies is studyLemma for studying is studyingLemma for cries is cryLemma for cry is cry

Perbincangan output:

Sekiranya anda kelihatan bersungguh-sungguh untuk belajar dan belajar, hasilnya sama (studi) tetapi lemmatizer memberikan lemma yang berbeza untuk kedua-dua token belajar untuk belajar dan belajar untuk belajar. Oleh itu, apabila kita perlu membuat set ciri untuk melatih mesin, lebih baik jika lemmatisasi lebih disukai.

Gunakan Case Lemmatizer:

Lemmatizer meminimumkan kekaburan teks. Contoh perkataan seperti basikal atau basikal ditukar menjadi basikal kata dasar. Pada asasnya, ia akan menukar semua perkataan yang mempunyai makna yang sama tetapi perwakilan yang berbeza menjadi bentuk dasarnya. Ini mengurangkan kepadatan kata dalam teks yang diberikan dan membantu dalam menyediakan ciri yang tepat untuk mesin latihan. Lebih bersih data, model pembelajaran mesin anda akan menjadi lebih pintar dan tepat. Lemmatizer juga akan menjimatkan memori dan juga kos pengiraan.

Contoh Masa Nyata yang menunjukkan penggunaan Wordnet Lemmatization dan POS Tagging di Python

from nltk.corpus import wordnet as wnfrom nltk.stem.wordnet import WordNetLemmatizerfrom nltk import word_tokenize, pos_tagfrom collections import defaultdicttag_map = defaultdict(lambda : wn.NOUN)tag_map['J'] = wn.ADJtag_map['V'] = wn.VERBtag_map['R'] = wn.ADVtext = "guru99 is a totally new kind of learning experience."tokens = word_tokenize(text)lemma_function = WordNetLemmatizer()for token, tag in pos_tag(tokens):lemma = lemma_function.lemmatize(token, tag_map[tag[0]])print(token, "=>", lemma)

Penjelasan Kod

  • Pertama, wordp reader corpus diimport.
  • WordNetLemmatizer diimport dari wordnet
  • Token kata serta bahagian tag ucapan diimport dari nltk
  • Kamus Lalai diimport dari koleksi
  • Kamus dibuat di mana pos_tag (huruf pertama) adalah nilai utama yang nilainya dipetakan dengan nilai dari kamus wordnet. Kami telah mengambil satu-satunya huruf pertama kerana kami akan menggunakannya kemudian dalam jangka masa.
  • Teks ditulis dan diberi tanda.
  • Objek lemma_fungsi dibuat yang akan digunakan di dalam gelung
  • Loop dijalankan dan lemmatize akan mengambil dua argumen satu adalah token dan yang lain adalah pemetaan pos_tag dengan nilai wordnet.

Pengeluaran:

guru99 => guru99is => betotally => totallynew => newkind => kindof => oflearning => learnexperience => experience. => .

Lemmatization mempunyai kaitan rapat dengan kamus wordnet, jadi sangat penting untuk mempelajari topik ini, jadi kami menyimpannya sebagai topik seterusnya