НЛП - удаление стоп-слов и подсчет частоты слов - PullRequest
1 голос
/ 12 марта 2020

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

import pandas as pd
import numpy as np

x = df.conversation_message__body.str.split(expand=True).stack().value_counts()

y = pd.DataFrame(data=x)

y.reset_index(level=0,inplace=True)

print(y)

Проблема в том, что есть много слов, которые я хочу исключить из этого анализа. Это общая проблема в НЛП, насколько я понимаю. Поэтому я изменил свой сценарий, как показано ниже:

# Import stopwords with nltk.
from nltk.corpus import stopwords
import pandas as pd
import numpy as np

stop = stopwords.words('english')
newStopWords = ['hello','hi','hey','im','get']
stop.extend(newStopWords)

df['conversation_message__body'] = df.conversation_message__body.str.replace("[^\w\s]", "").str.lower()

df['conversation_message__body'] = df['conversation_message__body'].apply(lambda x: [item for item in x.split() if item not in stop])

x = df.conversation_message__body.str.split(expand=True).stack().value_counts()

y = pd.DataFrame(data=x)

y.reset_index(level=0,inplace=True)

print(y)

Это НЕ работает для меня и не возвращает результатов. Даже когда я пытаюсь print(x) посмотреть, как выглядит первоначальное преобразование, я только возвращаюсь>> 1012 *

Я почти уверен, что есть некоторые основы, которые мне здесь не хватает, но я работал над этим какое-то время без удачи. Может ли кто-нибудь подсказать мне в правильном направлении?

enter image description here

1 Ответ

1 голос
/ 12 марта 2020

Вам нужно str в столбце, а не в списке слов.

Небольшой пример:

df = pd.DataFrame({ 'conv': 
                   ["hi im Jon. I am reaching out to schedule a meeting on Monday.", "That wouldn't be possible as I am out."]})

Данные выглядят следующим образом:

    conv
0   jon reaching schedule meeting monday
1   wouldnt possible

Тогда:

df['conv'] = df['conv'].str.replace("[^\w\s]", "").str.lower()

Теперь вам нужно указать строку в conv, ваш код дает список строк.

df['conv'] = df['conv'].apply(lambda x: ' '.join([item for item in x.split() if item not in stop]))
df['conv'].str.split(expand=True).stack().value_counts()

Вывод:

wouldnt     1
jon         1
possible    1
meeting     1
reaching    1
monday      1
schedule    1
dtype: int64
...