语料是文本相似性分析程序的工作数据,它可以是多个文本文件,也可以是存储在数据库的多条文本记录。
语料的整理是既耗时又费力地工作,好在我们已经准备好了语料,同学们可以免费使用这些语料。项目训练的宗旨是贴近商业需求,在商业应用中语料一般都存储在数据库中,例如论文的查重、相似性新闻推荐等程序,都会从数据库中提取论文和新闻,然后与待比对的论文或新闻进行相似性分析。
把语料存储到数据库,需要您掌握MySQL数据库知识,能够将MySQL数据库安装到本机电脑或服务器,将语料存储到数据库,从数据库查询和读取语料等知识。在后面的训练中,我们假设您已经掌握了这些知识。
项目使用的语料是若干个文本文件,每个文本文件是一条新闻内容。

新闻内容由标题和正文构成。

需要将这些文本文件导入到MySQL数据库,数据库名称是newsdb,表名称是news。

导入语料到数据库的Python代码如下:
#导入pymysql模块
import pymysql as mysql
#导入正则模块
import re
#导入OS模块
import os
# 定义数据库连接函数
def connect_database():
try:
conn = mysql.connect(
host='127.0.0.1',
user='root',
password='123456',
database='newsdb'
)
return conn #获取配置数据
except Exception as e:
print(e)
return "error"
# 新闻稿件测试数据写入数据库表
def file_to_datatable():
content = []
# 连接数据库
conn = connect_database()
if conn == "error":
print("数据库连接错误")
else:
data = get_data_from_file()
# 获取Curso对象
cursor = conn.cursor()
#cursor.execute('SET NAMES utf8mb4')
count = 0
try:
for item in data:
sql = "INSERT INTO news(guid,title,content) VALUES('%s','%s','%s')"
text = item[2]
text = text.replace("'","")
cursor.execute(sql % (item[0],item[1],text))
print("写入 %d 条记录" % (count+1))
count += 1
conn.commit()
except Exception as e:
conn.rollback()
print(e)
# 关闭数据库连接
finally:
cursor.close()
conn.close()
# 去除文本控制符
def remove_control_chars(text):
text = re.sub(r'[\x00-\x1F\xc2\x20\xa0\u3000]+','',text)
return text
# 从文件读取数据
def get_data_from_file():
newlist = []
#待遍历的目录路径
path = "e:/data"
#调用listdir方法遍历path目录
dirs = os.listdir(path)
# 读取文本内容
for file in dirs:
filename = os.path.join(path,file)
basename, ext = os.path.splitext(file)
with open (filename,"r",encoding='utf-8') as fp:
lines = fp.readlines()
# 读取标题
title = remove_control_chars(lines[0])
content = remove_control_chars("".join(lines))
newlist.append((basename,title,content))
return newlist
if __name__ == '__main__':
file_to_datatable()导入语料数据到MySQL数据库之前,需要做下面的几项工作:
(1)在计算机上安装MySQL8.0数据库;
(2)建立newsdb数据库;
(3)在newsdb数据库下建立news表,表结构参见表1。
数据库建好后,将语料压缩包解压到任意磁盘目录下,修改上述代码对应的语料文件所在磁盘目录,修改数据库连接地址、账号和登录密码,然后执行程序,将语料数据导入到MySQL数据库。
现在我们已经构建好了语料库,下一步的工作就是构建文本相似性分析开发项目,编写项目代码。