Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x NLP-删除停止字并计算字频_Python 3.x_Pandas_Dataframe_Nlp_Stop Words - Fatal编程技术网

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,但第二个代码块正是我努力工作的地方。