机器学习:NLP(自然语言处理)基础,相似度分析,KNN情感分类

文本相似度分析

文本相似度分析:从海量数据(文章,评论)中,把相似的数据挑选出来

步骤:

  • 把评论翻译成机器看的懂的语言
  • 使用机器看的懂得算法轮询去比较每一条和所有评论的相似程度
  • 把相似的评论挑出来

1.把评论翻译成机器看的懂的语言

1).分词(把句子拆分成词语)

距离川沙公路较近,但是公交指示不对,如果是"蔡陆线"的话,会非常麻烦.建议用别的路线.房间较为简单.
在这里插入图片描述
[‘距离’, ‘川沙’, ‘公路’, ‘较近’, ‘,’, ‘但是’, ‘公交’, ‘指示’, ‘不’, ‘对’, ‘,’, ‘如果’, ‘是’, ‘"’, ‘蔡陆线’, ‘"’, ‘的话’, ‘,’, ‘会’, ‘非常’, ‘麻烦’, ‘.’, ‘建议’, ‘用’, ‘别的’, ‘路线’, ‘.’, ‘房间’, ‘较为简单’, ‘.’]

2).制作词袋模型(bag-of-word: 可以理解成装着所有词的袋子)

[‘距离’, ‘川沙’, ‘公路’, ‘较近’, ‘,’, ‘但是’, ‘公交’, ‘指示’, ‘不’, ‘对’, ‘,’, ‘如果’, ‘是’, ‘"’, ‘蔡陆线’, ‘"’, ‘的话’, ‘,’, ‘会’, ‘非常’, ‘麻烦’, ‘.’, ‘建议’, ‘用’, ‘别的’, ‘路线’, ‘.’, ‘房间’, ‘较为简单’, ‘.’]
在这里插入图片描述
{’"’: 0, ‘,’: 1, ‘.’: 2, ‘不’: 3, ‘会’: 4, ‘但是’: 5, ‘公交’: 6, ‘公路’: 7, ‘别的’: 8, ‘如果’: 9, ‘对’: 10, ‘川沙’: 11, ‘建议’: 12, ‘房间’: 13, ‘指示’: 14, ‘是’: 15, ‘用’: 16, ‘的话’: 17, ‘蔡陆线’: 18, ‘距离’: 19, ‘路线’: 20}

数字表示词语的编号(index)

3).用词袋模型制作语料库(corpus:把每一个句子都用词袋表示)

语料库的两种表现形式
1.第一种: String类型
["a b c",
 "b c d"]

2.第二种,词袋类型
[[(0,1), (1,1), (2,1), (3,0)],
 [(0,0), (1,1), (2,1), (3,1)]]
  
如果新得到一组数据,可以把它用两种形式加入到语料库中
1. String类型
"c d e", 
2. 词袋类型
[(0,0), (1,0),(2,1),(3,1),(unknow,1)]

[‘距离’, ‘川沙’, ‘公路’, ‘较近’, ‘,’, ‘但是’, ‘公交’, ‘指示’, ‘不’, ‘对’, ‘,’, ‘如果’, ‘是’, ‘"’, ‘蔡陆线’, ‘"’, ‘的话’, ‘,’, ‘会’, ‘非常’, ‘麻烦’, ‘.’, ‘建议’, ‘用’, ‘别的’, ‘路线’, ‘.’, ‘房间’, ‘较为简单’, ‘.’]
在这里插入图片描述
[(0, 2), (1, 3), (2, 3), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1), (8, 1), (9, 1), (10, 1), (11, 1), (12, 1), (13, 1), (14, 1), (15, 1), (16, 1), (17, 1), (18, 1), (19, 1), (20, 1), (21, 1), (22, 1), (23, 1), (24, 1)]

元组第一个元素为词语的编号(index),第二个为在本句中出现的次数

4).把评论变成词向量(可选的)

[(0, 2), (1, 3), (2, 3), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1), (8, 1), (9, 1), (10, 1), (11, 1), (12, 1), (13, 1), (14, 1), (15, 1), (16, 1), (17, 1), (18, 1), (19, 1), (20, 1), (21, 1), (22, 1), (23, 1), (24, 1)]
在这里插入图片描述
[2,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
省略编号,按顺序表示词语出现的次数

2.使用机器看的懂得算法轮询去比较每一条和所有评论的相似程度

TF-IDF

Corpus = [“我喜欢来中国旅游,中国很好玩”,
          “这辆车在中国很受欢迎,我的工作就是在中国出售这辆车”,
          “我喜欢喝茶和吃苹果”,
          “这份工作是在科学杂志上发几篇论文”]

如何用TF-IDF寻找关键词:

  • 不考虑停用词(就是没什么意义的词),找出一句话中出现次数最多的单词,来代表这句话,这个就叫做词频(TF – Term Frequency),相应的权重值就会增高
  • 如果一个词在所有句子中都出现过,那么这个词就不能代表某句话,这个就叫做逆文本频率(IDF – Inverse Document Frequency)相应的权重值就会降低
  • TF-IDF = TF * IDF

TF公式:

在这里插入图片描述
其中 ni,j是该词在一份文件(或评论)中出现的次数,分母则是一份文件(或评论)中所有词汇出现的次数总和

即:
在这里插入图片描述

IDF公式:

在这里插入图片描述

在这里插入图片描述
即:
在这里插入图片描述

分母之所以要加1,是为了避免分母为0

案例代码:

判断一句话和样本文档中每句话的相似度
文件:
在这里插入图片描述
执行结果(测试文本和前十句话的相似度从高到底排序):
在这里插入图片描述

# encoding=utf-8
"""
Date:2019-07-27 12:01
User:LiYu
Email:liyu_5498@163.com

"""
import csv
import jieba
from gensim import corpora, models, similarities

count = 0
a = []
wordListTop10 = []
with open('./ChnSentiCorp_htl_all.csv'
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值