Bắt nguồn và bổ ngữ trong Python NLTK với các ví dụ
⚡ Tóm tắt thông minh
Stemming và Lemmatization là các kỹ thuật chuẩn hóa văn bản trong Python NLTK (Non-Low-Left Language Techniques) giảm thiểu các biến thể từ ngữ về một gốc từ chung, trong đó quá trình rút gọn từ (stemm) loại bỏ hậu tố nhanh chóng mà không cần ngữ cảnh, còn quá trình chuẩn hóa từ (lemmatization) trả về một từ đúng nghĩa trong từ điển.
Bắt nguồn và bổ ngữ trong Python NLTK?
Lập trình và bổ sung in Python NLTK là các kỹ thuật chuẩn hóa văn bản dành cho Xử lý Ngôn ngữ Tự nhiên. Các kỹ thuật này được sử dụng rộng rãi trong tiền xử lý văn bản. Sự khác biệt giữa stemming và lemmatization là stemming nhanh hơn vì nó cắt các từ mà không cần biết ngữ cảnh, trong khi lemmatization chậm hơn vì nó biết ngữ cảnh của từ trước khi xử lý.
Xuất phát là gì?
Xuất phát là một phương pháp chuẩn hóa từ trong Xử lý ngôn ngữ tự nhiênĐây là một kỹ thuật trong đó một tập hợp các từ trong câu được chuyển đổi thành một chuỗi để rút ngắn quá trình tra cứu. Trong phương pháp này, các từ có cùng nghĩa nhưng có một số biến thể tùy thuộc vào ngữ cảnh hoặc câu được chuẩn hóa. Nói cách khác, có một từ gốc, nhưng có nhiều biến thể của cùng một từ. Ví dụ, từ gốc là “eat” và các biến thể của nó là “eats”, “eating”, “eated”, v.v. Tương tự như vậy, với sự trợ giúp của Stemming trong... PythonChúng ta có thể tìm ra từ gốc của bất kỳ biến thể nào.
Ví dụ:
He was riding. He was taking the ride.
Trong hai câu trên, nghĩa của chúng đều giống nhau, tức là một hoạt động cưỡi ngựa trong quá khứ. Con người có thể dễ dàng hiểu rằng cả hai nghĩa đều giống nhau. Nhưng đối với máy móc, cả hai câu đều khác nhau. Do đó, việc chuyển đổi chúng thành cùng một hàng dữ liệu trở nên khó khăn. Nếu chúng ta không cung cấp cùng một tập dữ liệu, thì máy sẽ không thể dự đoán được. Vì vậy, cần phải phân biệt nghĩa của từng từ để chuẩn bị tập dữ liệu cho máy học. Ở đây, phương pháp rút gọn từ (stemming) được sử dụng để phân loại các dữ liệu cùng loại bằng cách lấy từ gốc của chúng.
Chúng ta hãy thực hiện điều này bằng một Python chương trình. NLTK có một thuật toán tên là PorterStemmerThuật toán này chấp nhận danh sách các từ đã được phân tách thành các từ nhỏ (tokenized words) và rút gọn chúng thành các từ gốc (root words).
Chương trình tìm hiểu về gốc cây
from nltk.stem import PorterStemmer e_words= ["wait", "waiting", "waited", "waits"] ps =PorterStemmer() for w in e_words: rootWord=ps.stem(w) print(rootWord)
Đầu ra:
wait wait wait wait
Code Giải thích:
- Trong NLTK có một mô-đun xử lý gốc từ cần được nhập khẩu. Nếu nhập khẩu toàn bộ mô-đun, chương trình sẽ trở nên nặng nề vì nó chứa hàng nghìn dòng mã. Vì vậy, từ toàn bộ mô-đun xử lý gốc từ, chúng ta chỉ nhập khẩu "PorterStemmer".
- Chúng tôi đã chuẩn bị một danh sách giả về dữ liệu biến thể của cùng một từ.
- Một đối tượng được tạo ra thuộc về lớp nltk.stem.porter.PorterStemmer.
- Chúng tôi đã chuyển từng từ một vào PorterStemmer bằng vòng lặp “for”. Cuối cùng, chúng tôi nhận được từ gốc của mỗi từ được đề cập trong danh sách.
Như đã trình bày ở trên, việc rút gọn từ (stemming) là một bước tiền xử lý quan trọng vì nó loại bỏ sự dư thừa và các biến thể trong cùng một từ. Kết quả là dữ liệu được lọc, giúp ích cho việc huấn luyện máy tốt hơn. Bây giờ chúng ta sẽ đưa vào một câu hoàn chỉnh và kiểm tra kết quả đầu ra.
from nltk.stem import PorterStemmer from nltk.tokenize import sent_tokenize, word_tokenize sentence="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)
Đầu ra:
hello
guru99
,
you
have
build
a
veri
good
site
and
I
love
visit
your
site
Code Giải thích:
- Gói PorterStemmer được nhập từ mô-đun stem.
- Các gói dùng để phân tách câu và từ được nhập khẩu.
- Một câu được viết sẽ được mã hóa trong bước tiếp theo.
- Một đối tượng cho PorterStemmer được tạo ở đây.
- Một vòng lặp được chạy và quá trình rút gọn từ (stemming) của mỗi từ được thực hiện bằng cách sử dụng đối tượng được tạo ở dòng mã số 5.
Tóm lại, stemming là một mô-đun tiền xử lý dữ liệu. Tiếng Anh có nhiều biến thể của cùng một từ, tạo ra sự mơ hồ trong quá trình huấn luyện và dự đoán của máy học. Để xây dựng một mô hình thành công, việc lọc các từ như vậy vào cùng một chuỗi dữ liệu bằng cách sử dụng stemming là rất quan trọng. Điều này cũng được gọi là chuẩn hóa.
Lemmatization là gì?
Bổ sung Trong NLTK, quá trình tìm kiếm từ gốc (lemma) dựa trên nghĩa và ngữ cảnh của từ được gọi là lemma. Lemmatization thường đề cập đến phân tích hình thái học của từ, nhằm mục đích loại bỏ các hậu tố biến tố. Nó giúp trả về dạng gốc hoặc dạng từ điển của một từ, được gọi là lemma. Phương pháp Lemmatization của NLTK dựa trên hàm morph tích hợp sẵn của WordNet. Xử lý trước văn bản bao gồm cả stemming và lemmatization. Nhiều người thấy hai thuật ngữ này dễ gây nhầm lẫn. Một số người coi chúng là giống nhau, nhưng thực tế có sự khác biệt giữa stemming và lemmatization. Lemmatization được ưu tiên hơn so với stemming vì lý do dưới đây.
Tại sao Lemmatization tốt hơn Stemming?
Thuật toán rút gọn từ (stemming) hoạt động bằng cách cắt bỏ hậu tố khỏi từ. Nói rộng hơn, nó cắt bỏ phần đầu hoặc phần cuối của từ. Ngược lại, phép chuẩn hóa từ (lemmatization) là một thao tác mạnh mẽ hơn, nó xem xét đến phân tích hình thái học của từ. Nó trả về dạng gốc (lemma), là dạng cơ bản của tất cả các dạng biến thể của từ. Kiến thức ngôn ngữ học chuyên sâu là cần thiết để tạo ra từ điển và tìm kiếm dạng đúng của từ. Rút gọn từ là một thao tác tổng quát, trong khi chuẩn hóa từ là một thao tác thông minh, trong đó dạng đúng được tra cứu trong từ điển. Do đó, chuẩn hóa từ giúp hình thành từ điển tốt hơn. học máy tính năng.
Code để phân biệt giữa Lemmatization và Stemming
Xuất phát Code:
import nltk from nltk.stem.porter import PorterStemmer porter_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)))
Đầu ra:
Stemming for studies is studi Stemming for studying is studi Stemming for cries is cri Stemming for cry is cri
Bổ sung Code:
import nltk from nltk.stem import WordNetLemmatizer wordnet_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)))
Đầu ra:
Lemma for studies is study Lemma for studying is studying Lemma for cries is cry Lemma for cry is cry
Thảo luận về đầu ra
Nếu bạn xem xét việc rút gọn từ (stemming) cho "studies" và "studying", kết quả đầu ra là giống nhau (studi), nhưng bộ phân tích từ gốc NLTK lại cung cấp một từ gốc khác nhau cho cả hai từ: "study" cho "studies" và "studying" cho "studying". Vì vậy, khi cần tạo một tập hợp đặc trưng để huấn luyện máy, sẽ rất tốt nếu việc phân tích từ gốc được ưu tiên hơn.
Trường hợp sử dụng Lemmatizer
Công cụ Lemmatizer giảm thiểu sự mơ hồ trong văn bản. Các từ như bicycle hoặc bicycles được chuyển đổi thành từ gốc bicycle. Nó chuyển đổi tất cả các từ có cùng nghĩa nhưng cách viết khác nhau về dạng gốc, giảm mật độ từ và giúp...ping Chuẩn bị các đặc trưng chính xác để huấn luyện máy. Dữ liệu càng sạch, mô hình học máy của bạn càng chính xác. Công cụ NLTK Lemmatizer cũng giúp tiết kiệm bộ nhớ và chi phí tính toán.
Ví dụ thực tế minh họa việc sử dụng tính năng chuẩn hóa từ gốc (Lemmatization) và gắn thẻ từ loại (POS Tagging) của WordNet trong... Python:
from nltk.corpus import wordnet as wn from nltk.stem.wordnet import WordNetLemmatizer from nltk import word_tokenize, pos_tag from collections import defaultdict tag_map = defaultdict(lambda : wn.NOUN) tag_map['J'] = wn.ADJ tag_map['V'] = wn.VERB tag_map['R'] = wn.ADV text = "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)
Đầu ra:
guru99 => guru99 is => be totally => totally new => new kind => kind of => of learning => learn experience => experience . => .
Code Giải thích:
- Công cụ đọc ngữ liệu wordnet được nhập khẩu, và WordNetLemmatizer được nhập khẩu từ wordnet.
- Việc phân tách từ và gắn thẻ từ loại được nhập từ nltk, còn từ điển mặc định được lấy từ các bộ sưu tập.
- Một từ điển được tạo ra trong đó chữ cái đầu tiên của pos_tag là khóa, được ánh xạ tới giá trị từ từ điển wordnet.
- Văn bản được viết và phân tách thành các từ, và đối tượng lemma_function được tạo ra để sử dụng bên trong vòng lặp.
- Vòng lặp được chạy và hàm lemmatize nhận hai đối số: token và một map.ping của pos_tag với giá trị wordnet.
Python Việc chuẩn hóa thành từ vựng có mối liên hệ mật thiết với... Từ điển WordNetVì vậy, việc nghiên cứu chủ đề đó tiếp theo là rất cần thiết.

