【技术博客】 记录下用mysql数据库+django构建工业级网页的过程(待完成)

2020-11-10   621 次阅读


脏数据处理

先用navicat连接数据库后把给的资料的excel放到mysql数据库中(这点很便利)

然后发现一些脏数据
image.png(因为是给其他人写代码,数据要保密所以就不展示)
这个前面有空格,所以使用

update *tables_name* set *files_name* = trim(*files_name*);

去除前缀和后缀的空格脏数据

  1. LTRIM是左空格
  2. TRIM是左右空格
  3. RTRIM是右空格

之后又发现了有分号的脏数据
image.png

这样的就直接用

update *tables_name* set *files_name* = trim(BOTH ';' from *files_name*);

去除全部的;

image.png

这样就没有了
image.png

顺便也能去掉其他地方的;,要注意这样的处理是否与自己的代码相互拟合

又发现音变中出现
image.png

其实是有音变,但是表示的不好

update 儿童口语词表(加拼音) set 音变 = '一+4>2+4' where 音变 = '一+4>一+4';

直接解决

(没想到脏数据处理mysql就能处理的差不多了)

对数据库中数据进行预处理

分出声变

使用python,数据库里怎么分基本都写给咱了,就处理完脏数组后放到增加了音变字Index的mysql数据库中就可以了

增加一个列

alter table *table_name* add column *file_name* varchar(255)
# alter table 是指对table的操作
# add换成drop就是删除

***
可以加:
not null 指非空
first 要在第一列
after *file_name* 要在指名列的后面
什么都不填就是在最后一列
***

image.png

下面把数据插进去

一开始出错了,表现为

insert into *table_name* *file_name* values(*value*)了

最后除了插的那行全是空值。
image.png

所以先在原先的表中创建出自增长的主键ID

alter table 儿童口语词表(加拼音) add ID int first;
alter table 儿童口语词表(加拼音) change ID ID int not null auto_increment primary key;
你们应该能看懂

然后使用update命令

update *tableName* set *fileName*=*value*  where ID=*IDValue*;

一定记得在python中更新mysql时,要记得

# conn(最外层连接)
conn.commit()

再断开连接,不然更新没效果

image.png

成功了,之后就备用
(标记好这是从0开始,mysql的ID是从1开始)

分出韵脚来辅助判断押韵与否

三拼音节(11个):ia ua uo uai iao ian iang uan uang iong üan

找韵脚的方法就是,只要碰到三拼音节,就将其第一个字符去掉后剩下的就是韵脚

但是突然有个问题,三拼音节里有个ü转义,数据库中没有。

第一个想法就是那就先转义

转义成功后插入表中

但是转义后发现,按照现在使用的char-featurizer分不出韵母(输入是汉字),得不到韵母
下面想出来两个方案

  1. 从已经分出来的转义之后的拼音和用char-featurizer判断出来的韵母共同组合判断。思考下逻辑想想怎么做
  2. (灵光一闪) 可以不转义,转而一碰到uan就直接判断成三拼音节。ps.在转义规则中,ü 只能由yu和u得到。 这样就完美解决。

于是就那么做了

也就做成功了

导入到table中,分出韵脚结束

撰写题目推荐算法

声母辨识题

声调辨识题

韵母辨识题

与用户可登录的网页结合

过程解决问题小记录

'in' on doubleList

doubleList = [[1,2,3],[4,5],[6]]
#对于双重数组

6 in doubleList
return: False

# in 不能查找到双重数组的最内部

[6] in doubleList
return: True

List.extend

#一个很容易不被注意的错误
[1].extend([2])
# This do nothing
#Think about why?

List.extend(*element*)只返回None
并且只有List是一个实例化的元素时才有效
[1].extend什么也留不下
temp = [1]
temp.extend([2])
然后再用temp才有效果

而且extend中,很容易出现extend(2),但其实必须是个列表,才能与另一个列表融合在一起

mysql 设置为null

直接set file_name = null就可

python去除指定字符

有三种:

  1. strip #只能去除首尾或单独首或单独尾
  2. replace #性能最差但是最方便
  3. re.sub #可传三个参数 第一个要替换的数据,第二个要替换成的数据,第三个是你需要改变的字符串
str = '/n1/t2/r3/n4/t5/r6/n7/t8/r9'
re.sub('[/n/t/r]','',str)
'123456789'

缺点是不能同时去除[]两个符号,因为要去除的符号要在'[]'。

# 想去除字母,也可以直接如下
result = re.sub('[a-zA-Z]',str)

对原数据库的一些特殊改变

除了要去除所有的全拼的前后的空格之外(trim()),
接下来单个记录

一:
高频词表构建时,词重复并不一样的哈希碰撞
image.png

删除表和删除表内数据

删除表:

drop table **tableName**

删除表内数据

alter table *tableName* drop column *fildName*

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

无论在未来前做什么,未来都会普通的到来