Я разместил это как комментарий, но подумал, что мог бы также конкретизировать его в полный ответ с некоторыми пояснениями:
Вы хотите использовать str.split()
, чтобы разбить строку на слова, а затем каждое слово:
for word in text.split(" "):
PorterStemmer().stem_word(word)
Поскольку вы хотите получить строку из всех слов, образованных от корней, тривиально затем снова соединить эти основы вместе. Чтобы сделать это легко и эффективно, мы используем str.join()
и выражение генератора:
" ".join(PorterStemmer().stem_word(word) for word in text.split(" "))
Редактировать:
Для другой вашей проблемы:
with open("/path/to/file.txt") as f:
words = set(f)
Здесь мы открываем файл с помощью инструкции with
(это лучший способ открывать файлы, так как он корректно обрабатывает их закрытие, даже в исключениях, и более удобочитаем) и считывает содержимое в набор. Мы используем набор, так как нам не важен порядок слов или дубликаты, и позже он будет более эффективным. Я предполагаю, что одно слово в строке - если это не так, и они разделены запятыми или пробелами, то использование str.split()
, как мы делали раньше (с соответствующими аргументами), вероятно, является хорошим планом.
stems = (PorterStemmer().stem_word(word) for word in text.split(" "))
" ".join(stem for stem in stems if stem not in words)
Здесь мы используем предложение if выражения генератора, чтобы игнорировать слова, которые входят в набор слов, загруженных из файла. Проверки членства в наборе выполняются за O(1), так что это должно быть относительно эффективно.
Редактировать 2:
Чтобы удалить слова до того, как они будут выделены, это еще проще:
" ".join(PorterStemmer().stem_word(word) for word in text.split(" ") if word not in words)
Удаление данных слов просто:
filtered_words = [word for word in unfiltered_words if not in set_of_words_to_filter]
person
Gareth Latty
schedule
08.05.2012
stemmed = [stemmer.stem_word(w) for w in text.split(' ')]
. Если вам нужно предложение из него, вы можете выполнитьsente = ' '.join(stemmed)
, что вернет предложение из всех стеблей. Дайте мне знать, если это поможет. - person wkl   schedule 09.05.2012