TF-IDF实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验算法TF-IDF实验

【实验名称】

TF-IDF实验

【实验要求】

掌握TF-IDF模型应用过程,根据模型要求进行数据预处理,建模,评价与应用;

【背景描述】

T F-IDF是一种用于信息检索与数据挖掘的常用加权技术。TF意思是词频(Term Frequency),IDF意思是逆向文件频率(Inverse Document Frequency)。

【知识准备】

了解TF-IDF的使用场景,数据标准。了解Python/Spark数据处理一般方法。了解spark模型调用,训练以及应用方法

【实验设备】

Windows或Linux操作系统的计算机。部署Spark,Python,本实验提供centos6.8环境。【实验说明】

由于文本分析数据集一般比较巨大,这里只演示过程,所以用三句英文句子演示分析过程

【实验环境】

Spark 2.1.3,Pyrhon3.X,实验在命令行pyspark中进行,或者把代码写在py脚本,由于本次为实验,以学习模型为主,所以在命令行中逐步执行代码,以便更加清晰地了解整个建模流程。【实验步骤】

第一步:启动pyspark:

命令行中键入pyspark --master local[4],本地模式启动spark与python:

第二步:导入用到的包,并读取数据:

import pandas as pd

from pyspark import SparkContext, SQLContext, SparkConf

import pyspark.ml.feature as pmf

sqlContext = SQLContext(sc)

# 输入数据,由于文本分析数据集一般比较巨大,这里只演示过程,所以用三句英文句子演示分析过程data = ["Apache Spark is a fast and general engine for large-scale data processing.", "Java Platform, Standard Edition (Java SE) lets you develop and deploy Java applications on desktops and servers. Java offers the rich user interface, performance, versatility, portability, and security that today's applications require.",

"R is a free software environment for statistical computing and graphics. It compiles and runs on a wide variety of UNIX platforms, Windows and MacOS. "]

# 转化为spark的DataFrame

data_df = sqlContext.createDataFrame(pd.DataFrame(data)).toDF("text")

第三步:数据预处理

# 英文简单分词

import pyspark.ml.feature as pmf

tokenizer = pmf.T okenizer(inputCol="text", outputCol="tk").transform(data_df)

# 单词编码

CVmodel = pmf.CountVectorizer().setInputCol("tk").setOutputCol("hash").fit( tokenizer) # type:pmf.CountVectorizerModel

CV_data = CVmodel.transform(tokenizer)

# 展示数据

CV_data.show()

vocabulary = CVmodel.vocabulary # 获取被编码的字符集,其下标与对应的编码值一致,用于后

续的关键词还原

第四步:计算TF-IDF

# 计算TF-IDF

idf = pmf.IDF().setInputCol("hash").setOutputCol("TF-IDF") idfmodel = idf.fit(CV_data)

rescaledData = idfmodel.transform(CV_data)

第五步:获取关键词函数

def get_kye_words(row):

vec = row.asDict()["TF-IDF"]

indices = vec.indices

values = vec.values

# 解码

re = [vocabulary[z] for z in indices]

tf_idf = pd.DataFrame({"word": re, "tf_idf": values}).sort_values(by=["tf_idf"], ascending=False)[

:3] # 获取三个关键字以及其tf_idf权重

tf_idf["output"] = tf_idf["word"].map(lambda x: x + " : ") + tf_idf["tf_idf"].map(lambda x: str(x))

return Row(text=row.asDict()["text"], output=list(tf_idf["output"]))

list_re = sqlContext.createDataFrame(rescaledData.rdd.map(lambda x: get_kye_words(x)))

第五步:通过以下命令,执行整个python文件

spark-submit /opt/algorithm/spark_TF-IDF/spark_TF-IDF.py

相关文档
最新文档