Xử lý ngôn ngữ tự nhiên - Python

Trong chương này, chúng ta sẽ tìm hiểu về xử lý ngôn ngữ bằng Python.

Các tính năng sau làm cho Python khác với các ngôn ngữ khác:

  • Python is interpreted - Chúng tôi không cần phải biên dịch chương trình Python của mình trước khi thực thi vì trình thông dịch xử lý Python trong thời gian chạy.

  • Interactive - Chúng tôi có thể tương tác trực tiếp với trình thông dịch để viết các chương trình Python của mình.

  • Object-oriented - Python có bản chất là hướng đối tượng và nó giúp ngôn ngữ này viết chương trình dễ dàng hơn vì với sự trợ giúp của kỹ thuật lập trình này, nó đóng gói mã bên trong các đối tượng.

  • Beginner can easily learn - Python còn được gọi là ngôn ngữ dành cho người mới bắt đầu vì nó rất dễ hiểu, và nó hỗ trợ phát triển một loạt các ứng dụng.

Điều kiện tiên quyết

Phiên bản mới nhất của Python 3 được phát hành là Python 3.7.1 có sẵn cho Windows, Mac OS và hầu hết các phiên bản của Hệ điều hành Linux.

  • Đối với windows, chúng ta có thể vào link www.python.org/downloads/windows/ để tải và cài đặt Python.

  • Đối với MAC OS, chúng ta có thể sử dụng liên kết www.python.org/downloads/mac-osx/ .

  • Trong trường hợp Linux, các phiên bản Linux khác nhau sử dụng các trình quản lý gói khác nhau để cài đặt các gói mới.

    • Ví dụ, để cài đặt Python 3 trên Ubuntu Linux, chúng ta có thể sử dụng lệnh sau từ terminal:

$sudo apt-get install python3-minimal

Để nghiên cứu thêm về lập trình Python, hãy đọc hướng dẫn cơ bản về Python 3 - Python 3

Bắt đầu với NLTK

Chúng tôi sẽ sử dụng thư viện Python NLTK (Bộ công cụ ngôn ngữ tự nhiên) để thực hiện phân tích văn bản bằng tiếng Anh. Bộ công cụ ngôn ngữ tự nhiên (NLTK) là một tập hợp các thư viện Python được thiết kế đặc biệt để xác định và gắn thẻ các phần của giọng nói được tìm thấy trong văn bản của ngôn ngữ tự nhiên như tiếng Anh.

Cài đặt NLTK

Trước khi bắt đầu sử dụng NLTK, chúng ta cần cài đặt nó. Với sự trợ giúp của lệnh sau, chúng ta có thể cài đặt nó trong môi trường Python của mình -

pip install nltk

Nếu chúng ta đang sử dụng Anaconda, thì một gói Conda cho NLTK có thể được tạo bằng cách sử dụng lệnh sau:

conda install -c anaconda nltk

Tải xuống dữ liệu của NLTK

Sau khi cài đặt NLTK, một nhiệm vụ quan trọng khác là tải các kho văn bản cài sẵn của nó để có thể dễ dàng sử dụng. Tuy nhiên, trước đó chúng ta cần nhập NLTK theo cách chúng ta nhập bất kỳ mô-đun Python nào khác. Lệnh sau sẽ giúp chúng ta nhập NLTK -

import nltk

Bây giờ, hãy tải xuống dữ liệu NLTK với sự trợ giúp của lệnh sau:

nltk.download()

Sẽ mất một khoảng thời gian để cài đặt tất cả các gói có sẵn của NLTK.

Các gói cần thiết khác

Một số gói Python khác như gensimpatterncũng rất cần thiết cho việc phân tích văn bản cũng như xây dựng các ứng dụng xử lý ngôn ngữ tự nhiên bằng cách sử dụng NLTK. các gói có thể được cài đặt như hình dưới đây -

gensim

gensim là một thư viện mô hình ngữ nghĩa mạnh mẽ có thể được sử dụng cho nhiều ứng dụng. Chúng ta có thể cài đặt nó bằng lệnh sau:

pip install gensim

mẫu

Nó có thể được sử dụng để làm gensimgói hoạt động đúng cách. Lệnh sau giúp cài đặt mẫu:

pip install pattern

Mã hóa

Tokenization có thể được định nghĩa là Quá trình phá vỡ văn bản đã cho, thành các đơn vị nhỏ hơn được gọi là mã thông báo. Các từ, số hoặc dấu chấm câu có thể là mã thông báo. Nó cũng có thể được gọi là phân đoạn từ.

Thí dụ

Input - Giường và ghế là loại nội thất.

Chúng tôi có các gói mã hóa khác nhau do NLTK cung cấp. Chúng tôi có thể sử dụng các gói này dựa trên yêu cầu của chúng tôi. Các gói và chi tiết cài đặt của chúng như sau:

gói sent_tokenize

Gói này có thể được sử dụng để chia văn bản đầu vào thành các câu. Chúng ta có thể nhập nó bằng cách sử dụng lệnh sau:

from nltk.tokenize import sent_tokenize

gói word_tokenize

Gói này có thể được sử dụng để chia văn bản đầu vào thành các từ. Chúng ta có thể nhập nó bằng cách sử dụng lệnh sau:

from nltk.tokenize import word_tokenize

Gói WordPunctTokenizer

Gói này có thể được sử dụng để chia văn bản đầu vào thành các từ và dấu chấm câu. Chúng ta có thể nhập nó bằng cách sử dụng lệnh sau:

from nltk.tokenize import WordPuncttokenizer

Gốc

Vì lý do ngữ pháp, ngôn ngữ bao gồm rất nhiều biến thể. Các biến thể theo nghĩa là ngôn ngữ, tiếng Anh cũng như các ngôn ngữ khác, có các dạng khác nhau của một từ. Ví dụ, những từ nhưdemocracy, democraticdemocratization. Đối với các dự án máy học, điều rất quan trọng là máy móc phải hiểu rằng những từ khác nhau này, như ở trên, có cùng dạng cơ sở. Đó là lý do tại sao nó rất hữu ích để trích xuất các dạng cơ sở của các từ trong khi phân tích văn bản.

Cắt ghép là một quá trình nghiên cứu giúp rút ra các dạng cơ bản của các từ bằng cách cắt các đầu của chúng.

Các gói khác nhau để tạo gốc do mô-đun NLTK cung cấp như sau:

Gói PorterStemmer

Thuật toán của Porter được gói gốc này sử dụng để trích xuất dạng cơ sở của các từ. Với sự trợ giúp của lệnh sau, chúng ta có thể nhập gói này:

from nltk.stem.porter import PorterStemmer

Ví dụ, ‘write’ sẽ là đầu ra của từ ‘writing’ được cung cấp làm đầu vào cho trình gốc này.

Gói LancasterStemmer

Thuật toán của Lancaster được gói gốc này sử dụng để trích xuất dạng cơ sở của các từ. Với sự trợ giúp của lệnh sau, chúng ta có thể nhập gói này -

from nltk.stem.lancaster import LancasterStemmer

Ví dụ, ‘writ’ sẽ là đầu ra của từ ‘writing’ được cung cấp làm đầu vào cho trình gốc này.

Gói SnowballStemmer

Thuật toán của Snowball được sử dụng bởi gói gốc này để trích xuất dạng cơ sở của các từ. Với sự trợ giúp của lệnh sau, chúng ta có thể nhập gói này -

from nltk.stem.snowball import SnowballStemmer

Ví dụ, ‘write’ sẽ là đầu ra của từ ‘writing’ được cung cấp làm đầu vào cho trình gốc này.

Bổ sung

Đó là một cách khác để trích xuất dạng cơ sở của từ, thông thường nhằm mục đích loại bỏ các kết thúc không theo chiều hướng bằng cách sử dụng phân tích từ vựng và hình thái. Sau khi bổ đề, dạng cơ sở của bất kỳ từ nào được gọi là bổ đề.

Mô-đun NLTK cung cấp gói sau để lemmatization -

Gói WordNetLemmatizer

Gói này sẽ trích xuất dạng cơ sở của từ tùy thuộc vào việc nó được sử dụng như một danh từ hay một động từ. Lệnh sau có thể được sử dụng để nhập gói này:

from nltk.stem import WordNetLemmatizer

Đếm thẻ POS – Chunking

Việc xác định các phần của giọng nói (POS) và các cụm từ ngắn có thể được thực hiện với sự trợ giúp của phân khúc. Nó là một trong những quá trình quan trọng trong xử lý ngôn ngữ tự nhiên. Như chúng ta đã biết về quá trình mã hóa để tạo ra các mã thông báo, phân khúc thực sự là thực hiện việc gắn nhãn cho các mã thông báo đó. Nói cách khác, chúng ta có thể nói rằng chúng ta có thể có được cấu trúc của câu với sự trợ giúp của quá trình phân khúc.

Thí dụ

Trong ví dụ sau, chúng ta sẽ triển khai phân đoạn Danh từ-Cụm từ, một loại phân đoạn sẽ tìm các khối cụm danh từ trong câu, bằng cách sử dụng mô-đun NLTK Python.

Hãy xem xét các bước sau để thực hiện tách cụm danh từ -

Step 1: Chunk grammar definition

Trong bước này, chúng ta cần xác định ngữ pháp để phân khúc. Nó sẽ bao gồm các quy tắc mà chúng ta cần tuân theo.

Step 2: Chunk parser creation

Tiếp theo, chúng ta cần tạo một trình phân tích cú pháp chunk. Nó sẽ phân tích ngữ pháp và đưa ra kết quả.

Step 3: The Output

Trong bước này, chúng ta sẽ nhận được kết quả ở dạng cây.

Chạy Tập lệnh NLP

Bắt đầu bằng cách nhập gói NLTK -

import nltk

Bây giờ, chúng ta cần xác định câu.

Đây,

  • DT là yếu tố quyết định

  • VBP là động từ

  • JJ là tính từ

  • IN là giới từ

  • NN là danh từ

sentence = [("a", "DT"),("clever","JJ"),("fox","NN"),("was","VBP"),
   ("jumping","VBP"),("over","IN"),("the","DT"),("wall","NN")]

Tiếp theo, ngữ pháp nên được đưa ra dưới dạng biểu thức chính quy.

grammar = "NP:{<DT>?<JJ>*<NN>}"

Bây giờ, chúng ta cần xác định một trình phân tích cú pháp để phân tích ngữ pháp.

parser_chunking = nltk.RegexpParser(grammar)

Bây giờ, trình phân tích cú pháp sẽ phân tích cú pháp câu như sau:

parser_chunking.parse(sentence)

Tiếp theo, đầu ra sẽ ở trong biến như sau: -

Output = parser_chunking.parse(sentence)

Bây giờ, đoạn mã sau sẽ giúp bạn vẽ đầu ra của mình dưới dạng cây.

output.draw()