Удаление стоп-слов, начинающих предложение с NLTK - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь удалить все стоп-слова из ввода текста.Приведенный ниже код удаляет все стоп-слова, кроме одного, начинающего предложение.

Как мне удалить эти слова?

from nltk.stem.wordnet import WordNetLemmatizer

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

from string import punctuation
exclude_punctuation = set(punctuation)

stoplist_combined = set.union(stopwords_nltk_en, exclude_punctuation)

def normalized_text(text):
   lemma = WordNetLemmatizer()
   stopwords_punctuations_free = ' '.join([i for i in text.lower().split() if i not in stoplist_combined])
   normalized = ' '.join(lemma.lemmatize(word) for word in stopwords_punctuations_free.split())
return normalized


sentence = [['The birds are always in their house.'], ['In the hills the birds nest.']]

for item in sentence:
  print (normalized_text(str(item)))

OUTPUT: 
   the bird always house 
   in hill bird nest

1 Ответ

0 голосов
/ 19 октября 2018

Виновником является строка кода:

print (normalized_text(str(item)))

Если вы попытаетесь вывести str(item) для первого элемента вашего списка sentence, вы получите:

['The birds are always in their house.']

, который затем опускается и разделяется:

["['the", 'birds', 'are', 'always', 'in', 'their', "house.']"]

Как видите, первый элемент - ['the, который не соответствует стоп-слову the.

Решение: Используйте ''.join(item) для преобразования элемента в str


Редактировать после комментария

Внутри текстовой строки еще естьнекоторые вершины '.Чтобы решить, вызовите normalized как:

for item in sentence:
    print (normalized_text(item))

Затем импортируйте модуль регулярных выражений с помощью import re и измените:

text.lower().split()

с помощью:

re.split('\'| ', ''.join(text).lower())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...