Utilisation de FreqDist et écriture au format CSV

Sep 02 2020

J'essaie d'utiliser nltk et pandas pour trouver les 100 premiers mots d'un autre csv et les lister sur un nouveau CSV. Je suis capable de tracer les mots, mais lorsque j'imprime au format CSV, j'obtiens

word | count
  52 |    7       <- This is current CSV output

Je ne sais pas où je me trompe, je cherche des conseils.

Mon code est

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)

Je suppose que c'est ma ligne df3 mais pour la vie de moi, je ne peux pas lui faire afficher la bonne distribution en CSV

Ont également essayé

df3 = pd.DataFrame(fd_t100,columns=['word','count'])

Quelques exemples de contenu 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

Réponses

1 S3DEV Sep 03 2020 at 15:24

Voici. Le code est assez compressé, alors n'hésitez pas à développer si vous le souhaitez.

Tout d'abord, assurez-vous que le fichier source est en fait un fichier CSV (c.-à-d. Séparé par des virgules). J'ai copié / collé l'exemple de texte de la question dans un fichier texte et ajouté des virgules (comme indiqué ci-dessous).

Décomposition du code ligne par ligne:

  • Lisez le CSV dans un DataFrame
  • Extraire la textcolonne et aplatir en une chaîne de mots, et tokeniser
  • Tirez les 100 mots les plus courants
  • Ecrire les résultats dans un nouveau fichier CSV

Code:

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

Exemple d'entrée:

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

Production:

word,count
cost,2
generally,1
industry,1
may,1
affected,1
material,1
decrease,1
...