Gensim - การสร้างถุงคำ (BoW) Corpus
เราเข้าใจวิธีสร้างพจนานุกรมจากรายการเอกสารและจากไฟล์ข้อความ (จากหนึ่งและจากมากกว่าหนึ่งไฟล์) ตอนนี้ในส่วนนี้เราจะสร้างคลังคำศัพท์ (BoW) ในการทำงานร่วมกับ Gensim มันเป็นหนึ่งในวัตถุที่สำคัญที่สุดที่เราต้องทำความคุ้นเคย โดยทั่วไปเป็นคลังข้อมูลที่มีรหัสคำและความถี่ในแต่ละเอกสาร
การสร้าง BoW Corpus
ตามที่กล่าวไว้ใน Gensim คลังข้อมูลประกอบด้วยรหัสคำและความถี่ในเอกสารทุกฉบับ เราสามารถสร้างคลังข้อมูล BoW จากรายการเอกสารง่ายๆและจากไฟล์ข้อความ สิ่งที่เราต้องทำคือส่งรายการคำที่เป็นโทเค็นไปยังวัตถุที่ตั้งชื่อDictionary.doc2bow(). ก่อนอื่นเรามาเริ่มต้นด้วยการสร้างคลังข้อมูล BoW โดยใช้รายการเอกสารง่ายๆ
จากรายการประโยคง่ายๆ
ในตัวอย่างต่อไปนี้เราจะสร้างคลังข้อมูล BoW จากรายการง่ายๆที่มีสามประโยค
ขั้นแรกเราต้องนำเข้าแพ็คเกจที่จำเป็นทั้งหมดดังนี้ -
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]
สร้างวัตถุของ corpora.Dictionary() ดังต่อไปนี้ -
dictionary = corpora.Dictionary()
ตอนนี้ส่งประโยคโทเค็นเหล่านี้ไปที่ dictionary.doc2bow() objectดังต่อไปนี้ -
BoW_corpus = [dictionary.doc2bow(doc, allow_update=True) for doc in doc_tokenized]
ในที่สุดเราก็สามารถพิมพ์ Bag of word corpus ได้ -
print(BoW_corpus)
เอาต์พุต
[
[(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)]
]
ผลลัพธ์ข้างต้นแสดงให้เห็นว่าคำที่มี id = 0 ปรากฏขึ้นหนึ่งครั้งในเอกสารแรก (เนื่องจากเรามี (0,1) ในผลลัพธ์) และอื่น ๆ
ผลลัพธ์ข้างต้นไม่สามารถให้มนุษย์อ่านได้ เรายังสามารถแปลงรหัสเหล่านี้เป็นคำได้ แต่สำหรับสิ่งนี้เราต้องใช้พจนานุกรมของเราเพื่อทำการแปลงดังนี้ -
id_words = [[(dictionary[id], count) for id, count in line] for line in BoW_corpus]
print(id_words)
เอาต์พุต
[
[('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)]
]
ตอนนี้ผลลัพธ์ข้างต้นเป็นสิ่งที่มนุษย์สามารถอ่านได้
ตัวอย่างการใช้งานที่สมบูรณ์
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)
จากไฟล์ข้อความ
ในตัวอย่างต่อไปนี้เราจะสร้าง BoW corpus จากไฟล์ข้อความ สำหรับสิ่งนี้เราได้บันทึกเอกสารซึ่งใช้ในตัวอย่างก่อนหน้านี้ในไฟล์ข้อความที่ชื่อdoc.txt..
Gensim จะอ่านไฟล์ทีละบรรทัดและประมวลผลทีละบรรทัดโดยใช้ simple_preprocess. ด้วยวิธีนี้จึงไม่จำเป็นต้องโหลดไฟล์ทั้งหมดในหน่วยความจำพร้อมกัน
ตัวอย่างการใช้งาน
ขั้นแรกให้นำเข้าแพ็คเกจที่จำเป็นและจำเป็นดังต่อไปนี้ -
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.txt และโทเค็น -
doc_tokenized = [
simple_preprocess(line, deacc =True) for line in open(‘doc.txt’, encoding=’utf-8’)
]
dictionary = corpora.Dictionary()
ตอนนี้เราต้องส่งคำที่เป็นโทเค็นเหล่านี้เข้าไป dictionary.doc2bow() วัตถุ (เช่นเดียวกับในตัวอย่างก่อนหน้านี้)
BoW_corpus = [
dictionary.doc2bow(doc, allow_update=True) for doc in doc_tokenized
]
print(BoW_corpus)
เอาต์พุต
[
[(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)
]
]
doc.txt ไฟล์มีเนื้อหาดังต่อไปนี้ -
CNTK เดิมเรียกว่า Computational Network Toolkit เป็นชุดเครื่องมือเกรดเชิงพาณิชย์แบบโอเพนซอร์สที่ใช้งานง่ายฟรีซึ่งช่วยให้เราสามารถฝึกอัลกอริทึมการเรียนรู้เชิงลึกเพื่อเรียนรู้เหมือนสมองของมนุษย์
คุณสามารถค้นหาบทช่วยสอนฟรีได้ที่ tutorialspoint.com นอกจากนี้ยังมีบทแนะนำทางเทคนิคที่ดีที่สุดเกี่ยวกับเทคโนโลยีเช่น AI deep learning machine learning ได้ฟรี
ตัวอย่างการใช้งานที่สมบูรณ์
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)
การบันทึกและการโหลด Gensim Corpus
เราสามารถบันทึกคลังข้อมูลด้วยความช่วยเหลือของสคริปต์ต่อไปนี้ -
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.
ในทำนองเดียวกันเราสามารถโหลดคลังข้อมูลที่บันทึกไว้โดยใช้สคริปต์ต่อไปนี้ -
corpus_load = corpora.MmCorpus(‘/Users/Desktop/BoW_corpus.mm’)
for line in corpus_load:
print(line)