日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

r语言上机文本分析与词云绘制_倚天屠龙记的文本分析

發布時間:2024/10/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 r语言上机文本分析与词云绘制_倚天屠龙记的文本分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ?《倚天屠龍記》作為金庸先生的經典作品,在無數人心目中留下了深刻的印象,基本上隔一段時間這部經典作品就會被重新拍成電影或者電視劇,可見觀眾的喜愛程度。雖然本人沒有完完全全拜讀過先生的這部作品,但是作為劇迷,也是刷了好幾遍電視劇,對其中的人物印象頗深。

? ? ? 前段時間剛剛開始接觸python,在python的初步入門階段結束后,決定對《倚天屠龍記》這本經典小說進行文本分析,挖掘其中的人物關系。主要使用的軟件為python,R以及Gephi,涉及到的內容為文本處理和網絡分析。主要思路為:首先利用python的jieba庫對文本進行分詞處理,其次統計小說主要人物的出場次數以及先后次序,最后構建人物關系鄰接矩陣,建立人物關系網絡。

##讀入文本txt?=?open("Documents/Python?Scripts/倚天屠龍記.txt","r",?encoding?=?"utf-8").read()repeatname = open("Documents/Python Scripts/主角名單.txt","r", encoding = "utf-8").read()#print(txt)

? ? ? ?從讀入的《倚天屠龍記》文本可以看出文章有大量的標點符號,這會對后續的分詞會產生影響,因此需要去掉這些標點符號。

##去掉文本的標點符號punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~“”?,!《》【】()、。:;’‘……¥·"""dicts={i:'' for i in punctuation}punc_table=str.maketrans(dicts)txt1=txt.translate(punc_table)#print(txt1)

? ? ? ?處理后的文本已經完全沒有標點符號,接下來進行分詞處理。

##使用python中的jieba庫進行分詞處理import?loggingimport jiebajieba.setLogLevel(logging.INFO)##jieba庫沒有“楊逍”這個詞,需要添加jieba.add_word("楊逍")words = jieba.lcut(txt1)

? ? ? ?分詞結果包含大量的詞語,為便于觀察,我們繪制中文詞云進行展示。

##繪制詞云import wordcloudimport matplotlib.pyplot as plt w = wordcloud.WordCloud(font_path = "Documents/Python Scripts/SimHei.ttf",width = 600, height = 400)w.generate(" ".join(words))plt.imshow(w, interpolation="bilinear")plt.axis("off")plt.show()

? ? ? ?由于jieba庫分詞的結果會包含單獨的一個字,因此從詞云上可以看出使用最多的是“的”以及代詞,這也符合中文書寫習慣。上面的圖是一個簡單的詞云,下的圖則是根據封面上趙敏的身形繪制的詞云。

##統計分詞出現的次數counts = {}for word in words: if len(word) == 1: continue else: counts[word] = counts.get(word, 0) + 1items = list(counts.items())items.sort(key=lambda x:x[1], reverse=True) for i in range(15): word, count = items[i] print ("{0:<10}{1:>5}".format(word, count))
張無忌說道自己張翠山甚么一個謝遜
4466159117109101596994
武功周芷若咱們教主趙敏心中一聲
884792783756752689 677

? ? ? ?在上述的分詞統計中,我們沒有統計單獨的一個字。從分詞的統計數據可以看出,張無忌是當之無愧的C位。由于分詞結果包含許多文學性的詞匯,而我們更想統計每個人物出場的次數,因此刪掉一些排序靠前的無關詞語,對出現的人物進行統計。

##刪掉無關詞后主角的出場次數counts = {}excludes = {"說道", "自己", "甚么", "一個", "武功", "咱們", "教主", "心中","一聲","只見","少林","弟子","明教","不是","便是","不知","如何", "如此","之中","出來", "師父", "突然", "他們", "只是", "不能","我們","今日","心想","知道","二人", "兩人", "不敢", "雖然", "姑娘", "這時","眾人", "原來", "可是","當下","身子", "之下","你們","手中", "左手","倘若","之后","起來","登時","卻是","跟著", "喝道","武當派","武當","身上","難道","長劍","臉上","峨嵋派","說話","性命","見到","這個","丐幫","魔教","不可","少林寺","兄弟", "之間","正是"}for word in words: if len(word) == 1: continue else: counts[word] = counts.get(word, 0) + 1 for word in excludes: del counts[word] items = list(counts.items())items.sort(key=lambda x:x[1], reverse=True) for i in range(15): word, count = items[i] print ("{0:<10}{1:>5}".format(word, count))張無忌 4466
張翠山 1098
謝遜 944
周芷若 792
趙敏 752
殷素素 521
楊逍 509
無忌 464
張三豐 426
義父 418
滅絕師太 403
俞蓮舟 362
金花婆婆 310
殷梨亭 285
俞岱巖 274

? ? ? ?俞蓮舟的出場次數竟然這么高,對這個人物完全沒有印象,他是張三豐豐的第二個徒弟。由于每個人物有大量的稱呼,因此在考慮多種稱呼之后,對每個人物出場的次數重新進行統計。

items_word = list()for i in range(len(items) -1): items_word.append( str(items[i]).split(",")[0].strip("(''"))repeatname1 = repeatname.split("\n")count_new = list()name_new = list()for i in range(len(repeatname1) - 1): name1 = str(repeatname1[i]).split(" ") count_a = 0 for j in range(len(name1)): if j == 0: name_new.append(name1[j]) if name1[j] in items_word: word, count = items[items_word.index(name1[j])] count_a = count_a + count #print ("{0:<10}{1:>5}".format(word, count)) ????count_new.append(count_a)final_name_count = dict(zip(name_new, count_new))final_name_count = sorted(final_name_count.items(), key=lambda x:x[1], reverse = True)#利用R語言繪制柱狀圖p <- ggplot(data = count_name[1:15,], aes(x =reorder(name, - count), y = count, fill = factor(group))) # theme(panel.grid.major =element_blank(), # panel.grid.minor = element_blank(), # panel.background = element_blank(), # panel.border= element_rect( fill = NA))p + geom_bar(stat="identity") + xlab("") + ylab("") + scale_fill_manual(values = gray(0:15/15)) + theme(legend.position = "none", axis.text.x = element_text(size = 8, angle = 45, hjust = 0.5, vjust = 0.5), axis.text.y = element_text(size = 8))

? ? ? ?上述柱狀圖只展示了出場次數最高的前15名主角,可以看出張無忌的出場次數最高,是整本小說的核心人物,同時他的紅顏(趙敏,周芷若,殷離)以及明教和武當派相關的人物出場次數也很高,這些都是小說的重點講述內容。另外張無忌的父母張翠山和殷素素的出場次數也很靠前,一定程度上說明了作者對他們的偏愛。

? ? ? ?對小說中人物出場的先后次數進行統計,主要通過統計每個人物在文章中的每個段落中出現的次數。

##統計人物出場的先后次序##首先對文本中人物的多種名稱進行處理txt2 = txtfor i in range(len(repeatname1) - 1): name1 = str(repeatname1[i]).split(" ") for j in range(len(name1)): txt2 = txt2.replace(name1[j], name1[0])txt2 = txt.split("\n ")name_sectence = list()for j in range(len(name_new)): temp = list() for i in range(len(txt2)): txt_sectence = str(txt2[i]).replace("\n", "") temp.append(txt_sectence.count(name_new[j]))????name_sectence.append(temp)?draw_pciture function(a, b){ p geom_line() + xlab("") + ylab("") + ggtitle(label = b) + theme(legend.position = "none", axis.text.x = element_text(size = 8), axis.text.y = element_text(size = 8)) + theme(plot.title = element_text(size=9,hjust=0.5)) return(p)}

? ? ? ?上圖只展示了和張無忌有關的8位人物出場的先后次數,可以看出張無忌基本上貫穿整本小說的始末,殷離、周芷若、趙敏、小昭等張無忌的紅顏在后半段開始頻繁出現,說明后半段小說中感情線是作者的一個著力點。另外殷素素和張翠山在小說剛開始的出現次數急速上升,后來就不再變化了,這和小說的情節一致。謝遜則在小說的開始和后半段出現的次數比較多,中間沒有出現過,應該是自己單獨在冰火島的時候。

? ? ? 在考慮了人物的出場次數和先后順序之后,開始考慮人物之間的聯系,首先構建鄰接矩陣,并且利用Gephi繪制網絡。

##生成鄰接矩陣import numpy as npadjacency_matrix = np.zeros(shape=(len(name_new), len(name_new)))for i in range(len(name_sectence[0])): temp1 = list() for j in range(len(name_new)): if name_sectence[j][i] != 0: temp1.append(j) for k in range(len(temp1)): for l in range(len(temp1)): if (k != l): adjacency_matrix[temp1[k]][temp1[l]] = adjacency_matrix[temp1[k]][temp1[l]] + 1 else:????????????????adjacency_matrix[temp1[k]][temp1[l]]?=??adjacency_matrix[temp1[k]][temp1[l]]?+?0??????????

? ? ? ?該網絡中節點越大表示該節點的度越高,連邊的顏色越重表示兩個節點間的聯系越強。從該網絡圖可以看出張無忌是整個人物關系網絡的核心,他和趙敏以及周芷若的聯系最多,這三個人間的感情糾葛是整本小說的重點。對人物關系網絡進行社區檢測,展示在下圖中,整個網絡共分為三個社區,不同顏色的節點代表不同的社區。張無忌周邊的人組成了一個大的社區組。

總結

以上是生活随笔為你收集整理的r语言上机文本分析与词云绘制_倚天屠龙记的文本分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。