首页 > 解决方案 > 从文件中训练 word2vec 模型流数据并标记为句子

问题描述

我需要处理大量txt文件来构建word2vec模型。现在,我的 txt 文件有点乱,我需要删除所有 ´ \n´ 换行符,从加载的字符串(txt 文件)中读取所有句子,然后标记每个句子以使用 word2vec 模型。

问题是:我无法逐行读取文件,因为有些句子不会在一行之后结束。因此,我使用 ´ nltk.tokenizer.tokenize()´,将文件拆分为句子。

我不知道如何将字符串列表转换为列表列表,其中每个子列表包含句子,同时通过生成器传递它。

还是我实际上需要将每个句子保存到一个新文件中(每行一个句子)以通过生成器传递它?

好吧,我的代码如下所示:'tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')

# initialize tokenizer for processing sentences

class Raw_Sentences(object):
    def __init__(self, dirname):
        self.dirname = dirname

    def __iter__(self):
        for file in file_loads: ## Note: file_loads includes directory name of files (e.g. 'C:/Users/text-file1.txt')
            with open(file,'r', encoding='utf-8') as t:     
               # print(tokenizer.tokenize(t.read().replace('\n', ' ')))           
                storage = tokenizer.tokenize(t.read().replace('\n', ' '))
# I tried to temporary store the list of sentences to a list for an iteration
                for sentence in storage:
                    print(nltk.word_tokenize(sentence))
                    yield nltk.word_tokenize(sentence)´

所以目标是:加载文件1:' 'some messy text here. And another sentence''标记成句子' ['some messy text here','And another sentence']',然后将每个句子分成单词' [['some','messy','text','here'],['And','another','sentence']]'

加载文件 2:'some other messy text. sentence1. sentence2.'

并将句子输入 word2vec 模型: ´ sentences = Raw_Sentences(directory)´

' model = gensim.models.Word2Vec(sentences)'

标签: pythonstreamingnltkgensimword2vec

解决方案


嗯......在写下来并重新考虑之后......我想我解决了我自己的问题。如果我错了,请纠正我:

要遍历 nltk punkt 句子标记器创建的每个句子,必须将其直接传递给 for 循环:

def __iter__(self):
    for file in file_loads:
       with open(file,'r') as t:
           for sentence in tokenizer.tokenize(t.read().replace('\n',' ')):
                yield nltk.word_tokenize(sentence) 

与往常一样,还有其他选择 yield gensim.utils.simple_preprocess(sentence, deacc= True)

将其输入sentence = Raw_Sentences(directory) 构建一个正常工作的 Word2Vecgensim.models.Word2Vec(sentences)


推荐阅读