Генерация объектов с большими текстовыми данными без сбоев - PullRequest
0 голосов
/ 01 марта 2019

У меня есть два списка.Первый - это список из 10000 строк, которые представляют собой отдельные слова.Второй список 2 000 000 кортежей из 2 предметов.Первый элемент в каждом кортеже - это список токенизированных предложений.Второй элемент в кортеже - 1 или 0.

word_features = ['red', 'ball', 'keyword', 'else']
tuples_tokenized = [(['this', 'has', 'red', 'and', 'ball'], 1.0), (['this', 'has', 'one', 'keyword'], 0.0), (['I', 'am', 'now', 'done'], 0.0)]

Я сожалею, что не могу предоставить более чистый желаемый вывод, но я хотел бы создать pandas dataframe, где количество строк равноколичество кортежей во втором списке и количество столбцов равно количеству слов в первом списке.Я надеюсь, что после этого кадр данных можно будет заполнить единицами и нулями, не отличаясь от pd.get_dummies().Где 1 в строке [n, m] означает, что слово столбца m можно найти в токенизированном предложении кортежа в rom n.

name | binary | 'red' | 'ball' | 'keyword' | 'else'
['this', 'has', 'red', 'and', 'ball'] | 1.0 | 1 | 1 | 0 | 0
['this', 'has', 'one', 'keyword']     | 0.0 | 0 | 0 | 1 | 0
['I', 'am', 'now', 'done']            | 0.0 | 0 | 0 | 0 | 0

Поскольку я не знаю, как это реализовать, у меня естьвместо этого попытался создать список функций, которые я мог бы затем сформировать в строках кадра данных.Приведенный ниже набор функций документирует мои усилия, хотя из-за размера моего набора данных он умирает ~ 15% в работе.

import nltk

def find_features(document, word_features):
    words = set(document)
    features = {}
    for w in word_features:
        features[w] = (w in words)
    return features

def create_feature_set(tuples_tokenized, word_features, chunk_size=25):
    print('Number of tuples searched: %s' % len(tuples_tokenized))
    print('Number of words searching for: %s' % len(word_features))
    dt_start = datetime.datetime.now()
    print('Starting time:', dt_start)
    feature_sets = []
    i, total_chunks = 0, len([x for x in chunks(tuples_tokenized, chunk_size)])
    for chunk in chunks(tuples_tokenized, chunk_size):
        i += 1
        print('Chunk %s out of %s' % (i, total_chunks))
        print('Time elapsed:', datetime.datetime.now() - dt_start)
        for (text, post) in chunk:
            feature_set = find_features(text, word_features)
            feature_sets.append(feature_set)
    print('%s sets found' % len(feature_sets))
    return feature_sets

def chunks(l, n):
    """Yield successive n-sized chunks from l."""
    for i in range(0, len(l), n):
        yield l[i:i + n]

feature_sets=[]
feature_sets = create_feature_set(tuples_tokenized, word_features, chunk_size=10)

Есть ли способ для меня иначе разделить мои данные так, чтобы они моглибыть обработанным на моей машине, не будучи убитым или способ создания кадра данных, как я пытался проиллюстрировать выше?Интересно также, есть ли способ, которым я должен использовать массивы или сжатые матрицы, но я не знаю, как это реализовать.

Конечной мотивацией было бы использование наивных байесовских функций NLTK или sklearn, еслиэто помогает вообще.

...