Usando FreqDist e escrevendo para CSV
Estou tentando usar nltk e pandas para encontrar as 100 palavras principais de outro csv e listá-las em um novo CSV. Consigo traçar as palavras, mas quando imprimo em CSV recebo
word | count
52 | 7 <- This is current CSV output
Não tenho certeza onde estou errando, procurando alguma orientação.
Meu código é
words= []
with open('SECParse2.csv', encoding = 'utf-8') as csvfile:
reader = csv.reader(csvfile)
next(reader)
freq_all = nltk.FreqDist()
for row in reader:
note = row[1]
tokens = [t for t in note.split()]
freq = nltk.FreqDist(tokens)
fd_t100 = freq.most_common(100)
freq_all.update(tokens)
freq_all.plot(100, cumulative=False)
df3 = pd.DataFrame(freq_all,columns=['word','count'], index=[1])
df3.to_csv("./SECParse3.csv", sep=',',index=False)
Suponho que seja minha linha df3, mas, por mais que eu tente, não consigo fazer com que exiba a distribuição correta em CSV
Também tentei
df3 = pd.DataFrame(fd_t100,columns=['word','count'])
Alguns exemplos de conteúdo de CSV2-
filename text
AAL_0000004515_10Q_20200331 generally industry may affected
AAL_0000004515_10Q_20200331 material decrease demand international air travel
AAPL_0000320193_10Q_2020032 february following initial outbreak virus china
AAP_0001158449_10Q_20200418 restructuring cost cost primarily relating early
Respostas
Aqui está. O código é bastante compactado, então sinta-se à vontade para expandir se desejar.
Primeiro, certifique-se de que o arquivo de origem seja realmente um arquivo CSV (ou seja, separado por vírgulas). Copiei / colei o texto de amostra da pergunta em um arquivo de texto e adicionei vírgulas (conforme mostrado abaixo).
Quebrando o código linha por linha:
- Leia o CSV em um
DataFrame - Extraia a
textcoluna e aplique-a em uma sequência de palavras e crie tokens - Extraia as 100 palavras mais comuns
- Grave os resultados em um novo arquivo CSV
Código:
import pandas as pd
from nltk import FreqDist, word_tokenize
df = pd.read_csv('./SECParse3.csv')
words = word_tokenize(' '.join([line for line in df['text'].to_numpy()]))
common = FreqDist(words).most_common(100)
pd.DataFrame(common, columns=['word', 'count']).to_csv('words_out.csv', index=False
Amostra de entrada:
filename,text
AAL_0000004515_10Q_20200331,generally industry may affected
AAL_0000004515_10Q_20200331,material decrease demand international air travel
AAPL_0000320193_10Q_2020032,february following initial outbreak virus china
AAP_0001158449_10Q_20200418,restructuring cost cost primarily relating early
Resultado:
word,count
cost,2
generally,1
industry,1
may,1
affected,1
material,1
decrease,1
...