Rapidminer 中文分词&&去除停用词
First: 打开Rapidminer新建项目
首先打开你的Rapidminer
,选择新建Blank
项目。
Second: 导入数据集&&导入停用词列表
导入的数据必须是清洗过后的数据,不要有脏数据。
File
,点击Import Data
选项。会出现下面画面:
因为我们是要从本地导入数据集,所以我们选择My Computer
。会出现下面画面:
我们只需要找到我们想导入的数据集,然后点击next
。这时候会出现以下画面:
注意事项:File Encoding
必须要选择UTF-8
。Header Row
根据实际情况去选择,一般数据集第一行为Header
。
之后我们点击next
。这时候会出现以下画面:
注意事项,右上角Replace errors with missing values
是处理数据错误情况的,他是用None
值填充的。以下过程必须保证你数据是被清洗过后的。
之后我们点击next
,会出现下面界面:
这里填写的是你的保存数据的地址,你只需要保证你保存后的地址能够找到即可。之后我们点击Finish
。便可以完成了数据的导入。
同理我们导入停用词列表,原理方法一样。
Third: 构建整个流程
回到主界面,然后找到你导入的数据集,将其拖入主界面。
之后在左下角找到Nominal to Text
这个Operators
。并将其拖入主界面,将第一个控件的out
连接这个控件的exa
。
之后我们在搜索Process Document from Data
,将其拖入主界面,然后将Nominal to Text
控件的exa
连接Process Document from Data
控件的exa。
这时候我们可以点击Process Document from Data
,在右边可以看到这个控件的功能。vector creation
我们目前需要选择TF-IDF
,剩下都默认就好。
这时候我们在双击Process Document from Data
,进入这个控件里面。会出现以下画面:
这时候在搜索Document to Data
,并将其拖入主屏幕,点击这个控件,在右边必须填写两个不相等的值。目前我填写的是text1
和text2
。
之后我们在搜索python
,将其拖入到主界面里。将Documen to Data
的exa
连接到python
的第一个inp
接口。如下图所示。
之后点击Execute Python
,在右侧点击Edit Text
,如下图所示。
之后导入下面的代码(中文分词操作):
import pandas as pd
import jieba
import jieba.analyse
#里面很多无关紧要的代码,但是可以测试用。
# rm_main is a mandatory function,
# the number of arguments has to be the number of input ports (can be none)
def rm_main(data):
# output can be found in Log View
segments = [] #功能留用
framedata = []
for index, row in data.iterrows():
content=row[0]
words = jieba.cut(content)
splitedStr = ''
for word in words:
#停用词判断,如果当前的关键词不在停用词库中才进行记录
segments.append({'word':word, 'count':1})#可有可无
splitedStr += word + ' '
framedata.append({'splited word':splitedStr})
Sgdata = pd.DataFrame(framedata)
#your code goes here
list1 = []
for i in range(len(Sgdata)):
lis = Sgdata.iloc[i][0].strip().split(' ')
list1.append(lis)
# connect 2 output ports to see the results
Sgdata = pd.DataFrame(list1)
return Sgdata
之后拖入我们所需要的停用词列表数据到主界面,并导入另一个python
控件,将第一个python
控件的out
连接第二个python
脚本的第一个inp
接口,将停用词的out
连接第二个python
脚本的第二个inp
接口。如下图所示:
在第二个python
控件导入以下代码(去除停用词):
import pandas as pd
import numpy as np
def rm_main(data,data1):
# output can be found in Log View
listdata = np.array(data1)
stopwords = listdata.tolist()
segments = [] # 功能留用
col=k=data.shape[1]
My_content=[]
framedata = []
j = 0 # 记录列数
for index, row in data.iterrows():
My_content.append([])
for i in range(0,k):
content=row[i]
My_content[j].append(content)
splitedStr = ''
for l in range(0,col):
stop = []
if My_content[j][l]!=None:
stop.append(My_content[j][l])
if stop not in stopwords:
# 记录全局分词
segments.append({'word': My_content[j][l], 'count': 1})
splitedStr += My_content[j][l] + ' '
j = j + 1
framedata.append({'splited word': splitedStr})
Sgdata = pd.DataFrame(framedata)
# your code goes here
list1 = []
for i in range(len(Sgdata)):
lis = Sgdata.iloc[i][0].strip().split(' ')
list1.append(lis)
# connect 2 output ports to see the results
Sgdata = pd.DataFrame(list1)
return Sgdata
之后我们在搜索Nominal to Text
这个Operators
。并将其拖入主界面,将第二个python
控件的out
连接这个控件的exa
。如下图所示:
之后我们在搜索Data to Document
这个Operators
。并将其拖入主界面,将Nominal to Text
控件右侧的exa
连接这个控件的exa
,将Data to Document
右侧的doc
接口连接右上角的doc
接口。如下图所示:
这时候我们里面的全部流程就做完了。
下面我们回到主界面。
之后我们在搜索K-means
这个Operators
。并将其拖入主界面,并按照如图所示连接所有的线。如下图所示:
我们可以点击Clustering
这个控件,然后在右侧设置我们想设置的数值。
Fourth: 运行整个流程
点击在左上角的蓝色小箭头即可运行您的项目,稍等片刻,即可出现所有的结果。
那么我们大功告成!
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!