'' ' 文本序列化 ''' クラスWordSequence(): UNK_TAG = "<UNK>" PAD_TAG = "<PAD>" UNK = 1つの PAD = 0 デフ__init __(自己): self.dict = { self.UNK_TAG:自己.UNK、 self.PAD_TAG:self.PAD } self.count = {} DEF(自己、文)フィット: '' ' 统计词频 :PARAM文: :リターン :''' 文章中の単語のための: self.count [単語] = self.count.get(ワード、0)+1 デフbuild_vocab(自己、min_count = 0、MAX_COUNT =なし、max_features =なし ): ""」max_features =なし): 建設辞書基準に基づいて、 :PARAM min_count:最小词频 :PARAM MAX_COUNT:最大词频 :PARAM max_features:最大词语数 :リターン :""」 min_countがNoneでない場合: self.count = {単語:単語のカウントは、(self.count.itemsでカウント)カウント> min_count}もし MAX_COUNTがNoneでない場合: self.count = {単語:単語のカウント、(self.count.itemsでカウント)であれば、カウント<MAX_COUNT} max_featuresがNoneでない場合: #排序 self.count =辞書(ソート(self.count.items()、ラムダX:X [-1]、逆=真):max_features]) 単語のself.countで: self.dict [単語] = LEN(self.dict)#每次単語对应一个数字 #把dictの进行翻转 self.inverse_dict = dictの(ZIP(self.dict.valuesは()、self.dict.keys())) DEF変換(自己、文、MAX_LEN =なし): '' ' デジタルへの文シーケンス :PARAM文: :リターン: '' ' IF LEN(文)> MAX_LEN: 文=文[:MAX_LEN] 他: 文=文+ [self.PAD_TAG] *(LEN-MAX_LEN(文)) リターン[セルフ。文章中のIのためのdict.get(I ,. 1)] DEFのinverse_transform(セルフ、が入射): "" " シーケンス内の文字数 :PARAMが入射: :リターン: " "" リターン[I INが入射用self.inverse_dict.get(I、 "<UNK>")] デフ__len __(自己): リターンでlen(self.dict) の場合__name__ == '__main__': 文= [[ "今天"、 "天气"、 "很"、 "好"]、 [ "今天"、 "去" 、 "吃"、 "什么"]] WS = WordSequence() 文のための文章で: ws.fit(文) ws.build_vocab(min_count = 0) プリント(ws.dict) RET = ws.transform([ "好" 、 "热"、 "呀"、 "呀"、 "呀"、 "呀"、 "呀"、 "呀"、 "呀"]、MAX_LEN = 5) プリント(RET) RET = ws.inverse_transform(RET) 印刷(RET)
コーパス直列化および保存
word_sequenceインポートWordSequenceからの データセットのインポートget_dataloaderのから 輸入ピクルス tqdm輸入tqdmからの 場合__name__ == '__main__': WS = WordSequence() train_data = get_dataloader(真) TEST_DATA = get_dataloader(偽) レビューのために、tqdmのラベル(train_data、合計= LEN(train_data)): :レビューにおけるレビューのために (レビュー)ws.fit :レビューのために、tqdmのラベル(TEST_DATA、合計= lenは(TEST_DATA)) レビューでのレビューのために: ws.fit(レビュー) ws.build_vocab() 印刷(LEN(WS)) pickle.dump(WS、オープン( "./モデル/ ws.pkl"))