gpt4 book ai didi

pandas - 如何在 Pandas 数据框中查找列的 ngram 频率?

转载 作者:行者123 更新时间:2023-12-04 05:29:35 25 4
gpt4 key购买 nike

以下是我拥有的输入 Pandas 数据框。

enter image description here

我想找到unigrams和bigrams的频率。我期望的示例如下所示 enter image description here

如何使用 nltk 或 scikit 学习做到这一点?

我写了下面的代码,它接受一个字符串作为输入。如何将其扩展到系列/数据框?

from nltk.collocations import *
desc='john is a guy person you him guy person you him'
tokens = nltk.word_tokenize(desc)
bigram_measures = nltk.collocations.BigramAssocMeasures()
finder = BigramCollocationFinder.from_words(tokens)
finder.ngram_fd.viewitems()

最佳答案

如果你的数据是这样的

import pandas as pd
df = pd.DataFrame([
'must watch. Good acting',
'average movie. Bad acting',
'good movie. Good acting',
'pathetic. Avoid',
'avoid'], columns=['description'])

您可以使用 CountVectorizer包裹 sklearn :
from sklearn.feature_extraction.text import CountVectorizer
word_vectorizer = CountVectorizer(ngram_range=(1,2), analyzer='word')
sparse_matrix = word_vectorizer.fit_transform(df['description'])
frequencies = sum(sparse_matrix).toarray()[0]
pd.DataFrame(frequencies, index=word_vectorizer.get_feature_names(), columns=['frequency'])

这给了你:
                frequency
good 3
pathetic 1
average movie 1
movie bad 2
watch 1
good movie 1
watch good 3
good acting 2
must 1
movie good 2
pathetic avoid 1
bad acting 1
average 1
must watch 1
acting 1
bad 1
movie 1
avoid 1

编辑
fit只会“训练”你的向量化器:它会拆分你的语料库中的单词并用它创建一个词汇表。然后 transform可以采用新文档并根据向量化词汇表创建频率向量。

这里你的训练集是你的输出集,所以你可以同时做这两个 ( fit_transform )。因为您有 5 个文档,所以它会创建 5 个向量作为矩阵。你想要一个全局向量,所以你必须做一个 sum .

编辑 2

对于大数据帧,您可以使用以下方法加快频率计算:
frequencies = sum(sparse_matrix).data

关于pandas - 如何在 Pandas 数据框中查找列的 ngram 频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36572221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com