1
votes

Compter la fréquence des mots de tous les mots d'un fichier

J'ai un fichier texte, à partir duquel j'ai supprimé des symboles et des mots vides.

Je l'ai également tokenisé (divisé en une liste de tous les mots) au cas où les opérations seraient plus faciles avec une liste.

Je voudrais créer un fichier .csv avec des fréquences de tous les mots (format long) dans l'ordre décroissant. Comment pourrais-je m'y prendre?

J'ai pensé à parcourir la liste comme suit:

longData = pandas.DataFrame([], index=[], columns=['Frequency'])
for word in tokenizedFile:
    if word in longData.index:
         longData.loc[word]=longData.loc[word]+1
    else:
         wordFrame = pandas.DataFrame([1], index=[word])
         longData.append(wordFrame)

mais cela semble assez inefficace et inutile. P >


2 commentaires

Votre solution fonctionne?


Penser à voix haute ici mais je pense: words = list (set (toknizedFile)) , puis tokens = np.asarray (tokenizedFile) , puis vous itérez ( pour mot en mots: ) et calculez le nombre d'instances par mot num_instances = length (np.where (tokens == word)) Vous pouvez commencer à faire un dictionnaire ou un df pour stocker le nombre d'instances pour chaque mot


4 Réponses :


1
votes

Le compteur serait bien ici:

    from collections import Counter
    c = Counter(tokenizedFile)
    longData = pd.DataFrame(c.values(), index = c.keys(), columns=['Frequency'])


0 commentaires

0
votes

si votre texte est une liste de chaînes comme celles-ci ci-dessus:

from sklearn.feature_extraction import text


texts = [
        'this is the first text',
        'this is the secound text',
        'and this is the last text the have two word text'


        ]


#istantiate.
cv = text.CountVectorizer()



cv.fit(texts)


vectors = cv.transform(texts).toarray()

vous devrez explorer davantage les paramètres.


0 commentaires

0
votes

Vous pouvez utiliser Series.str.extractall () et Series.value_counts () . Supposons que file.txt est le chemin du fichier avec les textes supprimés, les symboles et les mots vides:

df_new = words_count.to_frame('words_count')

Le résultat ci-dessus words_count est une série qui vous pouvez convertir en dataframe par:

# read file into one column dataframe, the default column name is '0'
df = pd.read_csv('file.txt', sep='\n', header=None)

# extract words into rows and then do value_counts()
words_count = df[0].str.extractall(r'(\w+)')[0].value_counts()


0 commentaires

0
votes

Si quelqu'un a encore du mal avec cela, vous pouvez essayer la méthode suivante:

df = pd.DataFrame({"words": tokenizedFile.lower()})
value_count = pd.value_counts(df["words"])  # getting the count of all the words
# storing the words and its respective count in a new dataframe
# value_count.keys() are the words, value_count.values is the count
vocabulary_df = pd.DataFrame({"words": value_count.keys(), "count": value_count.values})

Ce que cela fait,

  1. prenez la liste des mots ( tokenizedFile ) et convertissez tous les mots en minuscules. Et puis, créez une colonne avec le titre mots et les données seront tous les mots du fichier.
  2. La variable value_count stockera le nombre de fois où chaque mot apparaît dans notre dataframe df en utilisant la méthode value_counts disponible pour les dataframes. Il le trie par défaut dans l'ordre décroissant du nombre.
  3. Notre dernière ligne de code crée un nouveau vocabulary_df qui stockera tous les mots et il compte bien dans un nouveau dataframe ( value_count est enregistré en tant que type Series). Ici, value_count.keys () a les mots, et value_count.values ​​ a le nombre de chaque mot.

J'espère que cela sera utile à quelqu'un le long de la ligne. :)


0 commentaires