Gensim - Tạo một túi từ (BoW) Corpus
Chúng tôi đã hiểu cách tạo từ điển từ danh sách tài liệu và từ tệp văn bản (từ một cũng như từ nhiều hơn một). Bây giờ, trong phần này, chúng ta sẽ tạo một kho từ ngữ (BoW). Để làm việc với Gensim, đây là một trong những đối tượng quan trọng nhất mà chúng ta cần làm quen. Về cơ bản, nó là kho ngữ liệu chứa id từ và tần suất của nó trong mỗi tài liệu.
Tạo BoW Corpus
Như đã thảo luận, trong Gensim, kho ngữ liệu chứa id từ và tần suất của nó trong mọi tài liệu. Chúng ta có thể tạo kho dữ liệu BoW từ một danh sách tài liệu đơn giản và từ các tệp văn bản. Những gì chúng ta cần làm là chuyển danh sách các từ được mã hóa cho đối tượng có tênDictionary.doc2bow(). Vì vậy, trước tiên, hãy bắt đầu bằng cách tạo kho dữ liệu BoW bằng cách sử dụng một danh sách các tài liệu đơn giản.
Từ một danh sách các câu đơn giản
Trong ví dụ sau, chúng tôi sẽ tạo kho ngữ liệu BoW từ một danh sách đơn giản chứa ba câu.
Đầu tiên, chúng ta cần nhập tất cả các gói cần thiết như sau:
import gensim
import pprint
from gensim import corpora
from gensim.utils import simple_preprocess
Bây giờ cung cấp danh sách chứa các câu. Chúng tôi có ba câu trong danh sách của mình -
doc_list = [
"Hello, how are you?", "How do you do?",
"Hey what are you doing? yes you What are you doing?"
]
Tiếp theo, thực hiện mã hóa các câu như sau:
doc_tokenized = [simple_preprocess(doc) for doc in doc_list]
Tạo một đối tượng của corpora.Dictionary() như sau -
dictionary = corpora.Dictionary()
Bây giờ chuyển những câu được mã hóa này sang dictionary.doc2bow() objectnhư sau -
BoW_corpus = [dictionary.doc2bow(doc, allow_update=True) for doc in doc_tokenized]
Cuối cùng, chúng tôi có thể in Bag of word corpus -
print(BoW_corpus)
Đầu ra
[
[(0, 1), (1, 1), (2, 1), (3, 1)],
[(2, 1), (3, 1), (4, 2)], [(0, 2), (3, 3), (5, 2), (6, 1), (7, 2), (8, 1)]
]
Kết quả ở trên cho thấy từ có id = 0 xuất hiện một lần trong tài liệu đầu tiên (vì chúng ta có (0,1) trong đầu ra), v.v.
Đầu ra ở trên bằng cách nào đó mà con người không thể đọc được. Chúng tôi cũng có thể chuyển đổi các id này thành các từ nhưng để làm được điều này, chúng tôi cần từ điển của mình để thực hiện chuyển đổi như sau:
id_words = [[(dictionary[id], count) for id, count in line] for line in BoW_corpus]
print(id_words)
Đầu ra
[
[('are', 1), ('hello', 1), ('how', 1), ('you', 1)],
[('how', 1), ('you', 1), ('do', 2)],
[('are', 2), ('you', 3), ('doing', 2), ('hey', 1), ('what', 2), ('yes', 1)]
]
Bây giờ đầu ra ở trên bằng cách nào đó con người có thể đọc được.
Hoàn thành ví dụ triển khai
import gensim
import pprint
from gensim import corpora
from gensim.utils import simple_preprocess
doc_list = [
"Hello, how are you?", "How do you do?",
"Hey what are you doing? yes you What are you doing?"
]
doc_tokenized = [simple_preprocess(doc) for doc in doc_list]
dictionary = corpora.Dictionary()
BoW_corpus = [dictionary.doc2bow(doc, allow_update=True) for doc in doc_tokenized]
print(BoW_corpus)
id_words = [[(dictionary[id], count) for id, count in line] for line in BoW_corpus]
print(id_words)
Từ một tệp văn bản
Trong ví dụ sau, chúng ta sẽ tạo kho dữ liệu BoW từ một tệp văn bản. Đối với điều này, chúng tôi đã lưu tài liệu, được sử dụng trong ví dụ trước, trong tệp văn bản có têndoc.txt..
Gensim sẽ đọc từng dòng tệp và xử lý từng dòng một bằng cách sử dụng simple_preprocess. Theo cách này, nó không cần tải toàn bộ tệp hoàn chỉnh trong bộ nhớ cùng một lúc.
Ví dụ triển khai
Đầu tiên, nhập các gói cần thiết và cần thiết như sau:
import gensim
from gensim import corpora
from pprint import pprint
from gensim.utils import simple_preprocess
from smart_open import smart_open
import os
Tiếp theo, dòng mã sau sẽ đọc các tài liệu từ doc.txt và mã hóa nó -
doc_tokenized = [
simple_preprocess(line, deacc =True) for line in open(‘doc.txt’, encoding=’utf-8’)
]
dictionary = corpora.Dictionary()
Bây giờ chúng ta cần chuyển những từ được mã hóa này vào dictionary.doc2bow() đối tượng (như đã làm trong ví dụ trước)
BoW_corpus = [
dictionary.doc2bow(doc, allow_update=True) for doc in doc_tokenized
]
print(BoW_corpus)
Đầu ra
[
[(9, 1), (10, 1), (11, 1), (12, 1), (13, 1), (14, 1), (15, 1)],
[
(15, 1), (16, 1), (17, 1), (18, 1), (19, 1), (20, 1), (21, 1),
(22, 1), (23, 1), (24, 1)
],
[
(23, 2), (25, 1), (26, 1), (27, 1), (28, 1), (29, 1),
(30, 1), (31, 1), (32, 1), (33, 1), (34, 1), (35, 1), (36, 1)
],
[(3, 1), (18, 1), (37, 1), (38, 1), (39, 1), (40, 1), (41, 1), (42, 1), (43, 1)],
[
(18, 1), (27, 1), (31, 2), (32, 1), (38, 1), (41, 1), (43, 1),
(44, 1), (45, 1), (46, 1), (47, 1), (48, 1), (49, 1), (50, 1), (51, 1), (52, 1)
]
]
Các doc.txt tệp có nội dung sau:
CNTK trước đây được gọi là Bộ công cụ mạng tính toán là một bộ công cụ cấp thương mại mã nguồn mở miễn phí, dễ sử dụng cho phép chúng tôi đào tạo các thuật toán học sâu để học giống như não người.
Bạn có thể tìm thấy hướng dẫn miễn phí của nó trên tutorialspoint.com cũng cung cấp các hướng dẫn kỹ thuật tốt nhất về các công nghệ như máy học học sâu AI miễn phí.
Hoàn thành ví dụ triển khai
import gensim
from gensim import corpora
from pprint import pprint
from gensim.utils import simple_preprocess
from smart_open import smart_open
import os
doc_tokenized = [
simple_preprocess(line, deacc =True) for line in open(‘doc.txt’, encoding=’utf-8’)
]
dictionary = corpora.Dictionary()
BoW_corpus = [dictionary.doc2bow(doc, allow_update=True) for doc in doc_tokenized]
print(BoW_corpus)
Lưu và tải Gensim Corpus
Chúng ta có thể lưu kho dữ liệu với sự trợ giúp của tập lệnh sau:
corpora.MmCorpus.serialize(‘/Users/Desktop/BoW_corpus.mm’, bow_corpus)
#provide the path and the name of the corpus. The name of corpus is BoW_corpus and we saved it in Matrix Market format.
Tương tự, chúng ta có thể tải kho dữ liệu đã lưu bằng cách sử dụng tập lệnh sau:
corpus_load = corpora.MmCorpus(‘/Users/Desktop/BoW_corpus.mm’)
for line in corpus_load:
print(line)