R Dataframe 列到 Python 中的较小尺寸列表

问题描述

我正在处理一个 1006150 行和 3 列的数据框,其中每一行都包含一个维基百科资源的摘要

>>> print(df)
                                individual                                           abstract               type
0                       -ismist_Recordings  "-ismist Recordings was founded in 1992 as -is...        RecordLabel
1                          –30–_(The_Wire)  ""–30–" is the series finale of the HBO origin...  TelevisionEpisode
2                                      !!!  "!!! is a dance-punk band that formed in Sacra...               Band
3                              !!!_(album)  "!!! is the eponymous debut studio album by ro...              Album
4                     !Arriba!_La_Pachanga  "!Arriba! La Pachanga is an album by Mongo San...              Album

目标是对抽象列进行矢量化以提供文本模型。

问题是,在 R 中,当我尝试获取摘要列表以执行此转换时,我以一个大的变量(大约 800 MB)结束,这会导致用完当我尝试运行矢量化器时的内存。我已经从 superml 包中尝试了 quanteda 的 dfm() 和 TfIdfVectorizer。使用 quanteda 我得到了一个大小为 2 Gb 的 dfm(太大而无法训练模型)并且 superml 包抛出了内存不足错误

> df <- read.csv(file="t.csv",stringsAsFactors = F)
> abstracts_list <- df$abstract
> object.size(abstracts_list)
806675688 bytes
> library("superml")
Loading required package: R6
> tf <- TfIdfVectorizer$new()
> tf$fit_transform(abstracts_list)
Error: no se puede ubicar un vector de tamaño  7822.6 Gb

奇怪的是,在python中我没有这个问题,加载数据并提取摘要列表后,变量重约8 MB

import pandas as pd
import sys
df = pd.read_csv("t.csv")
train_data = df['abstract'].tolist()
sys.getsizeof(train_data)
>>> sys.getsizeof(df['abstract'])
1093787258
>>> sys.getsizeof(train_data)
8049256

似乎在python中,使用numpy.ndarray.tolist将列转换为列表可以大大减少大小(R=800MB,Py=8MB),R中是否有类似的方法可以让我转换将数据框的列转换为较小尺寸的列表?

注意:在 python 和 R 脚本中,我使用了相同的 csv 文件。 注 2:与 Python 中的 R 不同,我可以毫无问题地使用 TfidfVectorizer (sklearn.feature_extraction.text.TfidfVectorizer)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)