Python/Pandas聚合与NLTK相结合

2024-10-01 13:27:00 发布

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

我想对包含Twitter消息的数据集进行一些文本处理。到目前为止,我能够将数据(.CSV)加载到Pandas数据帧中,并通过(自定义)列“timestamp”对其进行索引。在

df = pandas.read_csv(f)
df.index = pandas.to_datetime(df.pop('timestamp'))

看起来有点像这样:

^{pr2}$

我可以创建一个只包含文本的新对象(系列):

texts = pandas.Series(df['text'])

这就产生了:

2015-06-02 14:50:54    Business Update Meer cruiseschepen dan ooit in...
2015-06-02 14:50:53    RT @ProvincieNH: Provincie maakt Markermeerdij...
2015-06-02 14:50:53    Amsterdam - Nieuwe flitspaal Wibautstraat: In ...
2015-06-02 14:50:53    Amsterdam - Nieuwe flitspaal Wibautstraat http...
2015-06-02 14:50:53    Lugar secreto em Amsterdam: Begijnhof // Hidde...
Name: text, Length: 49570

1。这个新对象是否与我的初始df变量的类型(dataframe)相同,只是列/行不同?

现在,与nltktookit一起,我可以使用这个tokenize字符串:

for w in words:
    print(nltk.word_tokenize(w))

这将迭代数组,而不是将“text”列映射到多列“words”数组。2。我该怎么做,而且我又如何计算每个单词的出现次数?

我知道有一个unique()方法可以用来创建一个不同的单词列表。但是,我需要一个额外的列,它是数组的计数,我一开始就无法产生。:)3。或者,下一步“计算”这些单词的出现次数是grouping

编辑。3: 我需要“CountVectorizer”,谢谢EdChum

documents = df['text'].values

vectorizer = CountVectorizer(min_df=0, stop_words=[])
X = vectorizer.fit_transform(documents)
print(X.toarray())

我的主要目标是统计每个单词的出现次数并选择前X结果。我觉得我在正确的轨道上,但我不能得到最后的正确步骤。。在


Tags: 数据对象textinpandasdf数组单词
1条回答
网友
1楼 · 发布于 2024-10-01 13:27:00

基于EdChums的评论,这里有一种从CountVectorizer获取(我假设是全局)字数的方法:

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
vect= CountVectorizer()

df= pd.DataFrame({'text':['cat on the cat','angel eyes has','blue red angel','one two blue','blue whales eat','hot tin roof','angel eyes has','have a cat']\
              ,'class': ['a','a','a','a','c','c','b','e']})

X = vect.fit_transform(df['text'].values)
y = df['class'].values

CountVectoriser返回的稀疏矩阵转换为密集矩阵,并将其和特性名称传递给dataframe构造函数。然后将帧转置并沿着axis=1求和得到每个单词的总和:

^{pr2}$

如果您只关心单词的频率分布,请考虑使用Freq Distfrom{}:

import nltk
import itertools
from nltk.probability import FreqDist
texts = ['cat on the cat','angel eyes has','blue red angel','one two blue','blue whales eat','hot tin roof','angel eyes has','have a cat']
texts = [nltk.word_tokenize(text) for text in texts]
# collapse into a single list
tokens = list(itertools.chain(*texts))

FD =FreqDist(tokens)

相关问题 更多 >