Lập trình và bổ sung hóa với Python NLTK

Mục lục:

Anonim

Stemming là gì?

Lập trình là một loại chuẩn hóa cho các từ. Chuẩn hóa là một kỹ thuật mà một tập hợp các từ trong một câu được chuyển đổi thành một chuỗi để rút ngắn tra cứu của nó. Các từ có nghĩa giống nhau nhưng có một số biến thể tùy theo ngữ cảnh hoặc câu được chuẩn hóa.

Trong một từ 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à "ăn, ăn, ăn và như vậy". Theo cách tương tự, với sự trợ giúp của Stemming, chúng ta có thể tìm thấy 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 giống nhau, tức là hoạt động cưỡi ngựa trong quá khứ. Một 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. Vì vậy, thật khó để chuyển đổi nó thành cùng một hàng dữ liệu. Trong trường hợp chúng tôi không cung cấp cùng một tập dữ liệu, thì máy không dự đoán được. Vì vậy cần phân biệt nghĩa của từng từ để chuẩn bị bộ dữ liệu cho học máy. Và ở đây từ gốc được sử dụng để phân loại cùng một loại dữ liệu bằng cách lấy từ gốc của nó.

Hãy thực hiện điều này với một chương trình Python.NLTK có một thuật toán được đặt tên là "PorterStemmer". Thuật toán này chấp nhận danh sách các từ được mã hóa và đưa nó vào từ gốc.

Chương trình tìm hiểu về Lập trình

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

Đầu ra :

waitwaitwaitwait

Giải thích mã:

  • Có một mô-đun gốc trong NLTk được nhập. Nếu nếu bạn nhập mô-đun hoàn chỉnh, thì 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 gốc, chúng tôi chỉ nhập "PorterStemmer."
  • Chúng tôi đã chuẩn bị một danh sách giả các dữ liệu biến thể của cùng một từ.
  • Một đối tượng được tạo thuộc về lớp nltk.stem.porter.PorterStemmer.
  • Hơn nữa, chúng tôi đã chuyển nó đến PorterStemmer từng cái một bằng cách sử dụng vòng lặp "for". Cuối cùng, chúng tôi nhận được từ gốc đầu ra của mỗi từ được đề cập trong danh sách.

Từ sự giải thích ở trên, cũng có thể kết luận rằng việc tạo gốc được coi là một bước tiền xử lý quan trọng vì nó đã loại bỏ sự dư thừa trong dữ liệu và các biến thể trong cùng một từ. Do đó, dữ liệu được lọc sẽ giúp đào tạo máy tốt hơn.

Bây giờ chúng ta chuyển một câu hoàn chỉnh và kiểm tra hành vi của nó như một đầu ra.

Chương trình:

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)

Đầu ra:

helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite

Giải thích mã

  • Gói PorterStemer được nhập từ gốc mô-đun
  • Các gói mã hóa của câu cũng như từ được nhập
  • Một câu được viết sẽ được mã hóa trong bước tiếp theo.
  • Mã hóa từ được thực hiện trong bước này.
  • Một đối tượng cho PorterStemmer được tạo ở đây.
  • Vòng lặp được chạy và gốc của mỗi từ được thực hiện bằng cách sử dụng đối tượng được tạo trong dòng mã 5

Phần kết luận:

Stemming là một mô-đun tiền xử lý dữ liệu. Ngôn ngữ tiếng Anh có nhiều biến thể của một từ duy nhất. Những biến thể này tạo ra sự mơ hồ trong đào tạo và dự đoán học máy. Để tạo ra một mô hình thành công, điều quan trọng là phải lọc những từ như vậy và chuyển đổi sang cùng một loại dữ liệu được sắp xếp theo trình tự bằng cách sử dụng gốc. Ngoài ra, đây là một kỹ thuật quan trọng để lấy dữ liệu hàng từ một tập hợp các câu và loại bỏ dữ liệu thừa còn được gọi là chuẩn hóa.

Lemmatization là gì?

Bổ đề là quá trình thuật toán tìm bổ đề của một từ tùy thuộc vào nghĩa của chúng. Bổ sung hóa thường đề cập đến việc phân tích hình thái của từ, nhằm mục đích loại bỏ các kết thúc không theo chiều hướng. Nó giúp trả về dạng cơ sở hoặc dạng từ điển của một từ, được gọi là bổ đề. Phương pháp bổ sung NLTK dựa trên hàm morph có sẵn của WorldNet. Quá trình tiền xử lý văn bản bao gồm cả tạo gốc cũng như bổ sung. Nhiều người thấy hai thuật ngữ khó hiểu. Một số coi những thứ này giống nhau, nhưng có sự khác biệt giữa cả hai. Việc bổ sung hóa được ưu tiên hơn so với trước đây vì lý do dưới đây.

Tại sao Lemmatization lại tốt hơn Stemming?

Thuật toán gốc hoạt động bằng cách cắt hậu tố khỏi từ. Theo nghĩa rộng hơn thì cắt phần đầu hoặc phần cuối của từ.

Ngược lại, Lemmatization là một hoạt động mạnh mẽ hơn, và nó có tính đến việc phân tích hình thái của các từ. Nó trả về bổ đề là dạng cơ sở của tất cả các dạng vô hướng của nó. Cần phải có kiến ​​thức ngôn ngữ chuyên sâu để tạo từ điển và tìm dạng thích hợp của từ. Stemming là một hoạt động chung trong khi lemmatization là một hoạt động thông minh, nơi biểu mẫu thích hợp sẽ được tìm kiếm trong từ điển. Do đó, lemmatization giúp hình thành các tính năng học máy tốt hơn.

Mã phân biệt giữa Lemmatization và Stemming

Mã gốc

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)))

Đầu ra:

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

Mã bổ sung

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)))

Đầu ra:

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

Thảo luận về đầu ra:

Nếu bạn tìm kiếm gốc cho nghiên cứu và học tập, đầu ra giống nhau (studi) nhưng bổ đề cung cấp bổ đề khác nhau cho cả nghiên cứu mã thông báo cho nghiên cứu và nghiên cứu để nghiên cứu. Vì vậy, khi chúng ta cần thiết lập tính năng để đào tạo máy, sẽ rất tốt nếu việc lemmatization được ưu tiên.

Trường hợp sử dụng của Lemmatizer:

Lemmatizer giảm thiểu sự mơ hồ của văn bản. Các từ ví dụ như xe đạp hoặc xe đạp được chuyển đổi thành xe đạp từ cơ bản. Về cơ bản, nó sẽ chuyển đổi tất cả các từ có cùng nghĩa nhưng khác nhau về dạng cơ sở của chúng. Nó làm giảm mật độ từ trong văn bản nhất định và giúp chuẩn bị các tính năng chính xác cho máy đào tạo. Dọn dẹp dữ liệu, mô hình học máy của bạn sẽ càng thông minh và chính xác. Lemmatizerwill cũng tiết kiệm bộ nhớ cũng như chi phí tính toán.

Ví dụ về thời gian thực cho thấy việc sử dụng Bổ sung Wordnet và Gắn thẻ POS bằng 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)

Giải thích mã

  • Đầu tiên, wordnet của trình đọc kho ngữ liệu được nhập vào.
  • WordNetLemmatizer được nhập từ wordnet
  • Mã hóa từ cũng như các phần của thẻ thoại được nhập từ nltk
  • Từ điển mặc định được nhập từ các bộ sưu tập
  • Từ điển được tạo trong đó pos_tag (chữ cái đầu tiên) là các giá trị khóa có giá trị được ánh xạ với giá trị từ từ điển wordnet. Chúng tôi đã lấy chữ cái đầu tiên duy nhất vì chúng tôi sẽ sử dụng nó sau này trong vòng lặp.
  • Văn bản được viết và được mã hóa.
  • Bổ đề đối tượng được tạo ra sẽ được sử dụng bên trong vòng lặp
  • Vòng lặp được chạy và lemmatize sẽ nhận hai đối số, một là mã thông báo và đối số kia là ánh xạ pos_tag với giá trị wordnet.

Đầu ra:

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

Bổ ngữ có mối quan hệ mật thiết với từ điển wordnet, vì vậy việc nghiên cứu chủ đề này là rất cần thiết, vì vậy chúng tôi giữ đây là chủ đề tiếp theo