2017-08-20 3 views
3

J'ai un document texte, j'utilise regex et nltk pour trouver en haut 5 les mots les plus communs de ce document. Je dois imprimer des phrases où ces mots appartiennent, comment je fais ça? De plus, je veux étendre cela à la recherche de mots communs dans plusieurs documents et à la restitution de leurs phrases respectives.Utilisez Python pour imprimer des phrases appartenant à la plupart des mots communs dans un document

import nltk 
import collections 
from collections import Counter 

import re 
import string 

frequency = {} 
document_text = open('test.txt', 'r') 
text_string = document_text.read().lower() 
match_pattern = re.findall(r'\b[a-z]{3,15}\b', text_string) #return all the words with the number of characters in the range [3-15] 

fdist = nltk.FreqDist(match_pattern) # creates a frequency distribution from a list 
most_common = fdist.max() # returns a single element 
top_five = fdist.most_common(5)# returns a list 

list_5=[word for (word, freq) in fdist.most_common(5)] 


print(top_five) 
print(list_5) 

sortie:

[('you', 8), ('tuples', 8), ('the', 5), ('are', 5), ('pard', 5)] 
['you', 'tuples', 'the', 'are', 'pard'] 

La sortie se produit le plus souvent des mots que je dois imprimer des phrases où ces mots appartiennent, comment puis-je faire cela?

Répondre

4

Bien qu'il ne tient pas compte des caractères spéciaux aux limites des mots comme votre code ne, ce qui suit serait un point de départ:

for sentence in text_string.split('.'): 
    if list(set(list_5) & set(sentence.split(' '))): 
     print sentence 

Nous avons d'abord parcourir les phrases, en supposant chaque phrase se termine par un . et le caractère . est nulle part ailleurs dans le texte. Par la suite, nous imprimons la phrase si le intersection de son ensemble de mots avec l'ensemble des mots dans votre list_5 n'est pas vide.

+0

comment supprimer des pièces supplémentaires, la sortie de votre code est:;} {\ levelnumbers \ » 01;} \ fi-360 \ li720 \ lin720} {\ listname;} \ listid1}} {\ * \ listoverridetable {\ listoverride \ listid1 \ listoverridecount0 \ ls1}} \ margl1440 \ margr1440 \ vieww14360 \ viewh11020 \ viewkind0 \ deftab720 \ f0 \ fs32 \ cf2 \ cb3 \ expnd0 \ expndtw0 \ kerning0 \ outl0 \ strokewidth0 \ strokec2 dans mes actualisations précédentes, auxquelles vous pouvez accéder à partir des liens de navigation en série en haut de cet article, j'ai parlé de deux importants concepts python que vous devez saisir pour avancer dans votre voyage d'apprentissage en python \ 'a0 \ –

+0

note rapide: Mon fichier texte commence comme suit: "Dans mes rafraîchissements précédents, auxquels vous pouvez accéder à partir des liens de navigation en série en haut de cet article, j'ai parlé à propos de deux concepts Python importants que vous devez saisir pour avancer dans votre parcours d'apprentissage Python." –

2

Vous devrez installer des données NLTK si vous ne l'avez pas déjà fait.

De http://www.nltk.org/data.html:

Exécutez l'interpréteur Python et tapez les commandes:

> >>> import nltk 
> >>> nltk.download() 

Une nouvelle fenêtre devrait ouvrir, montrant le NLTK Downloader. Cliquez sur le menu Fichier et sélectionnez Modifier Télécharger Répertoire.

Ensuite, installez le modèle punkt à partir de l'onglet des modèles. Une fois que vous avez que vous pouvez tokenizer toutes les phrases et extraire celles avec vos 5 mots comme tels:

sent_tokenize_list = nltk.sent_tokenize(text_string)  
for sentence in sent_tokenize_list: 
    for word in list_5: 
     if word in sentence: 
      print(sentence) 
+0

J'ai essayé, comment supprimer cette partie supplémentaire non nécessaire de la sortie: la sortie est:;} {\ levelnumbers \ '01;} \ fi-360 \ li720 \ lin720} {\ listname;} \ listid1}} { \ * \ listoverridetable {\ listoverride \ listid1 \ listoverridecount0 \ LS1}} \ margl1440 \ margr1440 \ vieww14360 \ viewh11020 \ viewkind0 \ deftab720 \ pard \ pardeftab720 \ sl512 \ SA520 \ partightenfactor0 \ f0 \ fs32 \ CF2 \ CB3 \ expnd0 \ expndtw0 \ kerning0 \ outl0 \ strokewidth0 \ strokec2 dans mes actualisations précédentes, auxquelles vous pouvez accéder à partir des liens de navigation en série en haut de cet article, j'ai parlé –

+1

est cette partie de sortie du fichier texte que vous chargez? –

+0

Mon fichier texte commence comme suit: "Dans mes rafraîchissements précédents, auxquels vous pouvez accéder depuis la série navigat Au début de cet article, j'ai parlé de deux concepts Python importants que vous devez saisir pour avancer dans votre parcours d'apprentissage Python. " –