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ư gensim và patterncũ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, democraticvà democratization. Đố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()