栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

基于敏感数据的提取与加密(第三步,敏感数据加密)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于敏感数据的提取与加密(第三步,敏感数据加密)

项目场景:

目前,我已经做了两步就数据已经提取出来了,也做了词向量,现在我们要处理的就是,如何进行加密,我的思路是首先将词向量压缩到一维,再根据一维向量的大小进行排序。最后在根据提取出的词按照自己定义的方法进行加密,我的就比较简单往后加一步,如果这个字没有怎么办那个就统一定义一个数组,再或者用gensim,里面的wv.most_similar找最相关的字符。例子如。

from gensim.models import Word2Vec

word2vec_model = Word2Vec.load('wiki.model')

testwords = ['孩子', '数学', '学术', '白痴', '篮球']
for i in range(5):
    res = word2vec_model.wv.most_similar(testwords[i])
    print(testwords[i])
    print(res)

读取大量词组并压缩一维

这里我们采用了PCA方式压缩到一维,那会问为什么采用PCA方式,不用其他的呢,这个我倒是尝试了一些方式例如MDS这种,我也把尝试代码放到了github中。那为什么选用了PCA呢,是因为我之前看过有关图像理解的文章,里面有用PCA进行降维,因此我也用了。这里词向量.vec也刚好呼应了我们前面压缩到vec的方式(步骤1)

import gensim
import numpy as np
from sklearn.decomposition import PCA
def load_txt_vec(file, threshold=0, dtype='float'):	# 读取txt文件格式的word2vec词向量
    print('读取词向量文件中......')
    header = file.readline().split(' ')
    count = int(header[0]) if threshold <= 0 else min(threshold, int(header[0]))
    dim = int(header[1])
    words = []
    matrix = np.empty((count, dim), dtype=dtype)
    for i in range(count):
        word, vec = file.readline().split(' ', 1)
        words.append(word)
        matrix[i] = np.fromstring(vec, sep=' ', dtype=dtype)
    return (words, matrix)

if __name__ == '__main__':
    result=[]
    try:
        w2v_txt_file = open('newsblogbbs.vec', 'r', encoding='utf-8', errors='surrogateescape')  # txt格式的词向量文件
        words, vectors = load_txt_vec(w2v_txt_file)  # 载入txt文件格式的word2vec词向量
        for i in range(len(vectors)):
            result.append(vectors[i][:4])
        # for r in range(len(result)):
        #     print(result[r])
        #print(result)
        X = np.array(result)
        pca = PCA(n_components=1)  # 降到2维
        pca.fit(X)  # 训练
        newX = pca.fit_transform(X)  # 降维后的数据
        f1 = open("middleyas.txt", "w", encoding='utf-8')
        for index in range(len(newX)):
             print(newX[index][0])
             f1.write(str(words[index])+'n'+str(newX[index][0]) + 'n')
        #print(result)
        f1.close()
    except ImportError as ex:
        print(ex)

结果如图


词向量分类:

这里我们把词向量和对应文字分成两个文本,这是为了进行下一步排序做准备。

word = []
vector = []
Dict = []
num = 0
# 打开字典并去掉换行符
with open("middleyas.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    # 去除换行符
    result = ([x.strip() for x in lines if x.strip() != ''])
    #print(result)
    for x in result:
        Dict.append(x)
    # 将整理好字典提取成为全局字典
    for k in range(len(Dict) - int(len(Dict) % 2)):
        if num == 1:
            vector.append(Dict[k])
        else:
            num = 0
            word.append(Dict[k])
        num += 1
    #添加到两份文件夹中
    f1 = open("word.txt", "w", encoding='utf-8')
    for index in range(len(word)):
        f1.write(str(word[index]) + 'n')
    print(len(word))
    f1.close()

    f2 = open("vector.txt", "w", encoding='utf-8')
    for index in range(len(vector)):
        f2.write(str(vector[index]) + 'n')
    print(len(vector))
    f2.close()

结果如图所示:


连接到词典并排序

我根据分类好的两个文件,放到词典里面进行排序,最后再分别放到两个文件里面,为啥呢因为最后一步需求我还没做,有总有合到时候遇到需求都好做。

words=[]
wordsrange=[]
vectors=[]
vectorsrange=[]
# 词语打开字典并去掉换行符
with open("word.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    # 去除换行符
    result = ([x.strip() for x in lines if x.strip() != ''])
    # 将整理好字典提取成为全局字典
    for x in result:
        words.append(x)
# 向量打开字典并去掉换行符
with open("vector.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    # 去除换行符
    result = ([x.strip() for x in lines if x.strip() != ''])
    # 将整理好字典提取成为全局字典
    for x in result:
        vectors.append(float(x))
dict = {word:vector for word,vector in zip(words,vectors )}# dict={'张三': 90, '李四': 80, '王五': 70, '赵六': 60}
orderdict = sorted(dict.items(),key=lambda item:item[1],reverse=True)
for index in range(len(orderdict)):
    wordsrange.append(orderdict[index][0])
    vectorsrange.append(orderdict[index][1])
dictrange = {wordr:vectorr for wordr,vectorr in zip(wordsrange,vectorsrange )}
f3 = open("middlerange.txt", "w", encoding='utf-8')
for key, value in dictrange.items():
    print(key+" "+str(value))
    f3.write(key+" "+str(value) + 'n')
f3.close()

#添加到两份文件夹中
f1 = open("wordrange.txt", "w", encoding='utf-8')
for index in range(len(wordsrange)):
    f1.write(str(wordsrange[index]) + 'n')
print(len(wordsrange))
f1.close()

f2 = open("vectorrange.txt", "w", encoding='utf-8')
for index in range(len(vectorsrange)):
    f2.write(str(vectorsrange[index]) + 'n')
print(len(vectorsrange))
f2.close()


github地址如下:https://github.com/zhichen-roger/Natural-language-processing-based-data-desensitisation.git

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/935253.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号