जेनसिम - एक शब्दकोश बनाना
पिछले अध्याय में जहां हमने वेक्टर और मॉडल के बारे में चर्चा की, आपको शब्दकोश के बारे में एक विचार मिला। यहां, हम चर्चा करने जा रहे हैंDictionary वस्तु थोड़ा और विस्तार से।
डिक्शनरी क्या है?
शब्दकोश की अवधारणा में गहरा गोता लगाने से पहले, आइए कुछ सरल एनएलपी अवधारणाओं को समझते हैं -
Token - टोकन का मतलब एक 'शब्द' होता है।
Document - एक दस्तावेज एक वाक्य या पैराग्राफ को संदर्भित करता है।
Corpus - यह शब्दों के एक बैग (BoW) के रूप में दस्तावेजों के संग्रह को संदर्भित करता है।
सभी दस्तावेजों के लिए, एक कॉर्पस में हमेशा दस्तावेज़ में इसकी आवृत्ति गणना के साथ प्रत्येक शब्द की टोकन आईडी होती है।
चलो गेंसिम में शब्दकोश की अवधारणा पर चलते हैं। टेक्स्ट डॉक्यूमेंट्स पर काम करने के लिए, गेंसिम को भी शब्दों की आवश्यकता होती है, अर्थात टोकन को अपने यूनिक आईडी में बदलना होगा। इसे प्राप्त करने के लिए, यह हमें सुविधा प्रदान करता हैDictionary object, जो प्रत्येक शब्द को अपनी विशिष्ट पूर्णांक आईडी में मैप करता है। यह इनपुट टेक्स्ट को शब्दों की सूची में परिवर्तित करके और फिर इसे पास करने के लिए करता हैcorpora.Dictionary() वस्तु।
शब्दकोश की जरूरत है
अब प्रश्न यह उठता है कि वास्तव में डिक्शनरी ऑब्जेक्ट की आवश्यकता क्या है और इसका उपयोग कहाँ किया जा सकता है? Gensim में, डिक्शनरी ऑब्जेक्ट का उपयोग शब्दों के एक बैग (BoW) कॉर्पस को बनाने के लिए किया जाता है जो आगे मॉडलिंग और अन्य मॉडलों के विषय के लिए इनपुट के रूप में उपयोग किया जाता है।
पाठ इनपुट के रूप
इनपुट पाठ के तीन अलग-अलग रूप हैं, हम गेंसिम को प्रदान कर सकते हैं -
जैसा कि पायथन की मूल सूची ऑब्जेक्ट में संग्रहीत वाक्य (के रूप में जाना जाता है str पायथन 3 में)
एक एकल पाठ फ़ाइल के रूप में (छोटी या बड़ी हो सकती है)
एकाधिक पाठ फ़ाइलें
Gensim का उपयोग करके एक शब्दकोश बनाना
जैसा कि चर्चा की गई है, गेंसिम में, शब्दकोश में सभी शब्दों की मैपिंग होती है, उर्फ टोकन अपनी विशिष्ट पूर्णांक आईडी में होता है। हम एक या एक से अधिक पाठ फ़ाइलों (पाठ की कई पंक्तियों वाली पाठ फ़ाइल) से वाक्यों की सूची से एक शब्दकोश बना सकते हैं। तो, पहले वाक्यों की सूची का उपयोग करके शब्दकोश बनाने की शुरुआत करते हैं।
वाक्य की सूची से
निम्नलिखित उदाहरण में हम वाक्यों की सूची से शब्दकोश बनाने वाले हैं। जब हमारे पास वाक्यों की सूची होती है या आप कई वाक्य कह सकते हैं, तो हमें प्रत्येक वाक्य को शब्दों की सूची में बदलना चाहिए और ऐसा करने के लिए बहुत ही सामान्य तरीकों में से एक है।
कार्यान्वयन उदाहरण
सबसे पहले, आवश्यक और आवश्यक पैकेजों को निम्नानुसार आयात करें -
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 फ़ाइल लाइन को लाइन से पढ़ेगा और एक बार में एक लाइन का उपयोग करके प्रोसेस करेगा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)
एकाधिक पाठ फ़ाइलों से
अब कई फ़ाइलों से शब्दकोश बनाते हैं, यानी एक ही निर्देशिका में एक से अधिक पाठ फ़ाइल सहेजी गई हैं। इस उदाहरण के लिए, हमने तीन अलग-अलग पाठ फ़ाइलें बनाई हैंfirst.txt, second.txt तथा third.txtपाठ फ़ाइल (doc.txt) से तीन पंक्तियों वाले, हमने पिछले उदाहरण के लिए उपयोग किया था। इन तीनों टेक्स्ट फ़ाइलों को एक डायरेक्टरी नाम से सेव किया गया हैABC।
कार्यान्वयन उदाहरण
इसे कार्यान्वित करने के लिए, हमें एक ऐसी विधि के साथ एक वर्ग को परिभाषित करने की आवश्यकता है जो निर्देशिका (एबीसी) में सभी तीन पाठ फ़ाइलों (प्रथम, द्वितीय और तृतीय) के माध्यम से पुनरावृति कर सकती है और शब्द टोकन की संसाधित सूची प्राप्त कर सकती है।
नाम की कक्षा को परिभाषित करते हैं 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।
अगले चरण भी वैसे ही हैं जैसे हमने पिछले उदाहरणों में दिए थे। कोड की अगली पंक्ति तीन पाठ फ़ाइलों वाली निर्देशिका का उपयोग करके जेनसिम निर्देशिका बनाएगी -
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 शब्दकोश लोड हो रहा है
जेनसिम अपने मूल निवासी का समर्थन करते हैं save() डिस्क में शब्दकोश को बचाने के लिए विधि और load() डिस्क से वापस शब्दकोश लोड करने की विधि।
उदाहरण के लिए, हम निम्नलिखित स्क्रिप्ट की मदद से शब्दकोश को बचा सकते हैं -
Gensim.corpora.dictionary.save(filename)
#provide the path where you want to save the dictionary।
इसी तरह, हम लोड () पद्धति का उपयोग करके सहेजे गए शब्दकोश को लोड कर सकते हैं। निम्नलिखित स्क्रिप्ट ऐसा कर सकती है -
Gensim.corpora.dictionary.load(filename)
#provide the path where you have saved the dictionary.