Gensim-辞書の作成

ベクトルとモデルについて説明した最後の章で、辞書についてのアイデアを得ました。ここで、私たちは議論するつもりですDictionary もう少し詳細にオブジェクト。

辞書とは何ですか?

辞書の概念を深く掘り下げる前に、いくつかの簡単なNLPの概念を理解しましょう-

  • Token −トークンは「単語」を意味します。

  • Document −ドキュメントは文または段落を指します。

  • Corpus −ドキュメントのコレクションを単語の袋(BoW)と呼びます。

すべてのドキュメントについて、コーパスには常に各単語のトークンのIDとドキュメント内の頻度カウントが含まれています。

Gensimの辞書の概念に移りましょう。テキストドキュメントで作業する場合、Gensimでは単語、つまりトークンを一意のIDに変換する必要もあります。これを達成するために、それは私たちにDictionary object、各単語を一意の整数IDにマップします。これは、入力テキストを単語のリストに変換してから、corpora.Dictionary() オブジェクト。

辞書の必要性

ここで、辞書オブジェクトの実際の必要性と、それをどこで使用できるかという疑問が生じます。Gensimでは、辞書オブジェクトを使用してバッグオブワード(BoW)コーパスを作成し、トピックモデリングやその他のモデルへの入力としても使用します。

テキスト入力の形式

入力テキストには3つの異なる形式があり、Gensimに提供できます-

  • Pythonのネイティブリストオブジェクト(として知られている)に保存されている文として str Pythonで3)

  • 1つの単一のテキストファイルとして(小さいものでも大きいものでもかまいません)

  • 複数のテキストファイル

Gensimを使用した辞書の作成

説明したように、Gensimでは、辞書にはすべての単語、別名トークンの一意の整数IDへのマッピングが含まれています。文のリストから、1つまたは複数のテキストファイル(複数行のテキストを含むテキストファイル)から辞書を作成できます。それで、最初に文のリストを使用して辞書を作成することから始めましょう。

文のリストから

次の例では、文のリストから辞書を作成します。文のリストがある場合、または複数の文を言うことができる場合、すべての文を単語のリストに変換する必要があり、内包表記はこれを行うための非常に一般的な方法の1つです。

実装例

まず、必要なパッケージを次のようにインポートします-

import gensim
from gensim import corpora
from pprint import pprint

次に、文/文書のリストから内包リストを作成し、それを使用して辞書を作成します-

doc = [
   "CNTK formerly known as Computational Network Toolkit",
   "is a free easy-to-use open-source commercial-grade toolkit",
   "that enable us to train deep learning algorithms to learn like the human brain."
]

次に、文を単語に分割する必要があります。これはトークン化と呼ばれます。

text_tokens = [[text for text in doc.split()] for doc in doc]

これで、次のスクリプトを使用して、辞書を作成できます-

dict_LoS = corpora.Dictionary(text_tokens)

それでは、辞書内のトークンの数など、さらにいくつかの情報を取得しましょう。

print(dict_LoS)

出力

Dictionary(27 unique tokens: ['CNTK', 'Computational', 'Network', 'Toolkit', 'as']...)

次のように、単語から一意の整数へのマッピングも確認できます。

print(dict_LoS.token2id)

出力

{
   'CNTK': 0, 'Computational': 1, 'Network': 2, 'Toolkit': 3, 'as': 4, 
   'formerly': 5, 'known': 6, 'a': 7, 'commercial-grade': 8, 'easy-to-use': 9,
   'free': 10, 'is': 11, 'open-source': 12, 'toolkit': 13, 'algorithms': 14,
   'brain.': 15, 'deep': 16, 'enable': 17, 'human': 18, 'learn': 19, 'learning': 20,
   'like': 21, 'that': 22, 'the': 23, 'to': 24, 'train': 25, 'us': 26
}

完全な実装例

import gensim
from gensim import corpora
from pprint import pprint
doc = [
   "CNTK formerly known as Computational Network Toolkit",
   "is a free easy-to-use open-source commercial-grade toolkit",
   "that enable us to train deep learning algorithms to learn like the human brain."
]
text_tokens = [[text for text in doc.split()] for doc in doc]
dict_LoS = corpora.Dictionary(text_tokens)
print(dict_LoS.token2id)

単一のテキストファイルから

次の例では、単一のテキストファイルから辞書を作成します。同様の方法で、複数のテキストファイル(つまり、ファイルのディレクトリ)から辞書を作成することもできます。

このために、前の例で使用したドキュメントを、という名前のテキストファイルに保存しました。 doc.txt。Gensimはファイルを1行ずつ読み取り、を使用して一度に1行ずつ処理します。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という名前の単一のテキストファイルを使用してgensim辞書を作成します-

dict_STF = corpora.Dictionary(
   simple_preprocess(line, deacc =True) for line in open(‘doc.txt’, encoding=’utf-8’)
)

それでは、辞書内のトークンの数など、さらにいくつかの情報を取得しましょう。

print(dict_STF)

出力

Dictionary(27 unique tokens: ['CNTK', 'Computational', 'Network', 'Toolkit', 'as']...)

次のように、単語から一意の整数へのマッピングも確認できます。

print(dict_STF.token2id)

出力

{
   'CNTK': 0, 'Computational': 1, 'Network': 2, 'Toolkit': 3, 'as': 4, 
   'formerly': 5, 'known': 6, 'a': 7, 'commercial-grade': 8, 'easy-to-use': 9, 
   'free': 10, 'is': 11, 'open-source': 12, 'toolkit': 13, 'algorithms': 14, 
   'brain.': 15, 'deep': 16, 'enable': 17, 'human': 18, 'learn': 19, 
   'learning': 20, 'like': 21, 'that': 22, 'the': 23, 'to': 24, 'train': 25, 'us': 26
}

完全な実装例

import gensim
from gensim import corpora
from pprint import pprint
from gensim.utils import simple_preprocess
from smart_open import smart_open
import os
dict_STF = corpora.Dictionary(
   simple_preprocess(line, deacc =True) for line in open(‘doc.txt’, encoding=’utf-8’)
)
dict_STF = corpora.Dictionary(text_tokens)
print(dict_STF.token2id)

複数のテキストファイルから

次に、複数のファイル、つまり同じディレクトリに保存されている複数のテキストファイルから辞書を作成しましょう。この例では、3つの異なるテキストファイルを作成しました。first.txt, second.txt そして third.txtテキストファイル(doc.txt)の3行が含まれているため、前の例で使用しました。これら3つのテキストファイルはすべて、という名前のディレクトリに保存されますABC

実装例

これを実装するには、ディレクトリ(ABC)内の3つのテキストファイル(First、Second、Third.txt)をすべて反復処理し、処理された単語トークンのリストを生成できるメソッドを使用してクラスを定義する必要があります。

名前の付いたクラスを定義しましょう Read_files __という名前のメソッドを持つiteration__()は次のように-

class Read_files(object):
   def __init__(self, directoryname):
      elf.directoryname = directoryname
   def __iter__(self):
      for fname in os.listdir(self.directoryname):
         for line in open(os.path.join(self.directoryname, fname), encoding='latin'):
   yield simple_preprocess(line)

次に、ディレクトリのパスを次のように指定する必要があります-

path = "ABC"

#provide the path as per your computer system where you saved the directory

次の手順は、前の例で行ったのと同様です。次のコード行は、3つのテキストファイルを持つディレクトリを使用してGensimディレクトリを作成します-

dict_MUL = corpora.Dictionary(Read_files(path))

出力

Dictionary(27 unique tokens: ['CNTK', 'Computational', 'Network', 'Toolkit', 'as']...)

これで、単語から一意の整数へのマッピングを次のように確認することもできます。

print(dict_MUL.token2id)

出力

{
   'CNTK': 0, 'Computational': 1, 'Network': 2, 'Toolkit': 3, 'as': 4, 
   'formerly': 5, 'known': 6, 'a': 7, 'commercial-grade': 8, 'easy-to-use': 9, 
   'free': 10, 'is': 11, 'open-source': 12, 'toolkit': 13, 'algorithms': 14, 
   'brain.': 15, 'deep': 16, 'enable': 17, 'human': 18, 'learn': 19, 
   'learning': 20, 'like': 21, 'that': 22, 'the': 23, 'to': 24, 'train': 25, 'us': 26
}

Gensim辞書の保存と読み込み

Gensimは独自のネイティブをサポートしています save() 辞書をディスクに保存する方法と load() ディスクから辞書をロードバックする方法。

たとえば、次のスクリプトを使用して辞書を保存できます-

Gensim.corpora.dictionary.save(filename)

#provide the path where you want to save the dictionary

同様に、load()メソッドを使用して、保存された辞書をロードできます。次のスクリプトはこれを行うことができます-

Gensim.corpora.dictionary.load(filename)

#provide the path where you have saved the dictionary.