将由文章组成的语料库标记为句子 Python

Tokenizing a corpus composed of articles into sentences Python

我想使用 Python 分析我的第一个深度学习模型,为此我必须首先将我的语料库(8807 篇文章)拆分成句子。我的语料库构建如下:

## Libraries to download
from nltk.tokenize import RegexpTokenizer
from nltk.corpus import stopwords
from nltk.stem.porter import PorterStemmer
from gensim import corpora, models
import gensim

import json
import nltk
import re
import pandas


appended_data = []


#for i in range(20014,2016):
#    df0 = pandas.DataFrame([json.loads(l) for l in open('SDM_%d.json' % i)])
#    appended_data.append(df0)

for i in range(2005,2016):
    if i > 2013:
        df0 = pandas.DataFrame([json.loads(l) for l in open('SDM_%d.json' % i)])
        appended_data.append(df0)
    df1 = pandas.DataFrame([json.loads(l) for l in open('Scot_%d.json' % i)])
    df2 = pandas.DataFrame([json.loads(l) for l in open('APJ_%d.json' % i)])
    df3 = pandas.DataFrame([json.loads(l) for l in open('TH500_%d.json' % i)])
    df4 = pandas.DataFrame([json.loads(l) for l in open('DRSM_%d.json' % i)])
    appended_data.append(df1)
    appended_data.append(df2)
    appended_data.append(df3)
    appended_data.append(df4)


appended_data = pandas.concat(appended_data)
# doc_set = df1.body

doc_set = appended_data.body

我正在尝试使用库 gensim.models 中的函数 Word2Vec.load_word2vec_format,但我必须先将我的语料库 (doc_set) 拆分成句子。

from gensim.models import word2vec
model = Word2Vec.load_word2vec_format(doc_set, binary=False)

有什么建议吗?

干杯

因此,Gensim 的 Word2Vec 需要这种格式的训练输入:sentences = [['first', 'sentence'], ['second', 'sentence']].

我假设您的文档包含不止一句话。您应该首先按句子拆分,您可以使用 nltk 进行拆分(您可能需要先下载模型)。然后标记每个句子并将所有内容放在一个列表中。

sent_detector = nltk.data.load('tokenizers/punkt/english.pickle')
sentenized = doc_set.body.apply(sent_detector.tokenize)
sentences = itertools.chain.from_iterable(sentenized.tolist()) # just to flatten

result = []
for sent in sentences:
    result += [nltk.word_tokenize(sent)]
gensim.models.Word2Vec(result)

不幸的是,我的 Pandas 不够好,无法以 "pandastic" 的方式执行所有操作。

非常注意 Word2Vec 的参数,正确选择它们会产生很大的不同。