Bộ công cụ ngôn ngữ tự nhiên - Thay thế từ
Stemming and lemmatization có thể được coi là một kiểu nén ngôn ngữ. Theo nghĩa tương tự, thay thế từ có thể được coi là chuẩn hóa văn bản hoặc sửa lỗi.
Nhưng tại sao chúng ta cần thay thế từ? Giả sử nếu chúng ta nói về mã hóa, thì nó đang gặp vấn đề với sự co lại (như không thể, sẽ không, v.v.). Vì vậy, để xử lý những vấn đề như vậy chúng ta cần thay thế từ. Ví dụ, chúng ta có thể thay thế các cơn co thắt bằng các dạng mở rộng của chúng.
Thay thế từ sử dụng biểu thức chính quy
Đầu tiên, chúng ta sẽ thay thế các từ phù hợp với biểu thức chính quy. Nhưng đối với điều này, chúng ta phải có hiểu biết cơ bản về biểu thức chính quy cũng như mô-đun python re. Trong ví dụ dưới đây, chúng tôi sẽ thay thế sự co lại bằng các dạng mở rộng của chúng (ví dụ: “không thể” sẽ được thay thế bằng “không thể”), tất cả điều đó bằng cách sử dụng biểu thức chính quy.
Thí dụ
Đầu tiên, hãy nhập lại gói cần thiết để hoạt động với các biểu thức chính quy.
import re
from nltk.corpus import wordnet
Tiếp theo, xác định các mẫu thay thế mà bạn chọn như sau:
R_patterns = [
(r'won\'t', 'will not'),
(r'can\'t', 'cannot'),
(r'i\'m', 'i am'),
r'(\w+)\'ll', '\g<1> will'),
(r'(\w+)n\'t', '\g<1> not'),
(r'(\w+)\'ve', '\g<1> have'),
(r'(\w+)\'s', '\g<1> is'),
(r'(\w+)\'re', '\g<1> are'),
]
Bây giờ, hãy tạo một lớp có thể được sử dụng để thay thế các từ -
class REReplacer(object):
def __init__(self, pattern = R_patterns):
self.pattern = [(re.compile(regex), repl) for (regex, repl) in patterns]
def replace(self, text):
s = text
for (pattern, repl) in self.pattern:
s = re.sub(pattern, repl, s)
return s
Lưu chương trình python này (giả sử repRE.py) và chạy nó từ dấu nhắc lệnh python. Sau khi chạy nó, hãy nhập lớp REReplacer khi bạn muốn thay thế các từ. Hãy để chúng tôi xem làm thế nào.
from repRE import REReplacer
rep_word = REReplacer()
rep_word.replace("I won't do it")
Output:
'I will not do it'
rep_word.replace("I can’t do it")
Output:
'I cannot do it'
Hoàn thành ví dụ triển khai
import re
from nltk.corpus import wordnet
R_patterns = [
(r'won\'t', 'will not'),
(r'can\'t', 'cannot'),
(r'i\'m', 'i am'),
r'(\w+)\'ll', '\g<1> will'),
(r'(\w+)n\'t', '\g<1> not'),
(r'(\w+)\'ve', '\g<1> have'),
(r'(\w+)\'s', '\g<1> is'),
(r'(\w+)\'re', '\g<1> are'),
]
class REReplacer(object):
def __init__(self, patterns=R_patterns):
self.patterns = [(re.compile(regex), repl) for (regex, repl) in patterns]
def replace(self, text):
s = text
for (pattern, repl) in self.patterns:
s = re.sub(pattern, repl, s)
return s
Bây giờ khi bạn đã lưu chương trình trên và chạy nó, bạn có thể nhập lớp và sử dụng nó như sau:
from replacerRE import REReplacer
rep_word = REReplacer()
rep_word.replace("I won't do it")
Đầu ra
'I will not do it'
Thay thế trước khi xử lý văn bản
Một trong những phương pháp phổ biến khi làm việc với xử lý ngôn ngữ tự nhiên (NLP) là làm sạch văn bản trước khi xử lý văn bản. Vì mối quan tâm này, chúng tôi cũng có thể sử dụngREReplacer lớp được tạo ở trên trong ví dụ trước, như một bước sơ bộ trước khi xử lý văn bản tức là mã hóa.
Thí dụ
from nltk.tokenize import word_tokenize
from replacerRE import REReplacer
rep_word = REReplacer()
word_tokenize("I won't be able to do this now")
Output:
['I', 'wo', "n't", 'be', 'able', 'to', 'do', 'this', 'now']
word_tokenize(rep_word.replace("I won't be able to do this now"))
Output:
['I', 'will', 'not', 'be', 'able', 'to', 'do', 'this', 'now']
Trong công thức Python ở trên, chúng ta có thể dễ dàng hiểu được sự khác biệt giữa đầu ra của từ tokenizer mà không có và sử dụng thay thế biểu thức chính quy.
Loại bỏ các ký tự lặp lại
Chúng ta có đúng ngữ pháp trong ngôn ngữ hàng ngày của chúng ta không? Không chúng ta không phải. Ví dụ, đôi khi chúng ta viết 'Hiiiiiiiiiiii Mohan' để nhấn mạnh từ 'Hi'. Nhưng hệ thống máy tính không biết rằng 'Hiiiiiiiiiiii' là một biến thể của từ "Hi". Trong ví dụ dưới đây, chúng tôi sẽ tạo một lớp có tênrep_word_removal có thể được sử dụng để loại bỏ các từ lặp lại.
Thí dụ
Đầu tiên, hãy nhập gói cần thiết để hoạt động với các biểu thức chính quy
import re
from nltk.corpus import wordnet
Bây giờ, hãy tạo một lớp có thể được sử dụng để xóa các từ lặp lại -
class Rep_word_removal(object):
def __init__(self):
self.repeat_regexp = re.compile(r'(\w*)(\w)\2(\w*)')
self.repl = r'\1\2\3'
def replace(self, word):
if wordnet.synsets(word):
return word
repl_word = self.repeat_regexp.sub(self.repl, word)
if repl_word != word:
return self.replace(repl_word)
else:
return repl_word
Lưu chương trình python này (giả sử removerepeat.py) và chạy nó từ dấu nhắc lệnh python. Sau khi chạy nó, hãy nhậpRep_word_removallớp khi bạn muốn loại bỏ các từ lặp lại. Hãy để chúng tôi xem như thế nào?
from removalrepeat import Rep_word_removal
rep_word = Rep_word_removal()
rep_word.replace ("Hiiiiiiiiiiiiiiiiiiiii")
Output:
'Hi'
rep_word.replace("Hellooooooooooooooo")
Output:
'Hello'
Hoàn thành ví dụ triển khai
import re
from nltk.corpus import wordnet
class Rep_word_removal(object):
def __init__(self):
self.repeat_regexp = re.compile(r'(\w*)(\w)\2(\w*)')
self.repl = r'\1\2\3'
def replace(self, word):
if wordnet.synsets(word):
return word
replace_word = self.repeat_regexp.sub(self.repl, word)
if replace_word != word:
return self.replace(replace_word)
else:
return replace_word
Bây giờ khi bạn đã lưu chương trình trên và chạy nó, bạn có thể nhập lớp và sử dụng nó như sau:
from removalrepeat import Rep_word_removal
rep_word = Rep_word_removal()
rep_word.replace ("Hiiiiiiiiiiiiiiiiiiiii")
Đầu ra
'Hi'