Lập trình và bổ sung
Stemming là gì?
Stemming là một kỹ thuật được sử dụng để trích xuất dạng cơ sở của các từ bằng cách loại bỏ các phụ tố khỏi chúng. Nó cũng giống như việc chặt các cành cây đến thân của nó. Ví dụ, gốc của các từeating, eats, eaten Là eat.
Các công cụ tìm kiếm sử dụng phần gốc để lập chỉ mục các từ. Đó là lý do tại sao thay vì lưu trữ tất cả các dạng của một từ, một công cụ tìm kiếm chỉ có thể lưu trữ phần gốc. Bằng cách này, việc tạo gốc làm giảm kích thước của chỉ mục và tăng độ chính xác của việc truy xuất.
Các thuật toán tạo gốc khác nhau
Trong NLTK, stemmerI, có stem()phương pháp, giao diện có tất cả các trình gốc mà chúng ta sẽ trình bày tiếp theo. Hãy để chúng tôi hiểu nó với sơ đồ sau
Thuật toán gốc Porter
Đây là một trong những thuật toán gốc phổ biến nhất được thiết kế để loại bỏ và thay thế các hậu tố nổi tiếng của các từ tiếng Anh.
Lớp PorterStemmer
NLTK có PorterStemmervới sự trợ giúp của chúng tôi có thể dễ dàng triển khai các thuật toán Porter Stemmer cho từ chúng tôi muốn gốc. Lớp này biết một số dạng từ thông thường và hậu tố với sự trợ giúp của nó, nó có thể chuyển từ đầu vào thành gốc cuối cùng. Từ gốc thường là một từ ngắn hơn có cùng nghĩa gốc. Hãy để chúng tôi xem một ví dụ -
Đầu tiên, chúng ta cần nhập bộ công cụ ngôn ngữ tự nhiên (nltk).
import nltk
Bây giờ, hãy nhập PorterStemmer lớp để thực hiện thuật toán Porter Stemmer.
from nltk.stem import PorterStemmer
Tiếp theo, tạo một thể hiện của lớp Porter Stemmer như sau:
word_stemmer = PorterStemmer()
Bây giờ, hãy nhập từ bạn muốn xuất phát.
word_stemmer.stem('writing')
Đầu ra
'write'
word_stemmer.stem('eating')
Đầu ra
'eat'
Hoàn thành ví dụ triển khai
import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('writing')
Đầu ra
'write'
Thuật toán tạo gốc Lancaster
Nó được phát triển tại Đại học Lancaster và nó là một thuật toán gốc rất phổ biến khác.
Lớp LancasterStemmer
NLTK có LancasterStemmervới sự trợ giúp của chúng ta có thể dễ dàng triển khai các thuật toán Lancaster Stemmer cho từ chúng ta muốn gốc. Hãy để chúng tôi xem một ví dụ -
Đầu tiên, chúng ta cần nhập bộ công cụ ngôn ngữ tự nhiên (nltk).
import nltk
Bây giờ, hãy nhập LancasterStemmer lớp triển khai thuật toán Lancaster Stemmer
from nltk.stem import LancasterStemmer
Tiếp theo, tạo một phiên bản của LancasterStemmer lớp như sau -
Lanc_stemmer = LancasterStemmer()
Bây giờ, hãy nhập từ bạn muốn xuất phát.
Lanc_stemmer.stem('eats')
Đầu ra
'eat'
Hoàn thành ví dụ triển khai
import nltk
from nltk.stem import LancatserStemmer
Lanc_stemmer = LancasterStemmer()
Lanc_stemmer.stem('eats')
Đầu ra
'eat'
Thuật toán tạo biểu thức chính quy
Với sự trợ giúp của thuật toán tạo gốc này, chúng tôi có thể tạo trình tạo gốc của riêng mình.
Lớp RegexpStemmer
NLTK có RegexpStemmervới sự trợ giúp của chúng tôi có thể dễ dàng triển khai các thuật toán Trình tạo biểu thức chính quy. Về cơ bản, nó nhận một biểu thức chính quy và loại bỏ bất kỳ tiền tố hoặc hậu tố nào phù hợp với biểu thức. Hãy để chúng tôi xem một ví dụ -
Đầu tiên, chúng ta cần nhập bộ công cụ ngôn ngữ tự nhiên (nltk).
import nltk
Bây giờ, hãy nhập RegexpStemmer lớp để triển khai thuật toán Trình tạo biểu thức chính quy.
from nltk.stem import RegexpStemmer
Tiếp theo, tạo một phiên bản của RegexpStemmer lớp và cung cấp hậu tố hoặc tiền tố bạn muốn xóa khỏi từ như sau:
Reg_stemmer = RegexpStemmer(‘ing’)
Bây giờ, hãy nhập từ bạn muốn xuất phát.
Reg_stemmer.stem('eating')
Đầu ra
'eat'
Reg_stemmer.stem('ingeat')
Đầu ra
'eat'
Reg_stemmer.stem('eats')
Đầu ra
'eat'
Hoàn thành ví dụ triển khai
import nltk
from nltk.stem import RegexpStemmer
Reg_stemmer = RegexpStemmer()
Reg_stemmer.stem('ingeat')
Đầu ra
'eat'
Thuật toán tạo quả cầu tuyết
Đó là một thuật toán tạo gốc rất hữu ích khác.
Lớp SnowballStemmer
NLTK có SnowballStemmervới sự trợ giúp của chúng tôi có thể dễ dàng triển khai các thuật toán Snowball Stemmer. Nó hỗ trợ 15 ngôn ngữ không phải tiếng Anh. Để sử dụng lớp hấp này, chúng ta cần tạo một thể hiện với tên của ngôn ngữ mà chúng ta đang sử dụng và sau đó gọi phương thức stem (). Hãy để chúng tôi xem một ví dụ -
Đầu tiên, chúng ta cần nhập bộ công cụ ngôn ngữ tự nhiên (nltk).
import nltk
Bây giờ, hãy nhập SnowballStemmer lớp triển khai thuật toán Snowball Stemmer
from nltk.stem import SnowballStemmer
Hãy cho chúng tôi xem các ngôn ngữ mà nó hỗ trợ -
SnowballStemmer.languages
Đầu ra
(
'arabic',
'danish',
'dutch',
'english',
'finnish',
'french',
'german',
'hungarian',
'italian',
'norwegian',
'porter',
'portuguese',
'romanian',
'russian',
'spanish',
'swedish'
)
Tiếp theo, tạo một thể hiện của lớp SnowballStemmer với ngôn ngữ bạn muốn sử dụng. Ở đây, chúng tôi đang tạo trình tự gốc cho ngôn ngữ 'Pháp'.
French_stemmer = SnowballStemmer(‘french’)
Bây giờ, hãy gọi phương thức gốc () và nhập từ bạn muốn gốc.
French_stemmer.stem (‘Bonjoura’)
Đầu ra
'bonjour'
Hoàn thành ví dụ triển khai
import nltk
from nltk.stem import SnowballStemmer
French_stemmer = SnowballStemmer(‘french’)
French_stemmer.stem (‘Bonjoura’)
Đầu ra
'bonjour'
Lemmatization là gì?
Kỹ thuật Lemmatization giống như kỹ thuật chiết cành. Đầu ra chúng ta sẽ nhận được sau khi bổ đề được gọi là 'bổ đề', là một từ gốc chứ không phải gốc, đầu ra của việc tạo gốc. Sau khi lemmatization, chúng ta sẽ nhận được một từ hợp lệ có nghĩa tương tự.
NLTK cung cấp WordNetLemmatizer lớp là một lớp bao bọc mỏng xung quanh wordnetngữ liệu. Lớp này sử dụngmorphy() chức năng của WordNet CorpusReaderlớp để tìm một bổ đề. Hãy để chúng tôi hiểu nó với một ví dụ -
Thí dụ
Đầu tiên, chúng ta cần nhập bộ công cụ ngôn ngữ tự nhiên (nltk).
import nltk
Bây giờ, hãy nhập WordNetLemmatizer lớp để thực hiện kỹ thuật bổ sung.
from nltk.stem import WordNetLemmatizer
Tiếp theo, tạo một phiên bản của WordNetLemmatizer lớp học.
lemmatizer = WordNetLemmatizer()
Bây giờ, gọi phương thức lemmatize () và nhập từ mà bạn muốn tìm bổ đề.
lemmatizer.lemmatize('eating')
Đầu ra
'eating'
lemmatizer.lemmatize('books')
Đầu ra
'book'
Hoàn thành ví dụ triển khai
import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize('books')
Đầu ra
'book'
Sự khác biệt giữa Stemming & Lemmatization
Hãy để chúng tôi hiểu sự khác biệt giữa Lập trình và bổ sung hóa với sự trợ giúp của ví dụ sau:
import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('believes')
Đầu ra
believ
import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize(' believes ')
Đầu ra
believ
Đầu ra của cả hai chương trình cho biết sự khác biệt chính giữa tạo gốc và lemmatization. PorterStemmerlớp cắt bỏ 'es' khỏi từ. Mặt khác,WordNetLemmatizerlớp tìm một từ hợp lệ. Nói một cách dễ hiểu, kỹ thuật tạo gốc chỉ xem xét hình thức của từ trong khi kỹ thuật bổ ngữ nhìn vào nghĩa của từ. Nó có nghĩa là sau khi áp dụng lemmatization, chúng ta sẽ luôn nhận được một từ hợp lệ.