Стоп-слова в самых влиятельных словах - PullRequest
1 голос
/ 30 мая 2019

Я использую код НЛП, пытаясь найти наиболее влиятельные (положительные или отрицательные) слова в опросе.Моя проблема в том, что, хотя я успешно добавляю некоторые дополнительные стоп-слова в файл стоп-слов NLTK, они продолжают появляться как влиятельные слова позже.

Итак, у меня есть фрейм данных, первый столбец содержит оценки, второй столбец содержит комментарии.

Я добавляю дополнительные стоп-слова:

stopwords = stopwords.words('english')
extra = ['Cat', 'Dog']
stopwords.extend(extra)

Я проверяю их добавление, используя метод len до и после.

Я создаю эту функцию для удаления знаков препинания истоп-слова из моих комментариев:

def text_process(comment):
   nopunc = [char for char in comment if char not in string.punctuation]
   nopunc = ''.join(nopunc)
   return [word for word in nopunc.split() if word.lower() not in stopwords]

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

corpus = df['Comment']
y = df['Label']
vectorizer = CountVectorizer(analyzer=text_process)
x = vectorizer.fit_transform(corpus)

...

И затем, чтобы получить самые влиятельные слова:

feature_to_coef = {word: coef for word, coef in zip(vectorizer.get_feature_names(), nb.coef_[0])}


for best_positive in sorted(
    feature_to_coef.items(), 
    key=lambda x: x[1], 
    reverse=True)[:20]:
    print (best_positive)

Но, Кэт и Дог в результате.

Что я делаю не так, какие-либо идеи?

Большое спасибо!

1 Ответ

3 голосов
/ 30 мая 2019

Похоже, это потому, что у вас есть заглавные слова 'Cat' и 'Dog'

В вашей функции text_process у вас есть if word.lower() not in stopwords, которая работает, только если стоп-слова строчные

...