Sklearn CountVectoriz的Python访问标签

2024-09-19 23:45:39 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我清洗后的数据:

    number  summary             cleanSummary
0   1-123   he loves ice cream  love ice cream
1   1-234   she loves ice       love ice
2   1-345   i hate avocado      hate avocado
3   1-123   i like skim milk    like skim milk

如您所见,有两个记录具有相同的number。现在我将创建并装配矢量器。在

^{pr2}$

现在我要改变。在

freq = cv.transform(df['cleanSummary'])

现在如果我看看freq。。。在

freq = sum(freq).toarray()[0]
freq = pd.DataFrame(freq, columns=['frequency'])
freq

    frequency
0   1
1   1
2   1
3   2
4   1
5   2
6   1
7   1

…似乎没有一种逻辑方法来访问原始的number。我已经尝试过遍历每一行的方法,但是由于每个number可能会有多个摘要,所以这会遇到问题。使用分组数据流的循环。。。在

def extractFeatures(groupedDF, textCol):
    features = pd.DataFrame()
    for id, group in groupedDF:
           freq = cv.transform(group[textCol])
           freq = sum(freq).toarray()[0]
           freq = pd.DataFrame(freq, columns=['frequency'])
           dfinner = pd.DataFrame(cv.get_feature_names(), columns=['ngram'])
           dfinner['number'] = id
           dfinner = dfinner.join(freq)
           features = features.append(dfinner)
    return features

…很有效,但性能很差(即,用一个句子长度处理45000个文档需要12个小时)。在

如果我改变

freq = sum(freq).toarray()[0]

freq = freq.toarray()

我得到每个文档的每个ngram的频率数组。这很好,但是它不允许我将列表数组推送到数据帧中。我仍然无法访问nunmber。在

如何访问每个ngram的原始标签number,而不在分组df上循环?我想要的结果是:

number    ngram    frequency
1-123     love     1
1-123     ice      1
1-123     cream    1
1-234     love     1
1-234     ice      1
1-345     hate     1 
1-345     avocado  1
1-123     like     1  
1-123     skim     1 
1-123     milk     1

编辑:这有点像是对这个问题的重新审视:Convert CountVectorizer and TfidfTransformer Sparse Matrices into Separate Pandas Dataframe Rows。然而,在实现了答案中描述的方法之后,我面临着一个大型语料库的内存问题,因此它似乎无法扩展。在


Tags: numberdataframelikepdfeaturesfreqfrequencycream
1条回答
网友
1楼 · 发布于 2024-09-19 23:45:39
freq = cv.fit_transform(df.cleanSummary)
dtm = pd.DataFrame(freq.toarray(), columns=cv.get_feature_names(), index=df.number).stack()
dtm[dtm > 0]

number         
1-123   cream      1
        ice        1
        love       1
1-234   ice        1
        love       1
1-345   avocado    1
        hate       1
1-123   like       1
        milk       1
        skim       1
dtype: int64

相关问题 更多 >