“萬方論文”爬取、數據清洗、以及利用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訓練的全部內容,有問題可以評論區留言。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章