2017-04-23 5 views
0

Ich verwende Stoppwörter und Satz Tokenizer, aber wenn ich gefilterten Satz drucke, gibt mir Ergebnis einschließlich Stoppwörter. Das Problem ist, dass Stoppwörter bei der Ausgabe nicht ignoriert werden. wie man Stoppwörter im Satz Tokenizer entfernt?Stoppwörter im Satz Tokenizer

userinput1 = input ("Enter file name:") 
    myfile1 = open(userinput1).read() 
    stop_words = set(stopwords.words("english")) 
    word1 = nltk.sent_tokenize(myfile1) 
    filtration_sentence = [] 
    for w in word1: 
     word = sent_tokenize(myfile1) 
     filtered_sentence = [w for w in word if not w in stop_words] 
     print(filtered_sentence) 

    userinput2 = input ("Enter file name:") 
    myfile2 = open(userinput2).read() 
    stop_words = set(stopwords.words("english")) 
    word2 = nltk.sent_tokenize(myfile2) 
    filtration_sentence = [] 
    for w in word2: 
     word = sent_tokenize(myfile2) 
     filtered_sentence = [w for w in word if not w in stop_words] 
     print(filtered_sentence) 

    stemmer = nltk.stem.porter.PorterStemmer() 
    remove_punctuation_map = dict((ord(char), None) for char in string.punctuation) 

    def stem_tokens(tokens): 
     return [stemmer.stem(item) for item in tokens] 

    '''remove punctuation, lowercase, stem''' 
    def normalize(text): 
     return stem_tokens(nltk.sent_tokenize(text.lower().translate(remove_punctuation_map))) 
    vectorizer = TfidfVectorizer(tokenizer=normalize, stop_words='english') 

    def cosine_sim(myfile1, myfile2): 
     tfidf = vectorizer.fit_transform([myfile1, myfile2]) 
     return ((tfidf * tfidf.T).A)[0,1] 
    print(cosine_sim(myfile1,myfile2)) 

Antwort

0

Ich denke, Sie können stopwords aus dem Satz nicht direkt entfernen. Sie müssen zuerst jedes Wort in Sätzen teilen oder nltk.word_tokenize verwenden, um Ihre Sätze zu teilen. Für jedes Wort prüfen Sie, ob es in der Liste der Stoppwörter steht. Hier ein Beispiel:

import nltk 
from nltk.corpus import stopwords 
stopwords_en = set(stopwords.words('english')) 

sents = nltk.sent_tokenize("This is an example sentence. We will remove stop words from this") 

sents_rm_stopwords = [] 
for sent in sents: 
    sents_rm_stopwords.append(' '.join(w for w in nltk.word_tokenize(sent) if w.lower() not in stopwords_en)) 

Ausgabe

['example sentence .', 'remove stop words'] 

Anmerkung, die Sie auch Interpunktion string.punctuation entfernen können.

import string 
stopwords_punctuation = stopwords_en.union(string.punctuation) # merge set together 
+0

wie zu verwenden string.punctuation? @titipata – Muhammad

+0

'import string' und' string.punctuation', dann können Sie 'stopwords_de.union (string.punctuation)'. – titipata

+0

ok ich versuche das zu implementieren. ein weiteres Problem. mein Code oben wird Kosinusähnlichkeit zwischen zwei Dokumenten geben, aber ich will, dass es den Ähnlichkeitssatz zwischen zwei Dokumenten zeigt .. wie kann ich sie drucken @ titipata – Muhammad