删除自定义停止单词形成python中的短语

时间:2015-03-26 04:05:02

标签: python python-2.7 nlp stop-words

在我进一步处理输入之前,我试图从用户输入中删除某些短语和单词,并且在尝试这样做时,我遇到了“索引超出范围”错误并且完全卡住的问题。我该如何解决这个问题? 我将输入短语作为一个字符串,我将其转换为列表以比较每个单词,并将我的停用词作为预定义列表。
示例输入:
[ “好”, “你”, “知道”, “中”, “天气”, “是”, “可怕”]
[“你”,“知道”,“什么”,“我”,“意思是”,“如此”,“只是”,“转”,“”,“灯”,“开”]

#Gets user input and removes the selected stop words from it and returns a filtered phrase back.    
def stop_word_remover(phrase_list):

    stop_words_lst = ["yo", "so", "well", "um", "a", "the","you know", "i mean"]

    #initalize clean phrase string
    clean_input_phrase= ""

    #copying phrase_list into a new variable for stopword removal.
    Copy_phrase_list = list(phrase_list)

    #Cleanup loop

    for i in range(1,len(phrase_list)):
        has_stop_words = False

        for x in range(len(stop_words_lst)):
            has_stop_words = False

            #if one of the stop words matches the word passed by the first main loop      the  flag is raised.
            if (phrase_list[i-1]+" "+phrase_list[i]) == stop_words_lst[x].strip():
                has_stop_words = True    

            # this if statement adds the word of the phrase only if the flag is not raised thus making sure all the stop words are filtered out         
            if has_stop_words == True:
                Copy_phrase_list.remove(Copy_phrase_list[i-1])
                Copy_phrase_list.remove(Copy_phrase_list[i-1])

    #first for loop takes a individual words of the phrase given and makes a loop until the whole phrase goes through one word at a time
    for i in range(len(Copy_phrase_list)):
        #flag initialized for marking stop words
        has_stop_words = False

        #second loop takes all the stop words and compares them to the first word passed on by the first loop to sheck for a stop word
        for x in range(len(stop_words_lst)):
            #if one of the stop words matches the word passed by the first main loop the  flag is raised.
            if Copy_phrase_list[i] == stop_words_lst[x].strip():
            has_stop_words = True    

        # this if statement adds the word of the phrase only if the flag is not raised thus making sure all the stop words are filtered out        
        if has_stop_words == False:
            clean_input_phrase += str(Copy_phrase_list[i]) +" "


return clean_input_phrase

2 个答案:

答案 0 :(得分:4)

使用正则表达式替换函数。 用空字符串替换每个匹配。

stop_words_lst = ['yo', 'so', 'well', 'um', 'a', 'the', 'you know', 'i mean']
s = "you know what i mean so just turn the lights on"

import re
for w in stop_words_lst:
    pattern = r'\b'+w+r'\b'
    s = re.sub(pattern, '', s)
    print (s)

答案 1 :(得分:0)

您需要分开单词列表。一个应该是单个单词而另一个应该是短语。

single_word_list = ["yo", "so", "well", "um", "a", "the"]
phrase_list = ["you know", "i mean"]
for index, word in enumerate(Copy_phrase_list) :
    if word in single_word_lst:
        del Copy_phrase_list[index] 
    if word + " " + Copy_phrase_list[index+1] in phrase_list:
        del Copy_phrase_list[index] 
        del Copy_phrase_list[index+1] 
return " ".join(Copy_phrase_list) 

然后你需要将copy_phrase_list转换为字符串并返回它。