文章目录
文本相似度分析
文本相似度分析:从海量数据(文章,评论)中,把相似的数据挑选出来
步骤:
- 把评论翻译成机器看的懂的语言
- 使用机器看的懂得算法轮询去比较每一条和所有评论的相似程度
- 把相似的评论挑出来
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'