+2

Xử Lý Ngôn Ngữ Tự Nhiên với Python - P3

Trong phần này, tôi sẽ hướng dẫn bạn một số thao tác xử lý cơ bản khi sử dụng Python và NLTK để xử lý ngôn ngữ tự nhiên. Chúng ta sẽ sử dụng một package mà NLTK cung cấp sẵn đó là Book. Book chứa Text của các cuốn sách mẫu dành cho việc xử lý ngôn ngữ. Để sử dụng được Book, chúng ta cần import nó vào trong mã Python của chúng ta. Ở hướng dẫn này, tôi sẽ sử dụng Python interpreter để chạy. Các bạn có thể làm tương tự và chạy với Python file.

1. Import NLTK Book

Python 3.6.2 (default, Jul 17 2017, 16:44:45) 
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Ta tiến hành import book với lệnh "from nltk.book import *"

>>> from nltk.book import *
*** Introductory Examples for the NLTK Book ***
Loading text1, ..., text9 and sent1, ..., sent9
Type the name of the text or sentence to view it.
Type: 'texts()' or 'sents()' to list the materials.
text1: Moby Dick by Herman Melville 1851
text2: Sense and Sensibility by Jane Austen 1811
text3: The Book of Genesis
text4: Inaugural Address Corpus
text5: Chat Corpus
text6: Monty Python and the Holy Grail
text7: Wall Street Journal
text8: Personals Corpus
text9: The Man Who Was Thursday by G . K . Chesterton 1908

Kết quả là ta đã có Text của 9 cuốn sách, được gán vào các biến tương ứng từ text1 -> text9. Ta thử xem nội dung các biến thế nào

>>> text1
<Text: Moby Dick by Herman Melville 1851>
>>> text2
<Text: Sense and Sensibility by Jane Austen 1811>
>>> 

2. Tìm kiếm Text

Phần này sẽ nói về một số kỹ thuật tìm kiếm Text trong quá trình xử lý và phân tích ngôn ngữ. Ví dụ như tìm, đếm, so sánh...

Tìm text ở trong đoạn văn bản.

Ví dụ chúng ta muốn tìm từ "monstrous" trong văn bản được lưu trong biến text1, ta sử dụng hàm concordance(). Hàm trên sẽ được gọi trực tiếp từ biến text1 theo cơ chế tự động của Python.

>>> text1.concordance("monstrous")
Displaying 11 of 11 matches:
ong the former , one was of a most monstrous size . ... This came towards us , 
ON OF THE PSALMS . " Touching that monstrous bulk of the whale or ork we have r
ll over with a heathenish array of monstrous clubs and spears . Some were thick
d as you gazed , and wondered what monstrous cannibal and savage could ever hav
that has survived the flood ; most monstrous and most mountainous ! That Himmal
they might scout at Moby Dick as a monstrous fable , or still worse and more de
th of Radney .'" CHAPTER 55 Of the Monstrous Pictures of Whales . I shall ere l
ing Scenes . In connexion with the monstrous pictures of whales , I am strongly
ere to enter upon those still more monstrous stories of them which are to be fo
ght have been rummaged out of this monstrous cabinet there is no telling . But 
of Whale - Bones ; for Whales of a monstrous size are oftentimes cast up dead u

Kết quả là chúng ta thấy từ "monstrous" được xuất hiện 11 lần trong văn bản.

Tìm các từ xuất hiện trong ngữ cảnh tương tự.

Nếu các bạn để ý kết quả trên, sẽ thấy từ "monstrous" sẽ đi đi cùng với ngữ cảnh như "the .... pictures" hay "the ... size". Bây giờ chúng ta cũng muốn tìm các từ mà chúng cũng được sử dụng trong các ngữ cảnh tương tự với từ "monstrous". Để làm được điều đó, chúng ta sẽ sử dụng hàm similar(), cách sử dụng tương tự hàm concordance() phía trên.

>>> text1.similar("monstrous")
true contemptible christian abundant few part mean careful puzzled
mystifying passing curious loving wise doleful gamesome singular
delightfully perilous fearless

Kết quả là ta có 1 list các từ có ngữ cảnh tương tự với từ "monstrous". Bây giờ ta cùng thử với text2.

>>> text2.similar("monstrous")
very so exceedingly heartily a as good great extremely remarkably
sweet vast amazingly

Nếu xem xét về khía cạnh ngôn ngữ thì từ "monstrous" được sử dụng rất khác biệt về ý nghĩa. Với tác giả của đoạn text2, từ "monstrous" mang ý nghĩa tích cực hơn dựa vào ý nghĩa của các tính từ cùng ngữ cảnh như good, great, very, amazingly... Có vẻ như con quái vật trong cuốn sách thứ 2 khá là Cute và tốt bụng 😃

3. Đếm số lượng từ trong văn bản.

Đếm tất cả lượng từ trong đoạn văn.

Ta sử dụng hàm len() của Python để đếm số từ trong đoạn văn ở biến text3.

>>> len(text3)
44764

Kết quả là ta có 44.764 từ trong văn bản trên, bao gồm cả các dấu chấm câu. Ở đây ta sẽ tìm hiểu khái niệm đầu tiên của NLP đó là Token. Như vậy, mỗi một từ hay 1 dấu chấm câu sẽ được gọi là 1 "token". Cụ thể hơn về Token

Mỗi Token là một tên mang nghĩa kỹ thuật của dãy các ký tự, ví dụ name, her, your hay 😃, 😄

Đếm số lượng từ sử dụng trong văn bản.

Tức là ta đếm số từ được sử dụng, ví dụ trong văn bản sửa dụng từ "such" 100 lần, thì trường hợp này cũng chỉ tính là 1 từ mà thôi. Ta thực hiện bằng cách sử dụng hàm len() và hàm set() lồng nhau.

>>> len(set(text3))
2789

Như vậy cả thảy có 2789 từ được sử dụng. Không tới 3000 từ tiếng Anh trong cuốn sách số 3 này. Như vậy nếu bạn học đủ 3000 từ thông dụng của tiếng Anh là đọc sách tiếng Anh ngon rồi nhỉ? 😃 OK. Giờ muốn biết xem những từ đó là từ gì, và sắp xếp chúng theo thứ tự, ta vẫn dùng hàm set() và bao bên ngoài là hàm sorted() để sắp xếp chúng theo thứ tự A-Z.

>>> sorted(set(text3))
['!', "'", '(', ')', ',', ',)', '.', '.)', ':', ';', ';)', '?', '?)', 'A', 'Abel', 'Abelmizraim', 'Abidah', 'Abide', 'Abimael', 'Abimelech', 'Abr', 'Abrah', 'Abraham', 'Abram', 'Accad', 'Achbor', 'Adah', 'Adam', 'Adbeel', 'Admah', 'Adullamite', 'After', 'Aholibamah', 'Ahuzzath', 'Ajah', 'Akan', 'All', 'Allonbachuth', 'Almighty', 'Almodad', 'Also', 'Alvah', 'Alvan', 'Am', 'Amal', 'Amalek', 'Amalekites', 'Ammon', 'Amorite', 'Amorites', 'Amraphel', 'An', 'Anah', 'Anamim', 'And', 'Aner', 'Angel', 'Appoint', 'Aram', 'Aran', 'Ararat', 'Arbah', 'Ard', 'Are', 'Areli', 'Arioch', 'Arise', 'Arkite', 'Arodi', 'Arphaxad', 'Art'....

Có rất nhiều từ và tôi chỉ Copy một vài từ đầu vào bài này thôi. Bạn có thể chạy lệnh tương tự để thấy toàn bộ từ được sử dụng trong văn bản.

Đếm số lần xuất hiện của 1 từ trong văn bản.

Cái này thì dễ rồi, bạn sử dụng hàm count() để làm việc này. Ví dụ tôi muốn tìm từ "lol" trong đoạn văn bản số 5.

>>> text5.count('lol')
704

Như vậy từ "lol" xuất hiện tới 704 lần trong văn bản thứ 5.

Tính tỉ lệ phần trăm của 1 từ trong văn bản.

Cái này thì phép toán lớp 1 rồi. Nào ta cùng tính số phần trăm của từ "lol" trong văn bản số 5 nhé.

>>> 100 * text5.count("lol") / len(text5)
1.5640968673628082

Như vậy là từ này chiếm gần 1.6% trong văn bản 5. Một ứng dụng của việc tính phần trăm nay là thống kê xem tên của ai đó, sự việc gì đó hoặc từ nào đó xuất hiện trong các tài liệu, bài báo, văn bản hay các Status trên Mạng xã hội.

DEHA AI Lab - Công ty cổ phần DEHA Việt Nam.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí