Я пытаюсь получить частоты слов для терминов в пределах каждого твита, содержащегося в кадре данных. Это мой код:
import pandas as pd
import numpy as np
import nltk
import string
import collections
from collections import Counter
nltk.download('stopwords')
sw= set(nltk.corpus.stopwords.words ('english'))
punctuation = set (string.punctuation)
data= pd.read_csv('~/Desktop/tweets.csv.zip', compression='zip')
print (data.columns)
print(data.text)
data['text'] = [str.lower () for str in data.text if str.lower () not in sw and str.lower () not in punctuation]
print(data.text)
data["text"] = data["text"].str.split()
data['text'] = data['text'].apply(lambda x: [item for item in x if item not in sw])
print(data.text)
data['text'] = data.text.astype(str)
print(type(data.text))
tweets=data.text
data['words']= tweets.apply(nltk.FreqDist(tweets))
print(data.words)
А это моя ошибка и трассировка:
Имя: текст, длина: 14640, dtype: object Traceback (последний вызов был последним):
Файл "", строка 1, в файле запуска ('C: / Users / leska / .spyder-py3 / untitled1.py', wdir = 'C: / Users / leska / .spyder -py3 ')
Файл "C: \ Users \ leska \ Anaconda3 \ lib \ site-packages \ spyder_kernels \ customize \ spydercustomize.py", строка 827, в исполняемом файле исполняемого файла (имя файла, пространство имен)
Файл "C: \ Users \ leska \ Anaconda3 \ lib \ site-packages \ spyder_kernels \ customize \ spydercustomize.py", строка 110, в execfile exe c (компилировать (f.read () , имя файла, 'exe c'), пространство имен)
Файл "C: / Users / leska / .spyder-py3 / untitled1.py", строка 30, в данных ['words'] = tweets.apply (nltk.FreqDist (tweets))
Файл "C: \ Users \ leska \ Anaconda3 \ lib \ site-packages \ pandas \ core \ series.py", строка 4018, в применить возврат self.aggregate (весело c, * args, ** kwds)
Файл "C: \ Users \ leska \ Anaconda3 \ lib \ site-pa ckages \ pandas \ core \ series.py ", строка 3883, совокупный результат, how = self._aggregate (fun c, * args, ** kwargs)
File" C: \ Users \ leska \ Anaconda3 \ lib \ site-packages \ pandas \ core \ base.py ", строка 506, в _aggregate result = _agg (arg, _agg_1dim)
File" C: \ Users \ leska \ Anaconda3 \ lib \ site-packages \ pandas \ core \ base.py ", строка 456, в результате _agg [fname] = fun c (fname, agg_how)
File" C: \ Users \ leska \ Anaconda3 \ lib \ site-packages \ pandas \ core \ base.py ", строка 440, в _agg_1dim возвращает colg.aggregate (как, _level = (_ level или 0) + 1)
File" C: \ Users \ leska \ Anaconda3 \ lib \ site-packages \ pandas \ core \ series.py ", строка 3902, в совокупном результате = fun c (self, * args, ** kwargs)
TypeError: объект 'int' не может быть вызван
Я проверил, что тип data.text является серией Pandas.
Я пытался найти решение ранее я думал, что это работает, что использует токенизацию и создание списка слов, чтобы получить количество слов, но это вызвала распределение частот для всех твитов, а не каждого. Это был код, который я попробовал, основываясь на моем предыдущем вопросе:
import pandas as pd
import numpy as np
import nltk
import string
import collections
from collections import Counter
nltk.download('stopwords')
sw= set(nltk.corpus.stopwords.words ('english'))
punctuation = set (string.punctuation)
data= pd.read_csv('~/Desktop/tweets.csv.zip', compression='zip')
print (data.columns)
print (len(data.tweet_id))
tweets = data.text
test = pd.DataFrame(data)
test.column = ["text"]
# Exclude stopwords with Python's list comprehension and pandas.DataFrame.apply.
test['tweet_without_stopwords'] = test['text'].apply(lambda x: ' '.join([word for word in x.split() if word not in (sw) and word for word in x.split() if word not in punctuation]))
print(test)
chirps = test.text
splitwords = [ nltk.word_tokenize( str(c) ) for c in chirps ]
allWords = []
for wordList in splitwords:
allWords += wordList
allWords_clean = [w.lower () for w in allWords if w.lower () not in sw and w.lower () not in punctuation]
tweets2 = pd.Series(allWords)
words = nltk.FreqDist(tweets2)
Мне действительно нужен термин, и он рассчитывает на каждый твит, и я поставлен в тупик как к тому, что я делаю не так.