“万方论文”爬取、数据清洗、以及利用word2vec训练model

Chapter1   关于“万方论文”的论文爬取与数据清洗


tips1:爬取数据

【背景】此爬虫是爬取万方自己设定的主题相关文献的

“title”、“abstract”、“link”、”author“、”date“、”keywords“、”link“等信息

【准备内容】爬虫原链接为  https://github.com/EachenKuang/wanfangSpider 项目上修改版。

修改内容如下:将所爬取内容进行了处理。同时将原本应该存入txt文件中结果存在了一个wanfang.sqlite数据库中。可以直接下载SQLiteStudio打开此数据库并且导出sql文件转存入mysql等数据库,使用更加方便。

因此我也上传了github仓库,链接:https://github.com/snowlixue/wanFangSpider-dataPretreatment

【操作提示】

start_urls = [
        'http://s.wanfangdata.com.cn/Paper.aspx?q=的&f=top&p=1']修改其中“的”为你所要爬取的主题。

在pipelines.py文件中修改所要存储的属性信息。

tips2:转存入mysql

【导入mySQL】爬取完成之后,用SQLiteStudio导出sql/csv文件,之后转存入mysql数据库。我用的Navicat客户端。这里要注意的是需要在Navicat中建好含有这些字段的表,然后表后右击导入sql/csv文件。之后加入自增的id字段。(否则数据清洗一定会出错)

tips3:数据清洗

【删除null值和空格】1.数据导入后title会有很多空格,需要删除。2.由于abstract、title、keywrods很重要,这里采取直接删除其中任一为null的行。3.对id列删除重建,使其可以重新从1自增排序。

import mysql.connector

#连接数据库
conn = mysql.connector.connect(user='root', password='root', database='test')
cursor = conn.cursor()
sql_select = "select * from cnkiinfotest"

try:
    cursor.execute(sql_select)
    result = cursor.fetchall()

    for row in result:
        id = row[0]
        print(id)
        
        # 清除title、abstract、keywords任意为null的项
        if row[1] == None or row[5] == None or row[6] == None:
            cursor.execute("delete from cnkiinfotest where id = %d" % (row[0]))
            conn.commit()
        
        # 将title内无用空格去除
        print(row[1].strip())
        cursor.execute("UPDATE cnkiinfotest SET title = \'%s\' WHERE id = %d" %(row[1].strip(),row[0]))
        conn.commit()
        """
        if row[1] != '':
            title = row[1]
            print("title:" + title.strip())
        if row[5] != '':
            abstracts = row[5]
            print("abstract" + abstracts)
        if row[6] != '':
            keywords = row[6]
            print("keyword:" + keywords)
        # 打印结果
        """

except:
    print("Error: unable to fecth data")

#清理后,id删除重做
cursor.execute("ALTER  TABLE  cnkiinfotest DROP id")
conn.commit()
cursor.execute("ALTER  TABLE  cnkiinfotest ADD id mediumint(6) PRIMARY KEY NOT NULL AUTO_INCREMENT FIRST")
conn.commit()

conn.close()
conn = mysql.connector.connect(user='root', password='root', database='test')

在这里修改user和password信息。

tips4:导出语料库

语料库是为了word2vec训练词向量准备,这里采用abstract制作语料库。其中需要进行分词,然后按行写入txt

import mysql.connector
import jieba

conn = mysql.connector.connect(user='root', password='root', database='test')
cursor = conn.cursor()

f = open("./abstract.txt", "w", encoding='UTF-8')

#将abstract写入txt,为训练词向量准备
try:
    cursor.execute("select * from cnkiinfotest")
    results = cursor.fetchall()
    for row in results:
        print("abstract"+row[5])
        wordlist = jieba.cut(row[5])
        for word in wordlist:
            f.write(word)
            f.write(" ")
        f.write("\n")

except:
    print("something wrong,can't featch all")

conn.close()

tip5:

完成以上所有步骤后就可以对abstract.txt进行模型训练,并且生成词向量了。

这里代码参照了  https://github.com/NLPchina/Word2VEC_java

在项目下新建library文件夹,将abstract.txt存入其中,修改Learn.java文件

  public static void main(String[] args) throws IOException {
    Learn learn = new Learn();
    long start = System.currentTimeMillis();
    learn.learnFile(new File("library/abstract.txt"));
    System.out.println("use time " + (System.currentTimeMillis() - start));
    learn.saveModel(new File("library/javaVector"));

  }

以上就本次爬虫加model训练的全部内容,有问题可以评论区留言。


  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值