Фрейм данных как источник данных в torchtext - PullRequest
0 голосов
/ 02 октября 2018

У меня есть датафрейм, который имеет две колонки (обзор и мнение).Я использую библиотеку pytorch и torchtext для предварительной обработки данных.Можно ли использовать dataframe в качестве источника для чтения данных из torchtext?Я ищу что-то похожее, но не

data.TabularDataset.splits(path='./data')

Я выполнил некоторую операцию (очистка, измените на требуемый формат) с данными, и окончательные данные находятся в кадре данных.

Если нетtorchtext, какой другой пакет вы бы предложили, который помог бы в предварительной обработке текстовых данных, представленных в данных.Я не мог ничего найти в Интернете.Любая помощь будет великолепна.

1 Ответ

0 голосов
/ 05 октября 2018

Адаптация классов Dataset и Example из torchtext.data

from torchtext.data import Field, Dataset, Example
import pandas as pd

 class DataFrameDataset(Dataset):
     """Class for using pandas DataFrames as a datasource"""
     def __init__(self, examples, fields, filter_pred=None):
         """
         Create a dataset from a pandas dataframe of examples and Fields
         Arguments:
             examples pd.DataFrame: DataFrame of examples
             fields {str: Field}: The Fields to use in this tuple. The
                 string is a field name, and the Field is the associated field.
             filter_pred (callable or None): use only exanples for which
                 filter_pred(example) is true, or use all examples if None.
                 Default is None
         """
         self.examples = examples.apply(SeriesExample.fromSeries, args=(fields,), axis=1).tolist()
         if filter_pred is not None:
             self.examples = filter(filter_pred, self.examples)
         self.fields = dict(fields)
         # Unpack field tuples
         for n, f in list(self.fields.items()):
             if isinstance(n, tuple):
                 self.fields.update(zip(n, f))
                 del self.fields[n]

 class SeriesExample(Example):
     """Class to convert a pandas Series to an Example"""

     @classmethod
     def fromSeries(cls, data, fields):
         return cls.fromdict(data.to_dict(), fields)

     @classmethod
     def fromdict(cls, data, fields):
         ex = cls()

         for key, field in fields.items():
             if key not in data:
                 raise ValueError("Specified key {} was not found in "
                 "the input data".format(key))
             if field is not None:
                 setattr(ex, key, field.preprocess(data[key]))
             else:
                 setattr(ex, key, data[key])
    return ex

Затем, если у вас есть два набора данных под рукой train_df, valid_df, просто загрузите их в объект набора данныхс:

train_ds = DataFrameDataset(train_df, fields)
valid_ds = DataFrameDataset(valid_df, fields)
...