Stemming & Lemmatization
Stemming คืออะไร?
Stemming เป็นเทคนิคที่ใช้ในการแยกรูปแบบฐานของคำโดยการลบคำติดออกจากคำเหล่านั้น มันก็เหมือนกับการตัดกิ่งก้านของต้นไม้ไปที่ลำต้นของมัน ตัวอย่างเช่นก้านของคำeating, eats, eaten คือ eat.
เครื่องมือค้นหาใช้ Stemming สำหรับการสร้างดัชนีคำ นั่นเป็นเหตุผลที่แทนที่จะจัดเก็บคำทุกรูปแบบเครื่องมือค้นหาสามารถจัดเก็บเฉพาะลำต้นได้ ด้วยวิธีนี้ Stemming จะลดขนาดของดัชนีและเพิ่มความแม่นยำในการดึงข้อมูล
อัลกอริธึม Stemming ต่างๆ
ใน NLTK stemmerI, ที่มี stem()วิธีการอินเทอร์เฟซมีต้นกำเนิดทั้งหมดที่เราจะกล่าวถึงต่อไป ให้เราเข้าใจด้วยแผนภาพต่อไปนี้
ขั้นตอนวิธีการสกัดกั้น Porter
เป็นหนึ่งในอัลกอริธึมการแยกคำที่ใช้กันทั่วไปซึ่งได้รับการออกแบบมาเพื่อลบและแทนที่คำต่อท้ายของคำภาษาอังกฤษที่รู้จักกันดี
ชั้น PorterStemmer
NLTK มี PorterStemmerคลาสด้วยความช่วยเหลือซึ่งเราสามารถใช้อัลกอริธึม Porter Stemmer สำหรับคำที่เราต้องการเรียกได้อย่างง่ายดาย คลาสนี้รู้จักรูปแบบคำปกติและคำต่อท้ายหลายแบบด้วยความช่วยเหลือซึ่งสามารถเปลี่ยนคำที่ป้อนให้เป็นคำสุดท้ายได้ ลำต้นที่เกิดมักเป็นคำสั้น ๆ ที่มีความหมายรากเดียวกัน ให้เราดูตัวอย่าง -
ขั้นแรกเราต้องนำเข้าชุดเครื่องมือภาษาธรรมชาติ (nltk)
import nltk
ตอนนี้นำเข้าไฟล์ PorterStemmer คลาสเพื่อใช้อัลกอริทึม Porter Stemmer
from nltk.stem import PorterStemmer
จากนั้นสร้างอินสแตนซ์ของคลาส Porter Stemmer ดังนี้ -
word_stemmer = PorterStemmer()
ตอนนี้ป้อนคำที่คุณต้องการกำเนิด
word_stemmer.stem('writing')
เอาต์พุต
'write'
word_stemmer.stem('eating')
เอาต์พุต
'eat'
ตัวอย่างการใช้งานที่สมบูรณ์
import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('writing')
เอาต์พุต
'write'
อัลกอริธึมการสกัดกั้นของ Lancaster
ได้รับการพัฒนาที่มหาวิทยาลัย Lancaster และเป็นอีกหนึ่งอัลกอริธึมการหยุดชะงักที่พบบ่อยมาก
ระดับ LancasterStemmer
NLTK มี LancasterStemmerคลาสด้วยความช่วยเหลือซึ่งเราสามารถใช้อัลกอริทึม Lancaster Stemmer สำหรับคำที่เราต้องการเรียกได้อย่างง่ายดาย ให้เราดูตัวอย่าง -
ขั้นแรกเราต้องนำเข้าชุดเครื่องมือภาษาธรรมชาติ (nltk)
import nltk
ตอนนี้นำเข้าไฟล์ LancasterStemmer คลาสเพื่อใช้อัลกอริทึม Lancaster Stemmer
from nltk.stem import LancasterStemmer
จากนั้นสร้างอินสแตนซ์ของ LancasterStemmer ชั้นเรียนดังนี้ -
Lanc_stemmer = LancasterStemmer()
ตอนนี้ป้อนคำที่คุณต้องการกำเนิด
Lanc_stemmer.stem('eats')
เอาต์พุต
'eat'
ตัวอย่างการใช้งานที่สมบูรณ์
import nltk
from nltk.stem import LancatserStemmer
Lanc_stemmer = LancasterStemmer()
Lanc_stemmer.stem('eats')
เอาต์พุต
'eat'
อัลกอริธึมการหยุดนิพจน์ทั่วไป
ด้วยความช่วยเหลือของอัลกอริทึมการแยกนี้เราสามารถสร้างสเต็มเมอร์ของเราเองได้
คลาส RegexpStemmer
NLTK มี RegexpStemmerคลาสด้วยความช่วยเหลือซึ่งเราสามารถใช้อัลกอริทึม Regular Expression Stemmer ได้อย่างง่ายดาย โดยทั่วไปจะใช้นิพจน์ทั่วไปเดียวและลบคำนำหน้าหรือคำต่อท้ายที่ตรงกับนิพจน์ ให้เราดูตัวอย่าง -
ขั้นแรกเราต้องนำเข้าชุดเครื่องมือภาษาธรรมชาติ (nltk)
import nltk
ตอนนี้นำเข้าไฟล์ RegexpStemmer คลาสเพื่อใช้อัลกอริทึม Regular Expression Stemmer
from nltk.stem import RegexpStemmer
จากนั้นสร้างอินสแตนซ์ของ RegexpStemmer คลาสและระบุคำต่อท้ายหรือคำนำหน้าที่คุณต้องการลบออกจากคำดังนี้ -
Reg_stemmer = RegexpStemmer(‘ing’)
ตอนนี้ป้อนคำที่คุณต้องการกำเนิด
Reg_stemmer.stem('eating')
เอาต์พุต
'eat'
Reg_stemmer.stem('ingeat')
เอาต์พุต
'eat'
Reg_stemmer.stem('eats')
เอาต์พุต
'eat'
ตัวอย่างการใช้งานที่สมบูรณ์
import nltk
from nltk.stem import RegexpStemmer
Reg_stemmer = RegexpStemmer()
Reg_stemmer.stem('ingeat')
เอาต์พุต
'eat'
อัลกอริธึมการกำเนิดสโนว์บอล
มันเป็นอีกหนึ่งอัลกอริธึมที่มีประโยชน์มาก
สโนว์บอลคลาส Stemmer
NLTK มี SnowballStemmerคลาสด้วยความช่วยเหลือซึ่งเราสามารถใช้อัลกอริทึม Snowball Stemmer ได้อย่างง่ายดาย รองรับ 15 ภาษาที่ไม่ใช่ภาษาอังกฤษ ในการใช้คลาสนึ่งนี้เราจำเป็นต้องสร้างอินสแตนซ์ที่มีชื่อภาษาที่เราใช้แล้วเรียกเมธอด stem () ให้เราดูตัวอย่าง -
ขั้นแรกเราต้องนำเข้าชุดเครื่องมือภาษาธรรมชาติ (nltk)
import nltk
ตอนนี้นำเข้าไฟล์ SnowballStemmer คลาสเพื่อใช้อัลกอริทึม Snowball Stemmer
from nltk.stem import SnowballStemmer
ให้เราดูภาษาที่รองรับ -
SnowballStemmer.languages
เอาต์พุต
(
'arabic',
'danish',
'dutch',
'english',
'finnish',
'french',
'german',
'hungarian',
'italian',
'norwegian',
'porter',
'portuguese',
'romanian',
'russian',
'spanish',
'swedish'
)
จากนั้นสร้างอินสแตนซ์ของคลาส SnowballStemmer ด้วยภาษาที่คุณต้องการใช้ ที่นี่เรากำลังสร้างตัวตั้งต้นสำหรับภาษา "ฝรั่งเศส"
French_stemmer = SnowballStemmer(‘french’)
ตอนนี้เรียกใช้วิธี stem () และป้อนคำที่คุณต้องการตั้งต้น
French_stemmer.stem (‘Bonjoura’)
เอาต์พุต
'bonjour'
ตัวอย่างการใช้งานที่สมบูรณ์
import nltk
from nltk.stem import SnowballStemmer
French_stemmer = SnowballStemmer(‘french’)
French_stemmer.stem (‘Bonjoura’)
เอาต์พุต
'bonjour'
Lemmatization คืออะไร?
เทคนิค Lemmatization ก็เหมือนกับการ Stemming ผลลัพธ์ที่เราจะได้รับหลังจากการทำให้เป็นตัวอักษรเรียกว่า 'เลมมา' ซึ่งเป็นคำรากมากกว่ารากซึ่งเป็นผลลัพธ์ของการสร้างคำ หลังจากสร้างคำศัพท์แล้วเราจะได้คำที่ถูกต้องซึ่งหมายถึงสิ่งเดียวกัน
NLTK ให้ WordNetLemmatizer คลาสซึ่งเป็นกระดาษห่อบาง ๆ รอบ ๆ wordnetคลังข้อมูล คลาสนี้ใช้morphy() ฟังก์ชันไปที่ WordNet CorpusReaderชั้นเรียนเพื่อค้นหาคำหลัก ให้เราเข้าใจด้วยตัวอย่าง -
ตัวอย่าง
ขั้นแรกเราต้องนำเข้าชุดเครื่องมือภาษาธรรมชาติ (nltk)
import nltk
ตอนนี้นำเข้าไฟล์ WordNetLemmatizer คลาสเพื่อใช้เทคนิคการทำให้เป็นตัวอักษร
from nltk.stem import WordNetLemmatizer
จากนั้นสร้างอินสแตนซ์ของ WordNetLemmatizer ชั้นเรียน
lemmatizer = WordNetLemmatizer()
ตอนนี้เรียกเมธอด lemmatize () และป้อนคำที่คุณต้องการค้นหา lemma
lemmatizer.lemmatize('eating')
เอาต์พุต
'eating'
lemmatizer.lemmatize('books')
เอาต์พุต
'book'
ตัวอย่างการใช้งานที่สมบูรณ์
import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize('books')
เอาต์พุต
'book'
ความแตกต่างระหว่าง Stemming & Lemmatization
ให้เราเข้าใจความแตกต่างระหว่าง Stemming และ Lemmatization ด้วยความช่วยเหลือของตัวอย่างต่อไปนี้ -
import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('believes')
เอาต์พุต
believ
import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize(' believes ')
เอาต์พุต
believ
ผลลัพธ์ของทั้งสองโปรแกรมจะบอกถึงความแตกต่างที่สำคัญระหว่างการสะกดคำและการทำให้เป็นตัวอักษร PorterStemmerคลาสตัด 'es' ออกจากคำ ในทางกลับกัน,WordNetLemmatizerชั้นเรียนพบคำที่ถูกต้อง ในคำง่ายๆเทคนิคการสร้างคำจะดูที่รูปแบบของคำเท่านั้นในขณะที่เทคนิคการสร้างคำอธิบายจะดูที่ความหมายของคำ หมายความว่าหลังจากใช้คำนามเราจะได้คำที่ถูกต้องเสมอ