Gensim-단어 가방 (BoW) 코퍼스 만들기

우리는 문서 목록과 텍스트 파일에서 사전을 생성하는 방법을 이해했습니다. 이제이 섹션에서는 BoW (bag-of-words) 말뭉치를 생성합니다. Gensim과 함께 작업하기 위해서는 우리가 숙지해야하는 가장 중요한 개체 중 하나입니다. 기본적으로 각 문서에서 단어 id와 빈도를 포함하는 말뭉치입니다.

BoW Corpus 생성

논의 된 바와 같이 Gensim에서 말뭉치는 모든 문서에서 단어 id와 빈도를 포함합니다. 간단한 문서 목록과 텍스트 파일에서 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를 단어로 변환 할 수도 있지만이를 위해서는 다음과 같이 변환을 수행하기 위해 사전이 필요합니다.

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 코퍼스를 생성합니다. 이를 위해 이전 예제에서 사용 된 문서를 텍스트 파일에 저장했습니다.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 파일에는 다음 내용이 있습니다-

이전에 Computational Network Toolkit으로 알려진 CNTK는 인간의 두뇌처럼 학습 할 수 있도록 딥 러닝 알고리즘을 훈련 할 수있는 사용하기 쉬운 무료 오픈 소스 상용 등급 툴킷입니다.

tutorialspoint.com에서 무료 자습서를 찾을 수 있으며 AI 딥 러닝 머신 러닝과 같은 기술에 대한 최고의 기술 자습서를 무료로 제공합니다.

완전한 구현 예

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)