根据mysql内数据,python建倒排索引,再导回mysql内。

  先把mysql内的数据导出,先导出为csv文件,因为有中文,直接打开csv文件会乱码,再直接改文件的后缀为txt,这样打开时不会是乱码,在第一行输入列名

保存时选另存为,将编码格式改为utf-8

这是建倒排索引时的代码(sort列没有空格和逗号) 运行是会报一个warning,但是结果没问题,代码结合了网络搜索结果,和我自己的修改,引用自:

https://blog.csdn.net/luoganttcc/article/details/89843699

https://github.com/luogantt/recommend_sys/blob/master/Inverted_index/invert_indexx.py   多谢分享!

from pprint import pprint

import pandas as pd

df = pd.read_csv("C:/Users/caiweiwen/Desktop/index_poem_dynasty.txt")

df['id'] = ' '
df['dynasty'] = ' '
all_dynasty = dict()
for i in range(len(df['poemid'])):
df['id'][i] = str(df['poemid'][i])
df['dynasty'][i] = "".join(str(df['dyn'][i]).split("朝代:"))
all_dynasty[df['dynasty'][i]] = 1

for dyn in all_dynasty.keys():
temp = []
for i in range(len(df['id'])):
if dyn == df['dynasty'][i]:
temp.append(df['id'][i])

all_dynasty[dyn] = temp

pprint(all_dynasty)

for sort in all_dynasty.keys():
with open('index_poem_dynasty.csv', 'a+', encoding='utf-8-sig') as f:
f.write(sort + ':'+','.join(all_dynasty[sort])+'\n')

还有更复杂一点的诗歌标签的倒排索引:

from pprint import pprint

import pandas as pd

docu_set = dict()

df = pd.read_csv("C:/Users/caiweiwen/Desktop/index_poem_sort.txt")

key = ""
value = ""

for i in range(42440): #数据问题,之后的数据id和sort之间会换行
key = str(df['poemid'][i])
value = str(df['sort'][i]).split( ) #去掉每个sort里的空格,返回列表
docu_set[key]=value
print(key)
print(value)

tmp = []

for i in range(42439,len(df['poemid'])):

if(df['poemid'][i].isdigit()): #判断是否为数字,是则为id
key = df['poemid'][i]
docu_set[key] = tmp

else:
tmp.append("".join(str(df['poemid'][i]).split())) #先去掉sort里的空格,因为返回的列表项是列表,列表项应为string,所以又转为string
if(df['poemid'][i+1].isdigit()): #判断下一行是否为数字
docu_set[key] = tmp
print("key:" + key)
print("value:" + str(tmp))
tmp = []

pprint(docu_set) #输出字典

all_words = dict()
for i in docu_set.values():
for j in i:
all_words[j] = 1

print(all_words.keys())

invert_index = dict()
for b in all_words.keys():

temp = []
for j in docu_set.keys():
if b in docu_set[j]:
temp.append(j)
invert_index[str(b)] = temp

pprint(invert_index)
for sort in invert_index.keys():
with open('index_poem_sort.csv', 'a+', encoding='utf-8-sig') as f:
f.write(sort + ':'+','.join(invert_index[sort])+'\n')


倒排结果:

导入时选择txt文件的形式

栏位分隔符我选择其他符号,我用冒号“  :”,视自己的具体情况而定,这样选源栏位和目标栏位时就很清晰了

        

最后的成果:

  总结:
  刚开始还是走了很多弯路,用dataframe和它自带的建索引,结果不知道怎么用,还是上网搜了倒排索引的python代码后才知道该用什么数据类型,幸好看到的第一个就是对的哈哈哈,
以前第一次做android的时候就花了很多时间查百度都没对,问了大佬才知道要先系统地学习一遍。以后不知道怎么写的时候还是直接搜要做的内容吧,按自己的想法搜数据结构或者算法要
花很多时间。

导出mysql内数据 python建倒排索引的更多相关文章

  1. 使用Python3导出MySQL查询数据

    整理个Python3导出MySQL查询数据d的脚本. Python依赖包: pymysql xlwt Python脚本: #!/usr/bin/env python # -*- coding: utf ...

  2. Python导出MySQL数据库中表的建表语句到文件

    为了做数据对象的版本控制,需要将MySQL数据库中的表结构导出成文件进行版本化管理,试写了一下,可以完整导出数据库中的表结构信息 # -*- coding: utf-8 -*- import os i ...

  3. linux下用命令导出mysql表数据

    由于数据库服务器是内网环境,只能通过linux跳板机连接,所以navicat工具暂时用不上. 1.用Xshell工具连接跳板机 2.再通过跳板机连接数据库服务器 >ssh -p port ip ...

  4. 导出mysql数据库数据

    1.phpmyadmin导出 ) AS `a` LEFT JOIN ( SELECT * FROM `newerp_jifen_order_log` WHERE `content` = '客户确认收货 ...

  5. shell导出mysql部分数据

    #!/bin/shSYSTEM=`uname -s` echo "echo"$SYSTEM if [[ $SYSTEM = "Linux" ]]; then   ...

  6. 使用MySQL的SELECT INTO OUTFILE ,Load data file,Mysql 大量数据快速导入导出

    使用MySQL的SELECT INTO OUTFILE .Load data file LOAD DATA INFILE语句从一个文本文件中以很高的速度读入一个表中.当用户一前一后地使用SELECT ...

  7. linux下导入、导出mysql数据库命令 下载文件到本地

    一.下载到本地 yum install lrzsz sz filename  下载 rz filename  上传   linux下导入.导出mysql数据库命令 一.导出数据库用mysqldump命 ...

  8. PHPExcel使用-使用PHPExcel导出文件-导出MySQL数据

    现在数据库里面有一组数据,我们将它按照不同的难度进行分sheet. 首先我们需要写一个mysql的配置文件- db.config.php(utf-8编码) : <?php $dbconfig= ...

  9. mysql的数据导出方法

    mysql的数据导出几种方法   从网上找到一些问题是关于如何从MySQL中导出数据,以便用在本地或其它的数据库系统之上:以及 将现有数据导入MySQL数据库中. 数据导出 数据导出主要有以下几种方法 ...

随机推荐

  1. python中,*args和**kwargs这两个参数的作用是什么?

    *args和**kwargs这两个都是不定长参数,可以解决函数中参数不固定的问题,*args可以把位置参数转化成元组,**kwagrs可以把关键字参数转化成字段

  2. STM32入门系列-GPIO工作模式及LED电路原理

    GPIO工作模式 由于GPIO内部的结构关系,决定了GPIO可配置成以下几种模式. 输入模式 在输入模式时,施密特触发器打开,输出被禁止.可通过输入数据寄存器GPIOx_IDR读取I/O状态.输入模式 ...

  3. STM32入门系列-创建寄存器模板

    介绍如何使用 KEIL5 软件创建寄存器模板, 方便之后使用寄存器方式来操作STM32开发板上的LED,让大家创建属于自己的寄存器工程模板. 获取工程模板的基础文件 首先我们在电脑任意位置创建一个文件 ...

  4. 基于flask的python注册到eureka

    Eureka架构中的三个核心角色: 服务注册中心 Eureka的服务端应用,提供服务注册和发现功能,就是刚刚我们建立的eureka-demo 服务提供者 提供服务的应用,可以是SpringBoot应用 ...

  5. Java实现评论回复功能

    目录 一.分类方式 1.单一型 2.嵌套型 3.两层型 二.实现原理 1.单一型 2.嵌套型 3.两层型 使用递归循环开发评论回复功能,适用于大部分的简单单体应用 评论功能或许是大多数的单体应用之中会 ...

  6. QQ彩贝热销时装

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. 正式班D26

    2020.11.11星期三 正式班D26 目录 14.2.2 ifconfig命令 14.2.2 ifconfig命令 ifconfig命令结果解释 [root@ccc ~]# ifconfig et ...

  8. 设置layui表格cell的内边距

    /*设置layui表格cell的内边距*/ .layui-table-cell { height: 50px !important; line-height: 50px !important; }

  9. django环境安装操作整理!

    1. Django 下载地址:https://www.djangoproject.com/download/ 注意:目前 Django 1.6.x 以上版本已经完全兼容 Python 3.x. 2.安 ...

  10. kali中PHANTOM-EVASION 3.0运行时module ' OpenSSL.crypto' has no attribute ' PKCS12Type'报错解决方法

    kali中直接用pip install pyopenssl安装当最新的openssl中的crypto中的类PKCS12Type改成了PKCS12 所以需要在phantom中改对应代码 将这个文件中对应 ...