python - 从文件中训练 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)
'
解决方案
嗯......在写下来并重新考虑之后......我想我解决了我自己的问题。如果我错了,请纠正我:
要遍历 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)
推荐阅读
- c# - UWP VisualTreeHelper.GetParent() 返回 null
- android - 调用异步任务和 onPostExecute 后如何绘制地图?
- javascript - 如何从 2 个集合 nodejs 和 mongodb 中获取关系信息
- android - 比较图像中的两个对象
- php - 如何将会话变量的时间更长?
- android - 如何从 Google 语音助手访问我的 Android 应用程序
- ios - 用于屏幕设计的像素到点
- mongodb - 重启MongoDB时出错
- matlab - 无法连接到 MATLAB 中的 COM 端口
- mysql - mysql根据时间间隔查询数据