2016-05-03 17 views
0
from nltk.tokenize import sent_tokenize, word_tokenize, RegexpTokenizer 
fileName = input("Enter file name: ") 
f = open(fileName) 
raw = f.read() 


tokenizer = RegexpTokenizer(r'\w+') 

diese Interpunktion auslässt, und hält nur Worte print (tokenizer.tokenize (roh)) // diese druckt alle Wörter print (sent_tokenize (raw))Wie nur Worte Ausgabe, die drei Buchstaben oder mehr mit nltk

print('number of sentences equal',len(sent_tokenize(raw))) 
print('number of words equal',len(tokenizer.tokenize(raw))) 


average =(len(tokenizer.tokenize(raw))/len(sent_tokenize(raw))) 
print('average word per senetnces eqauls',average) 

Antwort

0

ich vermute, Sie suchen etwas wie

long_words = [wrd for wrd in tokenizer.tokenize(raw) if len(wrd) > 2] 

Wenn Sie gleichwertige mehrzeiligen für Schleifen leichter zu folgen, um die Liste Verständnis oben ist zu finden :

long_words = [] 
for wrd in tokenizer.tokenize(raw): 
    if len(wrd) > 2: 
     long_words.append(wrd) 

Wenn Sie 3 oder mehr Buchstaben in einem präzisen Sinne freuen (dh Zahlen nicht) dann, wenn die Klausel kann sein:

len([chr for chr in wrd if chr.isalpha()]) > 2 

Und schließlich wollen, wenn Sie erfassen Wörter mit 3 oder mehr Zeichen, dann können Sie r'r\w+'-r'\w{3,}'

1

ändern Als @bkm Antwort Sie diese verwenden, wies darauf hin, können:

long_words = [wrd for wrd in tokenizer.tokenize(raw) if len(wrd) >= 3] 

Aber wenn das, was Sie wollen, ist Wörter zu entfernen, wie „und“, „eine“, „wenn“, „die“, usw. Sie sollten sie als Stoppwörter filtern:

from nltk.corpus import stopwords 

sw = stopwords.words('english') 
# sw will contain a list of stopwords (and, the, unless, about, etc.) 
# filter them out like this: 
tokens = [t for t in tokenizer.tokenize(raw) if t not in sw]