首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dataframe作为torchtext中的数据源

Dataframe作为torchtext中的数据源
EN

Stack Overflow用户
提问于 2018-10-02 12:33:12
回答 2查看 5.6K关注 0票数 8

我有一个数据帧,它有两列(评论和情感)。我使用pytorch和torchtext库来预处理数据。是否可以使用dataframe作为源来读取torchtext中的数据?我正在寻找类似的东西,但不是

代码语言:javascript
复制
data.TabularDataset.splits(path='./data')

我已经对数据执行了一些操作(清理,更改为所需的格式),最终数据在数据帧中。

如果不是torchtext,您建议的其他什么包可以帮助预处理datarame中的文本数据。我在网上找不到任何东西。任何帮助都是最好的。

EN

回答 2

Stack Overflow用户

发布于 2018-10-05 06:01:53

torchtext.data改编DatasetExample

代码语言:javascript
复制
    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

然后,首先使用torchtext.data字段定义fields。例如:

代码语言:javascript
复制
    TEXT = data.Field(tokenize='spacy')
    LABEL = data.LabelField(dtype=torch.float)
    TEXT.build_vocab(train, max_size=25000, vectors="glove.6B.100d") 
    LABEL.build_vocab(train)
    fields = { 'sentiment' : LABEL, 'review' : TEXT }

在简单地加载数据帧之前:

代码语言:javascript
复制
    train_ds = DataFrameDataset(train_df, fields)
    valid_ds = DataFrameDataset(valid_df, fields)
票数 13
EN

Stack Overflow用户

发布于 2020-10-11 17:30:51

谢谢杰弗里。

查看torchtext.data.field的源代码

https://pytorch.org/text/_modules/torchtext/data/field.html

看起来'train‘参数需要已经是一个数据集,或者是某个可迭代的文本数据源。但是,考虑到我们现在还没有创建数据集,我猜您只传入了数据帧中的文本列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52602071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档