Python 3.x NLP-删除停止字并计算字频
我目前有一个工作脚本,可以对来自数据库的数据进行一列(对话消息体)的词频进行简单计数。下面是工作代码和输出(图像)的示例Python 3.x NLP-删除停止字并计算字频,python-3.x,pandas,dataframe,nlp,stop-words,Python 3.x,Pandas,Dataframe,Nlp,Stop Words,我目前有一个工作脚本,可以对来自数据库的数据进行一列(对话消息体)的词频进行简单计数。下面是工作代码和输出(图像)的示例 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
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)
问题是,我想从这个分析中排除很多词。据我所知,这是NLP中的一个常见问题。因此,我修改了我的脚本,如下所示:
# 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)
这是而不是为我工作,不会返回任何结果。即使当我尝试打印(x)以查看初始转换的样子时,我也只能返回>系列([],dtype:int64)
我很确定我在这里缺少了一些基本的东西,但是我已经在这方面工作了一段时间,运气不好。有人能把我推向正确的方向吗
你需要的是列中的
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
你能创建一个吗?我猜这很难,因为我不能在这里提供输入。输入是一列多行,每个单元格是一个包含对话注释的长格式文本字段。很明显,我不太理解MRE,但第二个代码块正是我努力工作的地方。