山东大学2018级项目实训2021-7-3
时间:2021年7月3日-7月4日
项目题目:基于关键词的语义泛化系统
1.具体工作
1.通过增加过滤条件实现,降低使用内存
过滤函数具体代码段如下:最终输出结果是只含有两个词的词典文件,与其对应的向量文件
# 过滤
def wordfilter (txt):
'''
以下过滤:
* 纯数字
* 带英文标点符号,且长度大于1的
标点: [,;&:]
* 重复3个以上
例如:好好好, 天天天, 的的的
* 纯英文
* 英文字母+英文标点
* 中文标点: [。,、“”?!:.()~?-……)(/]
'''
lstKey = [
r'^\d+$', # 纯数字
r'^.+[\-\.,;&:\'].$', # 带英文标点符号,且长度等于1的
r'^[。、“”?!:()~\?\-……,=)(/【】——~;]+$',
r'^[\-\.,;&:\'"!+;*·」_’‘%@`「<>]+$', # 中文标点,英文标点
r'^(.)\1{2,}$', # 重复3个以上
r'^([a-z])+$', # 纯英文字母
r'^([a-z])[a-z\-\.,;&:]+$', # 英文字母+英文标点
r'^.+[。、“”?!:()~\?\-……)(/].*$', # 带中文标点的
r'^[\u4E00-\u9FA5]{,1}$', # 任何单个中文字符
r'^[\u4E00-\u9FA5]{3,}$' #三个及以上中文字符
]
ret = IsMatch(txt, lstKey, tf=1)
return ret
最终输出结果是只含有两个词的词典文件,与其对应的向量文件
2.分段式存储,利用了简单的if-else语句,当到达规定的行数时,将其在内存中释放
具体代码实现:
if i < 1100000:
chars.append(x[0])
v = [float(i) for i in x[1:]]
vectors.append(v)
else:
if i==1100000:
chars.append(x[0])
v = [float(i) for i in x[1:]]
vectors.append(v)
if not os.path.exists(outpath):
os.mkdir(outpath)
savetofile('\n'.join(chars), os.path.join(outpath, 'word1.txt'))
np.save(os.path.join(outpath, 'vector1.npy'), np.array(vectors))
chars.clear()
vectors.clear()
else:
if i < 2200000:
chars.append(x[0])
v = [float(i) for i in x[1:]]
vectors.append(v)
else:
if i == 2200000:
chars.append(x[0])
v = [float(i) for i in x[1:]]
vectors.append(v)
if not os.path.exists(outpath):
os.mkdir(outpath)
savetofile('\n'.join(chars), os.path.join(outpath, 'word2.txt'))
np.save(os.path.join(outpath, 'vector2.npy'), np.array(vectors))
chars.clear()
vectors.clear()
else:
if i < 3300000:
chars.append(x[0])
v = [float(i) for i in x[1:]]
vectors.append(v)
else:
if i == 3300000:
chars.append(x[0])
v = [float(i) for i in x[1:]]
vectors.append(v)
if not os.path.exists(outpath):
os.mkdir(outpath)
savetofile('\n'.join(chars), os.path.join(outpath, 'word3.txt'))
np.save(os.path.join(outpath, 'vector3.npy'), np.array(vectors))
chars.clear()
vectors.clear()
else:
if i <4400000:
chars.append(x[0])
v = [float(i) for i in x[1:]]
vectors.append(v)
else:
if i == 4400000:
chars.append(x[0])
v = [float(i) for i in x[1:]]
vectors.append(v)
if not os.path.exists(outpath):
os.mkdir(outpath)
savetofile('\n'.join(chars), os.path.join(outpath, 'word4.txt'))
np.save(os.path.join(outpath, 'vector4.npy'), np.array(vectors))
chars.clear()
vectors.clear()
else:
if i < 5500000:
chars.append(x[0])
v = [float(i) for i in x[1:]]
vectors.append(v)
else:
if i == 5500000:
chars.append(x[0])
v = [float(i) for i in x[1:]]
vectors.append(v)
if not os.path.exists(outpath):
os.mkdir(outpath)
savetofile('\n'.join(chars), os.path.join(outpath, 'word5.txt'))
np.save(os.path.join(outpath, 'vector5.npy'), np.array(vectors))
chars.clear()
vectors.clear()
else:
if i < 6600000:
chars.append(x[0])
v = [float(i) for i in x[1:]]
vectors.append(v)
else:
if i == 6600000:
chars.append(x[0])
v = [float(i) for i in x[1:]]
vectors.append(v)
if not os.path.exists(outpath):
os.mkdir(outpath)
savetofile('\n'.join(chars),
os.path.join(outpath, 'word6.txt'))
np.save(os.path.join(outpath, 'vector6.npy'),
np.array(vectors))
chars.clear()
vectors.clear()