Calculer la fréquence d'apparition de tous les n-grammes

Fermé
Ihab25 Messages postés 4 Date d'inscription jeudi 2 juillet 2015 Statut Membre Dernière intervention 22 novembre 2015 - 22 nov. 2015 à 15:26
FeelZoR Messages postés 78 Date d'inscription vendredi 30 octobre 2015 Statut Membre Dernière intervention 18 août 2016 - 25 nov. 2015 à 14:20
Bonjour chers programmeur,
Je suis débutant en programmation et en ce moment j'essaye de réaliser les consignes suivantes:

- Lire le contenu du fichier dans une liste,
- Demander à l'utilisateur d'entrer un entier n compris entre 2 et 5,
- Calculer la fréquence d'apparition de tous les n-grammes du corpus en utilisant les dictionnaires,
- Afficher la liste des n-grammes par ordre décroissant des fréquences.

SANS UTILISER NLTK


#-*- coding:"utf-8" -*-
import re
import codecs

try :
corpus = codecs.open("corpus-one-sentence-per-line.txt",mode = "r")
except IOError :
print "corpus-one-sentence-per-line.txt non trouve"

corpus_data = []
bigrams = {}
trigrams= {}
quadrigrams= {}
cinqgrams= {}

word = ''

for line in corpus :
wordlist = re.findall(r"[\w']*",line)
for word in wordlist :
if word is not '' :
corpus_data.append(word)
corpus.close()

while True :
n= raw_input("Tapez un nombre entre 2 et 5 !")
try :
n = int(n)
break
except ValueError:
print "Merci de saisir seulement les nombres entre 2 et 5"

if n == 2:
for i in range(len(corpus_data)) :
word = corpus_data[i]
try :
bigrams[(word,corpus_data[i+1])] += 1
except KeyError :
bigrams[(word,corpus_data[i+1])] = 1
except IndexError :
"done"

_freq_bigrams = bigrams.items()
freq_bigrams = sorted(_freq_bigrams, key = lambda x: x[1])[::-1]



if n == 3:
for i in range(len(corpus_data)) :
word = corpus_data[i]
try :
trigrams[(word,corpus_data[i+1], corpus_data[i+1])] += 1
except KeyError :
trigrams[(word,corpus_data[i+1], corpus_data[i+1])] = 1
except IndexError :
"done"

_freq_trigrams = trigrams.items()
freq_trigrams = sorted(_freq_trigrams, key = lambda x: x[1])[::-1]

for trigram,freq in freq_trigrams :
if freq >= seuil:
print "Trigrame :", trigram, " | frequence :", freq

if n== 4:
for i in range(len(corpus_data)) :
word = corpus_data[i]
try :
qudrigrams[(word,corpus_data[i+1], corpus_data[i+1],corpus_data[i+1] )] += 1
except KeyError :
quadrigrams[(word,corpus_data[i+1], corpus_data[i+1], corpus_data[i+1])] = 1
except IndexError :
"done"

_freq_quadrigrams = quadrigrams.items()
freq_quadrigrams = sorted(_freq_quadrigrams, key = lambda x: x[1])[::-1]

for quadrigram,freq in freq_quadrigrams :
if freq >= seuil:
print "Quadrigrame :", quadrigram, " | frequence :", freq


if n == 5:
for i in range(len(corpus_data)) :
word = corpus_data[i]
try :
cinqgrams[(word,corpus_data[i+1], corpus_data[i+1],corpus_data[i+1] )] += 1
except KeyError :
cinqgrams[(word,corpus_data[i+1], corpus_data[i+1], corpus_data[i+1])] = 1
except IndexError :
"done"

_freq_cinqgrams = cinqgrams.items()
freq_cinqgrams = sorted(_freq_cinqgrams, key = lambda x: x[1])[::-1]

for cinqgram,freq in freq_cinqgrams :
if freq >= seuil:
print "Cinqgrame :", cinqgram, " | frequence :", freq











pour l'instant mon script n'affiche rien et j'arrive pas à trouver le problème,

Je vous remercie pour votre aide

1 réponse

FeelZoR Messages postés 78 Date d'inscription vendredi 30 octobre 2015 Statut Membre Dernière intervention 18 août 2016 4
25 nov. 2015 à 14:20
Bonjour

print est une fonction. Et donc, pour afficher un texte avec print, tu dois utiliser des parenthèses, comme ceci :
print("Texte")

Bonne journée
0