def get_texts(self): with file_read(self.input) as f: f.readline( ) # La première ligne qui contient les noms des colonnes for i, raw_line in enumerate(f): try: document = utils.Document(raw_line) except Exception: raise ValueError("La ligne n°%d n'est pas au bon format" % (i + 1)) yield document.get_tokens(self.stopwords)
if (os.path.isfile(bow_file)): raise IOError("Le corpus existe déjà sous forme matricielle", bow_file) # Les stopwords qui doivent être ignorés lors de la tokenization if args.stopwords: with open(args.stopwords) as f: stopwords = [line.rstrip() for line in f] else: stopwords = [] corpus = hc.HabeasCorpus(corpus_file, stopwords) # Suppression des mots pas assez/trop fréquents corpus.dictionary.filter_extremes(no_below=5, no_above=0.5) # Enregistrement du dictionnaire de mots corpus.dictionary.save_as_text(wordids_file) # Enregistrement du corpus au format bag-of-words corpora.mmcorpus.MmCorpus.serialize(bow_file, corpus, progress_cnt=1000) # Création d'un fichier qui à la ligne n°i affiche l'id du document corpus[i] with open(corpus_file) as f: o = open(docid_file, 'w') f.readline() for raw_line in f: doc = utils.Document(raw_line) o.write(doc.id + '\t' + doc.title + '\n') o.close()
# Chargement du modèle try: tfidfmodel = models.tfidfmodel.TfidfModel.load(tfidfmodel_path) except Exception: raise IOError( """Impossible de charger le fichier %s. Avez-vous bien appliqué le script tfidf ?""" % (tfidfmodel_path)) f = open(corpus_etranger) o = open(args.translate_file, 'w') for i, l in enumerate(f): # Pour chaque document, on récupère la traduction supposée et le score de proximité doc = utils.Document(l) trad, score = find_translation(doc.text, args.corpus_fr, index, dico, corpus, tfidfmodel) # Si le score est supérieur à 0.4, la traduction a de très fortes chances d'être la bonne if score >= 0.4: o.write(str(doc.id) + '\t' + str(trad) + '\n') # Si le score est compris entre 0.35 et 0.4, la traduction supposée est peut-être inexacte elif score >= 0.35 and score < 0.4: o.write(str(doc.id) + '\t' + str(trad) + '?\n') # En dessous de 0.35, le texte ne possède probablement pas de traduction dans le # corpus de référence else: o.write(str(doc.id) + '\t?\n')
else: stopwords = [] stopwords.extend(nltk.corpus.stopwords.words('french')) stopwords = set([utils.textimport(x) for x in stopwords]) with open(args.corpus_file) as f: tokens = [] for i, raw_document in enumerate(f): if i > 3000: # on cherche les bigrammes sur 3000 documents break print "Lecture document %d" % (i) doc = utils.Document(raw_document) doc.remove_text('\\\\n') doc.remove_text('\\r') text_tokens = [t for t in doc.get_text_tokens() if t not in stopwords] tokens.extend(text_tokens) bigram_measures = nltk.collocations.BigramAssocMeasures() finder = nltk.collocations.BigramCollocationFinder.from_words(tokens) finder.apply_freq_filter( 5 ) # supprime les bigrammes qui apparaissent moins de 5 fois dans le corpus bigrams = set(finder.above_score(bigram_measures.pmi, 5)) print "Bigrammes trouvés"