毕业设计中用到的列表应用
本人的毕业设计题目为“基于刑事电子卷宗分析的罪名与刑期预测”,在做毕设的过程中遇到了很多问题,走了很多弯路,最终将问题一一解决了。下面,我向大家分享一下我所遇到的问题和解决方案:
(1)列表的嵌套
毕业设计的第一步是数据整理,即把法律文档整理成DataFrame的形式。其中,
DataFrame的一列为法条标签,每个法律文本对应法条标签;这时候,需要将法条标签整理成嵌套列表的形式,即每条法律文本的法律标签保存在一个列表中,所有的列表汇集在一起,形成一个新的列表。形式如下:
a=[[1,2],[3,4,5],[6,7,8,9],[10]]
我们称这种形式的列表为嵌套列表,嵌套列表的处理方式与普通列表有些区别。下面进行详细介绍:
1.切片方式
与普通列表不同,嵌套列表的切片方式分为“一级切片”和“二级切片”,下面详细介绍用法:
“一级切片”(返回列表):
a[3]
输出结果:10
a[0:3]
输出结果:[[1, 2], [3, 4, 5], [6, 7, 8, 9]]
“二级切片”(返回列表或者一个数值):
a[1][0]
输出结果:3
a[1][0:2]
输出结果:[3,4]
a[0:2][0:3]
输出结果:[[1, 2], [3, 4, 5]]
2.遍历方式
与普通列表不同,嵌套列表的遍历方式需要用双重循环。我们先用通常的想法来进行列表的遍历,如下所示:
for i in a:
for j in i:
if j==1:
j=11
print(a)
输出结果:[[1, 2], [3, 4, 5], [6, 7, 8, 9], [10]],这与我们预期的输出结果不符。所以,我们换一种遍历方式:
for i in range(0,len(a)):
for j in range(0,len(a[i])):
if a[i][j]==1:
a[i][j]=11
print(a)
输出结果:[[11, 2], [3, 4, 5], [6, 7, 8, 9], [10]],完全正确。可见,range方法还是稳啊!
(2)jieba分词器生成的列表
通过查阅资料可知,jieba.lcut可以对文本进行分词,并将分词后的结果保存在列表中,列表的每个元素就是分词后的每个词。示例如下:
b=jieba.lcut('元芳你怎么看?我就趴窗口上看呗!')
print(b)
输出结果:[‘元芳’, ‘你’, ‘怎么’, ‘看’, ‘?’, ‘我’, ‘就’, ‘趴’, ‘窗口’, ‘上’, ‘看’, ‘呗’, ‘!’]
分词后需要去停用词,并且需要用空格分隔列表中的元素。示例如下:
首先导入停用词列表文件:
stopword=[line.strip() for line in open('C:/Users/hp/Desktop/毕业设计/毕设/minglue/publish/data/user_data/stopwords.txt','r',encoding='utf-8').readlines()]
然后去停用词,有两种方式
(1)用del方式直接去停用词:
result=[]
for i in range(0,len(b)):
if b[i] in stopword:
del b[i]
result.append(' '.join(b))
print(result)
输出结果:[‘元芳 趴 窗口’]
(2)先将停用词转化为空格,再遍历列表去空格:
result=[]
for i in range(0,len(b)):
if b[i] in stopword:
b[i]=' '
while ' ' in b:
b.remove(' ')
result.append(' '.join(b))
print(result)
输出结果:[‘元芳 趴 窗口’]
(ps:本人做毕业设计的时候,第一种方式总出bug,调试不通,被迫换第二种方式。可能是当时del用的不对,也可能是其他原因)