python+virtualenv+pycharm+詩歌

準(zhǔn)備步驟

安裝python3,下載CSDB,任意選擇位置git clone ...

環(huán)境配置
  1. pycharm中,command+,選擇interpretercreate virtualenv,選擇python版本,location自己定(之后安裝的庫都是在這個(gè)文件夾里),和程序文件所在位置無關(guān)。
  2. 在終端中,定位到virtualenv所在位置,source bin/activate,激活,可看到(lenv)前綴。可用pip命令安裝各種庫。
  3. 回到pycharm中,仍然選擇剛才創(chuàng)建的virtualenv,可看到多了剛才安裝的庫。
db文件

sqlite3 filename打開,有.help、.table等命令。

word_level_analyzer.py

文件前加:# coding:utf-8
在函數(shù)cut_qts_to_words中,有如下變量:

 char_counter = Counter()  # 字頻統(tǒng)計(jì)
 author_counter = Counter()  # 每個(gè)作者的寫詩篇數(shù)
 vocab = set()  # 詞匯庫
 word_counter = Counter()  # 詞頻統(tǒng)計(jì)
 genre_counter = defaultdict(Counter)  # 針對每個(gè)詞性的Counter
  • 源文件格式為num+author+poet,用list區(qū)分即可,統(tǒng)計(jì)作者、漢子個(gè)數(shù);
  • thulac庫中的lex_analyzer.cut分割詞語和對應(yīng)的詞性,記錄下來,邊統(tǒng)計(jì)邊輸出進(jìn)展。
    分詞后輸出文檔如下(只選取了一首詩,詩的末尾不能有轉(zhuǎn)折,否則程序會出錯(cuò)):
    qts_words_list
  • gensim中的Word2Vec得到詞向量;
  • 打印結(jié)果,按序輸出語句為:print_counter(author_counter.most_common(10)),counter格式能自動選取頻率最高的打印出來。
construct_poets_network.py
  • 調(diào)用utils.py函數(shù)讀取作者和詩歌內(nèi)容。由于不用進(jìn)行詞法分析,速度快。
  • 用CSDB來確定作者(def get_alter_names)。打開.db文件:
conn = sqlite3.connect(db_file)
cursor = conn.cursor()

識別作者有兩個(gè)問題:

  1. 重名
    解決方法:首先用詩人名字在.db的BLOG_MAIN中查找:
cursor.execute('SELECT c_personid, c_birthyear, c_deathyear FROM BIOG_MAIN WHERE c_name_chn LIKE?', (author_pattern,))
# 記錄該人的生卒年和ID信息
person_info_list = cursor.fetchall()

如果候選人列表中的某人生卒年和唐朝重合,則確定此人就是要找的人。

  1. 別稱
    由于有的作者別稱也是日常用詞,因此刪除這些別稱。
  • def get_refer_relations計(jì)算關(guān)系
 for 從CSDB中統(tǒng)計(jì)出的詩人
     for 每一首從qts中統(tǒng)計(jì)出詩歌
          if該詩歌作者不在CSDB中跳過
          查找該詩人的名字(包括所有別稱)

保存在reference_relations.pkl中。

visualize_poets_network.py

三個(gè)函數(shù):

  • 得到排名靠前的關(guān)系def get_concerned_relations_by_range
  • 通過已有的不同時(shí)期唐詩人名單,計(jì)算之間的關(guān)系get_concerned_relations_by_authors
  • 畫圖generate_html_page
//得到link數(shù)據(jù) 
filtered_authors.add(refered_by)
 filtered_authors.add(refered)
 count = math.sqrt(count)
 line_width = min_link_width + width_slope * (count - min_refer_count)
 links_text += links_item_format % (refered_by, refered, line_width)
//處理節(jié)點(diǎn)數(shù)據(jù)
//和已經(jīng)寫好的`html`頭尾合并

展示圖如下:

盛唐詩人關(guān)系圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容