python爬取歌詞制作詞云-to be continued...

參考這篇文章:python爬取歌詞并生成詞云圖 - qq_39317214的博客 - CSDN博客

注:目前爬取到的歌詞是歌手的TOP50首歌克饶,如果要抓全部的酝蜒,還需要改進(jìn)

已完成:爬取歌詞--》詞頻分析--》畫詞云

未來需要加上:

不以文本文件的形式儲(chǔ)存,而是存到數(shù)據(jù)庫(kù)里讀取來操作;

不止TOP50矾湃;

同時(shí)抓取所屬專輯信息等亡脑,之后可按專輯、年份來看意象洲尊、情感極性的變化远豺,≈專輯主題風(fēng)格奈偏;

對(duì)爬取到的歌詞預(yù)過濾坞嘀,去除音樂制作人、樂手信息惊来;-----done丽涩,190207

判斷是否是Live歌曲,以免重復(fù)計(jì)算裁蚁;


其中主要遇到過的問題有:

1矢渊、編碼解碼

在file.write(str(text))時(shí)報(bào)錯(cuò):

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

原因是Python自然調(diào)用ascii編碼解碼程序去處理字符流,當(dāng)字符流不屬于ascii范圍內(nèi)枉证,就會(huì)拋出異常(ordinal not in range(128))矮男。所以解決方法就是修改默認(rèn)編碼,需要注意的是需要先調(diào)用reload方法室谚。

進(jìn)一步解釋可參考UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128) - 小樓 - 博客園

解決辦法:

在開頭加上:

import sys

reload(sys)

sys.setdefaultencoding( "utf-8" )

2毡鉴、歌名中包含了句點(diǎn)"?"等非法字符,導(dǎo)致以歌名作為文件名來創(chuàng)建文本文件key.txt時(shí)出現(xiàn)問題無法成功創(chuàng)建:

比如張懸有一首歌是“So?!...”秒赤,在運(yùn)行時(shí)就會(huì)報(bào)錯(cuò):

? ? file = open(key+'.txt', 'a')

IOError: [Errno 22] invalid mode ('a') or filename: u'So?!....txt'

此時(shí)要將歌名中的這些非法字符去掉猪瞬,比較好的方法是替換為下劃線_ ,參考Python中過濾Windows文件名中的非法字符 - Zerokas的博客 - CSDN博客? 寫了以下替換函數(shù):

#函數(shù):當(dāng)歌名中包含'?'等非法字符時(shí)無法創(chuàng)建文件為.txt入篮,對(duì)這類歌名將非法字符替換成下劃線_

def correct_filename(song_name):

? ? ? ? pattern = r'[\\/:*?"<>|\r\n]+'

? ? ? ? new_song_name = re.sub(pattern, "_", song_name)

? ? ? ? return new_song_name

2.1陈瘦、unicode字符串轉(zhuǎn)換成string字符串(文件名可以用.結(jié)尾,所以不改也沒事)

這里仍然涉及到編碼問題潮售,代碼里一開始爬取到的歌名(key)是Unicode字符串痊项,在判斷是否是以“.”句點(diǎn)結(jié)尾時(shí)需要轉(zhuǎn)換成string字符串锅风,因此用到了key.encode('utf-8')。(因?yàn)槲业拇a文件是用utf-8編碼的)

參考:Python2.X如何將Unicode中文字符串轉(zhuǎn)換成 string字符串 - qiao1234 - 博客園

2.2鞍泉、去停用詞時(shí)的轉(zhuǎn)碼

但是在去停用詞時(shí)又遇到了編碼的問題(所以應(yīng)該換用py3.x啊這個(gè)bug真的太難受了6羧酢):

UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal

if word not in stopwords:

因?yàn)槲乙婚_始導(dǎo)入停用詞的代碼是:

def stopwordslist(filepath):

? ? stopwords = [line.strip() for line in open(filepath, 'r').readlines()]

? ? return stopwords

只要在這一步將詞轉(zhuǎn)換成unicde編碼就可以進(jìn)行之后的判斷詞是否在停用詞表中了:

? ? stopwords = [line.strip().decode("gbk") for line in open(filepath, 'r').readlines()]

3、制作詞云過程中會(huì)遇到的小問題

3.1塞弊、字體

一開始的結(jié)果是這樣的:

選錯(cuò)字體生成的詞云圖

還以為是編碼的問題沒搞定造成的漱逸,但是看了下中間過程中生成的字典,已經(jīng)是正確的了游沿,所以只有另一個(gè)可能:字體饰抒。

由于歌詞大部分是中文,因此要選擇支持中文的字體诀黍,比如當(dāng)我換成另一個(gè)支持中文的字體后袋坑,生成的圖片中的字就正常了:


更換為支持簡(jiǎn)體中文字體后生成的詞云

但是馬上又有了2個(gè)新的問題:詞的分布不是按照我選用的圖片來的(我選的是一張人像照,而圖片里詞布滿了整個(gè)畫布)眯勾,以及枣宫,詞云中有大量類似“編曲”“作詞”“錄音室”這種非真正歌詞內(nèi)容的詞,反而處在最高頻率列表上吃环,所以……并不是網(wǎng)上摘一段代碼就可以完事了啊(╯‵□′)╯︵┻━┻

3.2也颤、在分詞前先剔除歌詞中音樂制作信息的內(nèi)容

觀察之前得到的詞云結(jié)果,可以發(fā)現(xiàn)有相當(dāng)多的音樂制作人信息分布在高頻詞頻表上郁轻,如何將這一部分詞剔除掉呢翅娶?這里有兩個(gè)方法:

方法1、在去停用詞后好唯,針對(duì)抓取到的歌詞特性竭沫,再過濾一遍分詞文本

通過觀察爬取到的歌詞,新生成了一個(gè)歌詞過濾文本骑篙,對(duì)去停用詞后的分詞文本進(jìn)行過濾蜕提,得到的詞云就干凈了很多,能夠展現(xiàn)出重點(diǎn)了:

但是這需要不時(shí)更新這個(gè)歌詞過濾文本靶端,加入更多的詞曲作者谎势、編曲者、音樂人等人的名字躲查,需要不斷豐富它浅。

方法2、在去停用詞前就對(duì)爬取到的歌詞做一判斷镣煮,剔除音樂制作信息的部分姐霍,僅保留純歌詞部分

可以發(fā)現(xiàn),爬取到的歌詞前幾行是音樂制作人 的信息,格式為“xxx:xxx”镊折,可以從冒號(hào)來判斷胯府,剔除一行歌詞中包含中文或英文冒號(hào)的部分,之后再進(jìn)行分詞恨胚、去停用詞骂因。這會(huì)產(chǎn)生一個(gè)新的問題,即真正歌詞中包含冒號(hào)的內(nèi)容也會(huì)被剔除赃泡,考慮到這部分歌詞存在的概率很小寒波,即使存在,對(duì)詞頻表的結(jié)果影響也很小升熊,因此暫時(shí)忽略不計(jì)俄烁。附上這一方法的代碼:

def filter_producers(lyrics):#過濾歌詞中制作人信息

? ? ? ? lyrics_filter_producers = ''

? ? ? ? for line in lyrics:

? ? ? ? ? ? ? ? if (line.find(':') != -1) | (line.find(':') != -1):#查找“歌詞”中包含中英文冒號(hào)的語(yǔ)句,string.find()返回-1表示找不到

? ? ? ? ? ? ? ? ? ? ? ? pass

? ? ? ? ? ? ? ? else:

? ? ? ? ? ? ? ? ? ? ? ? lyrics_filter_producers += line

? ? ? ? ? ? ? ? ? ? ? ? lyrics_filter_producers += '\n'

? ? ? ? return lyrics_filter_producers

3.3级野、讓詞云按照想要的圖片來生成

詞云沒有按照我想要的圖片的輪廓來生成的原因页屠,是我采用的圖片背景太過復(fù)雜、有別的顏色蓖柔,所以wordcloud沒有辦法判斷辰企,參考生成詞云之python中WordCloud包的用法 - 飛翔射手座 - CSDN博客的方法,選取背景是全白的圖片况鸣,或者我們對(duì)圖片做一些改動(dòng)牢贸,讓它的背景變成全白:

mask : nd-array or None (default=None) //如果參數(shù)為空,則使用二維遮罩繪制詞云懒闷。如果 mask 非空十减,設(shè)置的寬高值將被忽略,遮罩形狀被 mask 取代愤估。除全白(#FFFFFF)的部分將不會(huì)繪制,其余部分會(huì)用于繪制詞云速址。如:bg_pic = imread('讀取一張圖片.png')玩焰,背景圖片的畫布一定要設(shè)置為白色(#FFFFFF),然后顯示的形狀為不是白色的其他顏色芍锚∥粼埃可以用ps工具將自己要顯示的形狀復(fù)制到一個(gè)純白色的畫布上再保存,就ok了并炮。

為了方便默刚,我直接用了PPT里的“刪除背景”的功能(在PPT中,怎么刪除圖片的背景(摳圖)_百度經(jīng)驗(yàn))逃魄,將圖片處理成全白后生成了田馥甄的TOP50歌曲的歌詞詞云:


簡(jiǎn)單概括一下荤西,田馥甄的歌曲主要表達(dá)的就是:“就算沒有人陪,就算自己很寂寞,也要擁抱眼淚邪锌,遺忘所有傷勉躺,謝謝這個(gè)世界,相信自己還是可以有愛和快樂的”觅丰,嗯真的是很倔強(qiáng)的歌手呢:)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末饵溅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子妇萄,更是在濱河造成了極大的恐慌蜕企,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冠句,死亡現(xiàn)場(chǎng)離奇詭異糖赔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)轩端,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門放典,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人基茵,你說我怎么就攤上這事奋构。” “怎么了拱层?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵弥臼,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我根灯,道長(zhǎng)径缅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任烙肺,我火速辦了婚禮纳猪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘桃笙。我一直安慰自己氏堤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布搏明。 她就那樣靜靜地躺著鼠锈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪星著。 梳的紋絲不亂的頭發(fā)上购笆,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音虚循,去河邊找鬼同欠。 笑死样傍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的行您。 我是一名探鬼主播铭乾,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼娃循!你這毒婦竟也來了炕檩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤捌斧,失蹤者是張志新(化名)和其女友劉穎笛质,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捞蚂,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妇押,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姓迅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敲霍。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖丁存,靈堂內(nèi)的尸體忽然破棺而出肩杈,到底是詐尸還是另有隱情,我是刑警寧澤解寝,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布扩然,位于F島的核電站,受9級(jí)特大地震影響聋伦,放射性物質(zhì)發(fā)生泄漏夫偶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一觉增、第九天 我趴在偏房一處隱蔽的房頂上張望兵拢。 院中可真熱鬧,春花似錦抑片、人聲如沸卵佛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至疾牲,卻和暖如春植捎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阳柔。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工焰枢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓济锄,卻偏偏與公主長(zhǎng)得像暑椰,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子荐绝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 首頁(yè) 資訊 文章 資源 小組 相親 登錄 注冊(cè) 首頁(yè) 最新文章 IT 職場(chǎng) 前端 后端 移動(dòng)端 數(shù)據(jù)庫(kù) 運(yùn)維 其他...
    Helen_Cat閱讀 3,878評(píng)論 1 10
  • 姓名:鐘悅?cè)A 公司:佳音英語(yǔ) 【日精進(jìn)打卡第一百二十六天】 【知~】 《六項(xiàng)精進(jìn)》0遍 《大學(xué)》1遍 《弟子規(guī)》0...
    Sarah鐘閱讀 242評(píng)論 0 0
  • 今天是什么日子 起床:7:40 就寢:23:00 天氣:晴 心情:無法訴說 叫我起床的不是鬧鐘是夢(mèng)想 年度目標(biāo)及關(guān)...
    拉薩煜閱讀 130評(píng)論 0 1
  • 阿米爾罕是我最喜歡的電影人,沒有之一(當(dāng)然,我看過的電影并不多)池户。他不但是最好的宣傳家,還是深情的教育家和...
    伏羲師范熊芳閱讀 1,306評(píng)論 0 6
  • 在重慶的這些天 一本有關(guān)王陽(yáng)明心學(xué)的書被看完了 也跟著大師對(duì)人性有了更深刻的思考 心即理 格物就是正念 致知就是實(shí)...
    晉槐子的新三觀閱讀 271評(píng)論 0 2