Избавиться от стоп-слов и знаков препинания

Я изо всех сил пытаюсь остановить NLTK.

Вот мой код. Может ли кто-нибудь сказать мне, что случилось?

from nltk.corpus import stopwords def removeStopwords( palabras ): return [ word for word in palabras if word not in stopwords.words('spanish') ] palabras = ''' my text is here ''' 

  • Определить полную конфигурацию URL-адреса Django
  • Итеративно писать узлы XML в python
  • Настроить Python-путь для Anaconda в Cygwin
  • Python PIL не имеет атрибута 'Image'
  • разброс графика в matplotlib
  • adwords api: получать ежедневные расходы (затраты)
  • Киви, как повернуть картинку
  • Использование API RESTful в Django
  • 2 Solutions collect form web for “Избавиться от стоп-слов и знаков препинания”

    Ваша проблема в том, что итератор для строки возвращает каждый символ не каждому слову.

    Например:

     >>> palabras = "Buenos dias" >>> [c for c in palabras] ['B', 'u', 'e', 'n', 'a', 's', ' ', 'd', 'i', 'a', 's'] 

    Вам нужно повторить и проверить каждое слово, к счастью, функция split уже существует в стандартной библиотеке python под строковым модулем . Однако вы имеете дело с естественным языком, включая пунктуацию, которую вы должны искать здесь для более надежного ответа, который использует модуль re .

    После того, как у вас есть список слов, вы должны представить их все перед сравнением, а затем сравнить их так, как вы уже показали.

    Buena suerte.

    ИЗМЕНИТЬ 1

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

     import re from nltk.corpus import stopwords scentence = 'El problema del matrimonio es que se acaba todas las noches despues de hacer el amor, y hay que volver a reconstruirlo todas las mananas antes del desayuno.' #We only want to work with lowercase for the comparisons scentence = scentence.lower() #remove punctuation and split into seperate words words = re.findall(r'\w+', scentence,flags = re.UNICODE | re.LOCALE) #This is the simple way to remove stop words important_words=[] for word in words: if word not in stopwords.words('spanish'): important_words.append(word) print important_words #This is the more pythonic way important_words = filter(lambda x: x not in stopwords.words('spanish'), words) print important_words 

    Я надеюсь, это поможет вам.

    Сначала используя токенизатор, вы сравниваете список токенов (символов) с стоп-листом, поэтому вам не нужен модуль re. Я добавил дополнительный аргумент для переключения между языками.

     def remove_stopwords(sentence, language): return [ token for token in nltk.word_tokenize(sentence) if token.lower() not in stopwords.words(language) ] 

    Dime si te fue de util;)

    Python - лучший язык программирования в мире.