札记
PAGE1
Python是一门极度时兴的编程谈话,它免费、易学,况且成效雄壮,在网络编程、图形用户界面编程、科学策画、数据发掘、机械进修、人为智能等方面都有着遍及的哄骗。当日咱们教众人用python找出《天龙八部》《倚天屠龙记》《射雕好汉传》里的主角。
正文关于预处置获得的数据,咱们会实行一些数据统计,剖析数据的统计处境。关于文本数据,一个较量适用的统计数据是词频。所谓词频(WordFrequncy),指的是单词在文本中浮现的次数。
词频的统计—谁是金庸笔下的主角?
详细到小说剖析题目,咱们也许统计小说中的各个脚色的进场次数。显然,关于脚色来讲,要紧人物的进场次数多,词频也较高,因而也许经过词频统计,大体看出小说中谁的主角光环较量强。
假设总共的小说文献的称呼都是“小说名.txt”,编码都是utf8。
仍旧以《天龙八部》为例,首先用codecs模块,读取小说的实质:
withcodecs.open("天龙八部.txt",encoding="utf8")asf:
content=f.read()
操纵人物字典character_info获得《天龙八部》中总共人物的列表chars,并用字符串的.count()法子对chars中单单方物c在content浮现的次数实行计数:
chars=character_info["天龙八部"]
counts=[content.count(c)forcinchars]
为了便利对词频实行排序,咱们将这两个列表变为NumPy数组:
importnumpyasnp
chars=np.array(character_info["天龙八部"])
counts=np.array([content.count(c)forcinchars])
操纵数组的.argsort()法子对单词浮现的次数counts实行排序,获得响应的下标:
idx=counts.argsort()
默许处境下,数组的排序是根据从小到猛实行的。因而,也许哄骗idx[-10:]获得《天龙八部》中浮现次数至多的10个脚色的索引并操纵索引i获得人名及其浮现的次数:
foriinidx[-10:]:
printchars[i],counts[i]
木婉清
段正淳
王语嫣
慕容复
阿朱
乔峰
阿紫
虚竹
萧峰
段誉
从词频统计来看,段誉荣登主角宝座
词频的画图—谁是金庸笔下的主角?
咱们还也许对词频实行画图,进而获得更直觉的结局。
在绘制词频图象以前,须要处置在Matplotlib中显示汉字的题目。
默许处境下,Matplotlib是不能直接显示汉字的。比方,直接增加汉字题目会获得如图1所示的结局:
importmatplotlib.pyplotasplt
plt.title("华文")
plt.show()
图1不能一般显示的华文题目
题目中理当显示“华文”两个字的场合被两个方块替换了,起因是Matplotlib找不到适合的华文字体去显示华文。
为此,咱们须要找到一些帮助华文的字体。
Windows7及以上的系统中,字体库的场所为C:/Windows/Fonts,如:
l宋体:C:/Windows/Fonts/simsun.ttc
Linux系统也许经过fc-list敕令观察已有的字体和响应的场所,如:
l宋体:/usr/share/fonts/truetype/osx-font-family/Songti.ttc
也也许从网高低载字体:
lYaheiConsolas字体:YaHei.Consolas.1.11b.ttf;
字体也许哄骗matplotlib.font_manager中的FontProperties类导入:
frommatplotlib.font_managerimportFontProperties
font_song=FontProperties(fname="C:/Windows/Fonts/simsun.ttc")
个中,fname参数示意字体文献的场所。
云云,咱们就将宋体导入了目标font_song中。
导入后,为了显示汉字咱们在须要写入华文文字的函数中,参加fontProperties参数,指定显示文字的字体为font_song。比方,关于第一小节中的例子,参加参数指定宋体后,题目也许一般显示华文,获得如图2所示的结局:
importmatplotlib.pyplotasplt
plt.title("华文",fontproperties=font_song)
plt.show()
图2一般显示的华文题目
处置图象华文显示的题目后,咱们回到文天职析的案例中。
为了让词频的显示更直觉,也许哄骗plt.barh()函数绘制一个纵向的条形图,来示意《天龙八部》中浮现次数前10位的人物的词频统计结局,如图3所示:
plt.barh(range(10),counts[idx[-10:]])
plt.title("天龙八部",fontproperties=font_song)
plt.yticks(range(10),chars[idx[-10:]],fontproperties=font_song)
plt.show()
个中,横轴是词浮现的次数,纵轴是对应的人物名。
从图3中也许看到,词频图象的显示要比文字更为直觉,不罕见出“段誉是贯串全书的主角”的料想。
为了统计其余小说的词频,咱们界说一个函数find_main_chars(),实行词频统计和画图的进程。该函数采纳两个参数:novel和num,个中novel是小说的称呼,num是显示的主角个数(默觉得10):
图10-3《天龙八部》主角词频统计
deffind_main_chars(novel,num=10):
#读取文献
withcodecs.open("{}.txt".format(novel),encoding="utf8")asf:
content=f.read()
#词频统计
chars=np.array(character_info[novel])
counts=np.array([content.count(c)forcinchars])
idx=counts.argsort()
#画图
plt.barh(range(num),counts[idx[-num:]])
plt.title(novel,fontproperties=font_song)
plt.yticks(range(num),chars[idx[-num:]],fontproperties=font_song)
plt.show()
也许操纵该函数观察其余小说中的词频统计。比方,《射雕好汉传》和《倚天屠龙记》的词频统计如图4和5所示:
图4《射雕好汉传》主角词频统计
图5《倚天屠龙记》主角词频统计
find_main_charecters("射雕好汉传")
find_main_charecters("倚天屠龙记")
从图4和图5中,不罕见出《射雕好汉传》的主角是郭靖以及《倚天屠龙记》的主角是张无忌的论断。
以上结局诠释,词频统计也许较好地找出小说中的主角人物。
干系剖析
找出主角以后,咱们再来哄骗干系剖析的法子,找出下金庸老师笔下,各路好汉英豪的奥秘干系。
以前有人协商过,用Word2Vec生成的词向量存在云云的局面:
vec("北京")-vec("华夏")=vec("巴黎")-vec("法国")
这类局面一般诠释了一种对应干系:
“北京”之于“华夏”,正如“巴黎”之如“法国”.
在gensim中,对应干系也也许哄骗模子的.most_similar()法子来找到。操纵该法子,也许界说函数find_relationship()来寻觅云云的对应干系,该函数采纳a,b,c做为参数,以a和b的干系做为参考,返回与c对应具备好似干系的d。
在函数中,咱们将.most_similar()法子中的postive参数设为b和c构成的列表,并参加negative参数,将其设为惟独a一个元素构成的列表。.most_similar()法子返回的结局仍旧是前10个关系词及其对应的如同度,这边取返回结局的第一个,做为终究找到的d。
因而,函数find_relationship()的界说为:
deffind_relationship(a,b,c):
d,_=model.most_similar(positive=[c,b],negative=[a])[0]
print"{}之于{},正如{}之于{}".format(a,b,c,d)
操纵find_relationship()函数,咱们也许找出人物之间存在的一些奥秘干系:
find_relationship("郭靖","黄蓉","杨过")
find_relationship("郭靖","华筝","杨过")
find_relationship("段誉","令郎","韦小宝")
find_relationship("郭靖","降龙十八掌","黄蓉")
郭靖之于黄蓉,正如杨过之于小龙女
郭靖之于华筝,正如杨过之于郭芙
段誉之于令郎,正如韦小宝之于大人
郭靖之于降龙十八掌,正如黄蓉之于打狗棒法
最铁的干系或者是这对:
find_relationship("杨过","小龙女","韦小宝")
find_relationship("令狐冲","盈盈","韦小宝")
find_relationship("郭靖","黄蓉","韦小宝")
杨过之于小龙女,正如韦小宝之于康熙
令狐冲之于盈盈,正如韦小宝之于康熙
郭靖之于黄蓉,正如韦小宝之于康熙
这些干系也能左证哄骗词向量模子的正当性。
以上实质节选自
《自学Python—编程原形、科学策画及数据剖析》是面向Python入门者的一册适用进修札记。做家在一年的功夫里,经过自学,从一个Python“小白”生长为了一个Python“内行”,并在这个进程顶用札记的样式纪录了本人进修和哄骗Python的阅历。
本书基于进修札记而来,实质更迫临读者,例子也尽或者地简洁易懂。除了先容用法,书中还参加了良多道懂得释,并辅以实例实行诠释。因而,与其余Python竹帛比拟,本书不单具备知其然的成效,还具备知其于是然的特征,进而能更好地协助入门者实行进修。
预览时标签不成点收录于合集#个