基于spark的文本相似性匹配

本文介绍了一个基于pyspark的英文文本相似度匹配项目,涉及数据预处理、剔除停用词、特征工程(使用TFIDF和word2vec)、LSH模型以及解决在开发过程中遇到的问题,如数据类型转换和JVM OOM错误。
摘要由CSDN通过智能技术生成

基于pyspark的英文文本相似度匹配

原文本文件是txt格式的多文本,数量大约三万个,项目需求是对这些文本进行相似度的匹配,找出哪些文本之间内容是相似的。

文本内容类似如下:

From: kedz@bigwpi.WPI.EDU (John Kedziora)
Subject: Motorcycle wanted.
Organization: Worcester Polytechnic Institute
Lines: 11
Expires: 5/1/93
NNTP-Posting-Host: bigwpi.wpi.edu

Followup-To:kedz@wpi.wpi.edu
Distribution: ne
Organization: Worcester Polytechnic Institute
Keywords:

I am looking for an inexpensive motorcycle, nothing fancy, have to be able to do all maintinence my self. looking in the <$400 range.

if you can help me out, GREAT!, please reply by e-mail.

文本的关键信息主要是标题(subject)和正文部分。

项目环境

linux环境
hadoop2.7.1
spark2.4.5
开发语言:python

项目思路

数据预处理
把一万多个文本数据进行清洗,提取出有效信息(标题+正文),把有效信息合并为一个大的txt文件,合并后文件的每一行与原来的单个txt文件的信息对应。

剔除停用词
剔除原文本里很多的英文常用词,例如am,is,going等,这些常用词汇很容易出现,但是没有办法成为一个句子的代表性词汇,故而必须去掉。

特征工程
首先统计单行句子里的每一个词的TFIDF值,把值比较大的前15个词提出来作为句子的关键词,然后把这些关键词转为word2vec向量,word2vec向量将作为单行文本的特征。

使用LSH模型进行距离筛选
实际上起初我打算使用传统的机器学习方法,构建logistic回归模型或者神经网络模型,做成一个分类模型,但是由word2vec向量构成的训练模型效果很差(三层神经网络的准确率只有百分之十五),在这个方向失败之后,回到LSH模型做出相似性匹配。
LSH即Locality Sensitive has,局部敏感哈希,主要用来解决海量数据的相似性检索。由spark的官方文档翻译为:LSH的一般思想是使用一系列函数将数据点哈希到桶中,使得彼此接近的数据点在相同的桶中具有高概率,而数据点是远离彼此很可能在不同的桶中。spark中LSH支持欧式距离与Jaccard距离。这里我们使用的是欧式距离。由在相同的桶中的数据认为是高概率相似的。

模型结构

数据输入,剔除停用词

StopWords = [] #停用词

with open(r"/usr/local/chinesestopwords.txt") as f:
    for i in f.readlines():
        i = i.strip('\n')
        StopWords.append(i)
def f(x):
    rel = {
   }
    rel['index'] = str(x[0])
    seg_list = jieba.cut(str(x[1]))
    rel['words'] =[word for word in
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Spark文本情感分析可以通过以下步骤实现: 1. 数据预处理:将原始文本数据进行清洗、分词、去除停用词等操作,得到干净的文本数据。 2. 特征提取:使用TF-IDF算法对文本数据进行特征提取,将文本数据转化为向量表示。 3. 模型训练:使用Spark MLlib中的分类算法,如朴素贝叶斯、逻辑回归等,对特征向量进行训练,得到分类模型。 4. 模型评估:使用测试数据对训练好的模型进行评估,计算模型的准确率、召回率等指标。 5. 模型应用:使用训练好的模型对新的文本数据进行情感分析,得到文本的情感倾向。 以下是一个基于Spark文本情感分析的Python代码示例: ```python from pyspark.ml.feature import HashingTF, IDF, Tokenizer from pyspark.ml.classification import NaiveBayes from pyspark.ml import Pipeline from pyspark.sql.functions import udf from pyspark.sql.types import DoubleType # 加载数据 data = spark.read.format("csv").option("header", "true").load("data.csv") # 数据预处理 tokenizer = Tokenizer(inputCol="text", outputCol="words") hashingTF = HashingTF(inputCol="words", outputCol="rawFeatures", numFeatures=10000) idf = IDF(inputCol="rawFeatures", outputCol="features") pipeline = Pipeline(stages=[tokenizer, hashingTF, idf]) processedData = pipeline.fit(data).transform(data) # 模型训练 nb = NaiveBayes(smoothing=1.0, modelType="multinomial") model = nb.fit(processedData) # 模型应用 def predict_sentiment(text): words = text.split(" ") df = spark.createDataFrame([(text,)], ["text"]) processedData = pipeline.fit(df).transform(df) prediction = model.transform(processedData) return prediction.select("prediction").collect()[0][0] sentiment_udf = udf(predict_sentiment, DoubleType()) result = data.withColumn("sentiment", sentiment_udf(data["text"])) # 输出结果 result.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值