2015-03-16 3 views
0

Здесь я использую файл, который состоит из списка стоп-слов. Я хочу удалить все слова из текста.strip stopwords, беря стоп-слова из файла

def print_stopWords(self): 

    #infile = open("D:\Komal\MyPrograms\Pkg\PkgSubfolder\StopWords.txt", 'r') 
    stopwords =() 
    print '\nstopwords are-' 
    for line in open('D:\Komal\MyPrograms\Pkg\PkgSubfolder\StopWords.txt'): 
     stopwords += (line,) 

    print stopwords 
    return stopwords 


def strip_stopwords(self,text,stopword): 
    print '\n Text after removing all stopwords is --' 
    words = text.split() 
    text = [] 
    for word in words: 
     if word.lower() not in stopword: 
      text.append(word) 
    print u' '.join(text)  #'u' prefix allows you to write a unicode string literal 
    return text 
+2

Ваш вопрос не ясен. – niyasc

+0

Ваш вопрос непонятен. В чем проблема? Во всяком случае, для исполнения 'stopwords' shoud будет набор, а не list/tuple. – smci

+0

Связанный: [Являются ли python кортежи модифицируемыми?] (Http://stackoverflow.com/questions/9710093/are-python-tuples-modifiable) – smci

ответ

0

вопрос остается неясным (и вы должны показать весь код), но я думаю, что ваша основная проблема заключается в:

stopwords =() 

() используются для объявления кортежа, который неизменен, т.е. вы не можете изменить его содержимое после его определения. Вероятно, вы ищете список, словарь или набор (лучший в этом случае), все из которых могут содержать элементы, добавленные к ним (например, в вашем цикле for). Вы должны проверить учебник Python, чтобы узнать об этих базовых структурах данных.

+0

Я хочу прочитать список стоп-слов из файла и удалить эти слова из текста извлеченные из веб-страницы. –

+0

В основном, что вы делаете, правильно. В чем именно проблема, т. Е. Не компилирует ли ваш код, не сбой, неверны ли результаты? –

+0

Код не удаляет временные слова. –

0

Ваш вопрос непонятен. Единственной функциональной проблемой, которую я вижу, является stopwords - это кортеж, который неизменен, поэтому вы не можете добавить его, в отличие от списка.

В любом случае, для исполнения stopwords shoud be a set (/ dict), а не список/кортеж. Поиск набора O (1) вместо O (N).

def print_stopWords(self): 
    stopwords = set() 
    print '\nstopwords are-' 
    for word in ...: 
     stopwords.add(line) 
    return stopwords 

Это немного странно, что print_stopWords() является метод, но не изменяет объект в любом месте (т.е. никогда не использует self, например, назначить self.stopwords)

strip_stopwords() может просто использовать список-понимание :

u' '.join(w for w in text.split() if w.lower() not in stopwords) 
0

Весь этот бизнес, связанный с импортом стоп-слова на ваш код python, может быть выполнен с помощью одной строки кода. Однако важно понимать логику кода.

Для выбора правильной структуры данных: сохраните список стоп-слов для нашего проекта, нам нужна постоянная структура данных (Sets/Tuples) и минимизация использования памяти (Sets). Поэтому мы используем Sets.

= набор стоп-слов (line.strip() для линии в открытой ('' игнорируемых слов, 'г'))