0
点赞
收藏
分享

微信扫一扫

Python | 根据指定文件生成词云图 (educoder)

沉浸在自己的世界里 2022-03-30 阅读 63
python

任务:编写程序,编好后,把多个文本文件(中文、英文或中英文语言混合的文本文件,编码格式为UTF-8,扩展名为txt)放到程序所在目录。程序运行时,能把程序所在目录下所有文本文件找出来,并显示出文件基本名(基本名前面加上“X---”,X为序号,从1-N,N为文本文件的个数),用户输入某个序号后(输入错误,要提示重新输入,直到输入正确为止),便能够自动统计对应的文件中的中文词汇和英文单词的个数,按照个数由高到低排序,显示统计结果(即每个词汇和词汇出现的次数,并将结果存入另一个文本文件(编码格式采用UTF-8),并生成词云图,并把图显示出来。

程序流程:

代码:

# -*- coding: utf-8 -*-
import os
import jieba
import wordcloud

def Read_txtName():
'''
显示出文件基本名
:return:基本列表list
'''

list = os.listdir('.')
for i in range(1,len(list)):
print('{:d}--'.format(i) + list[i])
return list


def Output_txt(list):
'''
输入指定文件,进行分词,统计,并输出end.txt文件
:param list: 文件基本名 list
:return:
'''

f = None
try:
fp_name = list[int(input('请输入列表中文件的序号:'))]
f = open(fp_name, 'r', encoding='utf-8')

# 分词 --> temp.txt
Jieba(fp_name)
# temp.txt --> end.txt
Sort(Account(Turn_list()))

except IndexError or ValueError or FileNotFoundError:
print('无法打开指定的文件!')
Output_txt(list)
finally:
if f:
f.close()



def Jieba(textName):
'''
调用jieba库,对输入文件进行分词,结果保存至temp.txt文件
:param textName: 准备处理的文件名
:return:
'''

with open(textName, 'r', encoding='utf-8') as f:
cut_word = jieba.cut(f.read())
result = " ".join(cut_word)

result = result.replace(' ; ', ' ')
result = result.replace(' ! ', ' ')
result = result.replace(' 、 ', ' ')
result = result.replace(' : ', ' ')
result = result.replace(' — ', ' ')
result = result.replace(' — ', ' ')
result = result.replace(' , ', ' ')
result = result.replace(' . ', ' ')
result = result.replace(' , ', ' ')
result = result.replace(' 。 ', ' ')
result = result.replace(' 》 ', ' ')
result = result.replace(' 《 ', ' ')
result = result.replace(' ', ' ')

fp = open('temp.txt', 'w', encoding='utf-8')
fp.write(result)
fp.close()


def Turn_list():
'''
将Jieba_txt函数的结果分组转化为列表
:return: 转化结果 列表word_list
'''

with open('temp.txt', 'r', encoding='utf-8') as f:
word_list = []
for word_str in f.readlines():
word_str = word_str.strip()
word_line = word_str.split(' ')
word_list.extend(word_line)
return word_list


def Account(word_list):
'''
统计 word_list 的词频
:param lists: 列表 word_list
:return: 统计结果 字典account_dict
'''

account_dict = {}
for i in word_list:
account_dict[i] = word_list.count(i)
return account_dict


def Sort(count_dict):
'''
对字典进行排序,并保存到end.txt中
:param count_dict: 排序前的字典
:return: 排序后的字典
'''

sort_dict = sorted(count_dict.items(), key=lambda d: d[1], reverse=True)
sort_dict = dict(sort_dict)
Print_sortDict(sort_dict)

clear_str = str(sort_dict)
clear_str = clear_str.replace('\'','')
fp = open('end.txt', 'w', encoding='utf-8')
fp.write(clear_str)
fp.close()


def Print_sortDict(sort_dict):
'''
打印统计排序的结果
:param sort_dict: 排序后的字典
'''

print('文本内容排序结果如下:')
i = 0
for x, y in sort_dict.items():
if i < len(sort_dict):
print('(\'%s\',%s)'%(x,y))
i += 1
continue
else:
break


def Print_picture():
'''
输出词云图
'''

fb = open('end.txt', 'r', encoding='utf-8')
txt = fb.read()
fb.close()
w = wordcloud.WordCloud(font_path='msyhbd.ttc',
width=800,
height=500,
background_color='white')
w.generate(txt)
w.to_file('词云图.png')



if __name__ =='__main__':
Output_txt(Read_txtName())
Print_picture()

参考文件:

 致橡树.txt:

我如果爱你——
绝不像攀援的凌霄花,
借你的高枝炫耀自己;
我如果爱你——
绝不学痴情的鸟儿,
为绿荫重复单调的歌曲;
也不止像泉源,
常年送来清凉的慰藉;
也不止像险峰,
增加你的高度,衬托你的威仪。
甚至日光,
甚至春雨。
不,这些都还不够!
我必须是你近旁的一株木棉,
作为树的形象和你站在一起。
根,紧握在地下;
叶,相触在云里。
每一阵风过,
我们都互相致意,
但没有人,
听懂我们的言语。
你有你的铜枝铁干,
像刀,像剑,也像戟;
我有我红硕的花朵,
像沉重的叹息,
又像英勇的火炬。
我们分担寒潮、风雷、霹雳;
我们共享雾霭、流岚、虹霓。
仿佛永远分离,
却又终身相依。
这才是伟大的爱情,
坚贞就在这里:
爱——
不仅爱你伟岸的身躯,
也爱你坚持的位置,
足下的土地

西游记.txt:

东胜神州傲来国海边有一花果山,山顶一石,秉受日月精华,产下一个石猴。石猴在花果山做了众猴之王,为求长生,出海求仙,在西牛贺州拜菩提祖师为师。祖师为其取法名孙悟空,并授与七十二般变化及翻筋斗云之法。孙悟空回到花果山,占山为王,号为美猴王。苦于无兵刃,遂去东海龙宫求取,龙王及兄弟送他一支如意金箍棒及一身披挂。孙悟空又去幽冥界把自己的名字从生死簿上勾掉。龙王,地藏王上天庭告状,太白金星建议招安孙悟空,玉帝准奏。
玉帝封孙悟空做“弼马温”,着他看管马匹。孙悟空后得知此官职卑微,大怒,打出南天门,回花果山,自封为“齐天大圣”。
托塔天王李靖及哪吒三太子奉旨兴师捉拿孙悟空,被孙悟空打败,回天庭复旨。太白金星奏请玉帝降旨封孙悟空为齐天大圣,但不给他事务与俸禄。玉帝准奏。孙悟空应太白金星之请,再入天宫。玉帝封其为齐天大圣,并赐齐天大圣府。孙悟空在天上无事,每日交朋结义,不论尊卑。玉帝怕他闲中生事,让其看管蟠桃园。孙悟空偷吃蟠桃,又搅了王母娘娘的蟠桃盛会,偷吃了太上老君的仙丹,惧祸,回到花果山。
玉帝派天神捉拿孙悟空,双方相持不下。观音菩萨举荐二郎神制伏孙悟空,孙悟空被二郎神擒获。玉帝令天神将其处死,孙悟空却毫发无损。太上老君将其关入八卦炉,孙悟空不但不死,还炼就一双火眼金睛。如来佛祖应玉帝之请,降伏孙悟空,将其压在五行山下,让他饥食铁丸,渴饮铜汁。
如来因南赡部州之人贪淫乐祸,多杀多争,令观音菩萨去东土觅一人,来西天取经,以普渡众生。
唐太宗开科取士,青年陈光蕊高中状元,又娶相府殷小姐为妻。之后,官拜江州州主。陈光蕊携妻赴任,路上,被贼人刘洪谋害,妻子被占。殷氏产下一子,抛入江中,被金山寺寺僧搭救。此子十八年后受戒,法名玄奘。玄奘终与母亲相见,又求见外祖父,报了血仇。
泾河龙王触犯天条,罪当斩首,求唐太宗搭救。太宗允诺,但未能救起。龙王至阴间,告太宗允诺而食言,太宗魂被迫入阴间对质。还生后,太宗修建“水陆大会”,超度阴间所见孤魂。请玄奘主持法事,开经讲法。这时,南海观音亦至长安,寻找取经人,指化玄奘,令其去西天取经。唐太宗认玄奘为御弟,赐号三藏,送出长安。
唐僧西行,出离大唐边界,便遇魔王寅将军,被太白金星搭救。至五行山下,救出孙悟空,赐号孙行者。路上,孙悟空打死六个强盗,不堪唐僧数落,一怒之下去了龙宫。唐僧接受观音赠送的用来钳制孙悟空的两件东西——嵌金花帽与紧箍咒。悟空听从龙王劝告,回到唐僧身边,无意间戴上花帽,却再也摘取不下。唐僧念咒,悟空头痛。自此,悟空受制于唐僧。
二人至鹰愁涧,收了小白龙,小白龙化作白马,供唐僧骑乘。在观音院,悟空卖弄唐僧的锦褊袈裟,金池长老心生贪念,欲火烧唐僧师徒,却被悟空弄法反烧了禅院。袈裟被黑风怪窃走。孙悟空求助观音,设计让观音化作黑风怪的妖友,自己化作仙丹,诱黑风怪吞下,黑风怪降伏。
师徒继续西行,至高老庄,得知庄主女儿被一妖怪强占,悟空擒拿此妖,追至云栈洞。知妖怪原是天庭的天蓬元帅,因调戏嫦娥,被贬下界,错投猪胎,故形貌像猪。经观音收伏,赐名猪悟能,在此等候取经人。孙悟空引他拜见唐僧,唐僧收其为徒,赐号八戒。
过浮屠山,乌巢禅师传授唐僧《多心经》。
过黄风岭遇黄风怪,悟空请来须弥山灵吉菩萨,收伏此怪。
在流沙河,唐僧收被观音点化的沙悟净为三弟子,赐号沙和尚。师徒四人跋山涉水,往西天取经。
观音欲试四人道心,与黎山老母等化成美女,招四人为婿。唐僧等三人不为所动,只有八戒迷恋女色,被菩萨吊在树上。
到万寿山五庄观,悟空等偷吃人参果,并推倒仙树,被拿获。观音应悟空之请,用甘露救活仙树。
白骨精要吃唐僧,悟空三打白骨精。唐僧不识妖怪,听八戒谗言,错逐悟空,自己又被黄袍怪拿住,并被其变为老虎。沙僧亦被捉。八戒经白龙马劝说,到花果山用激将法请悟空救师傅。悟空救出师傅,师徒言归于好。
平顶山莲花洞金角大王、银角大王捉住唐僧欲食其肉,悟空与之斗智斗勇,骗来妖精的五件宝贝,降伏二妖。
狮精把乌鸡国国王推入井中淹死,自己化为国王。真国王鬼魂求唐僧搭救。悟空从太上老君处讨来金丹,救活国王。
牛魔王之子红孩儿据守火云洞,欲吃唐僧。悟空惧其三昧真火,请观音帮忙。观音降伏红孩儿,收其为善财童子。
孙悟空又请西海龙王太子帮助擒获黑水河鼍龙。在车迟国,悟空与三位妖魔国师——虎力鹿力、羊力大仙斗法,妖魔战败,现了原形。
经通天河,遇观音座前莲花池内成精为妖的金鱼,金鱼作法把唐僧摄入水府。观音赶来,收走金鱼。
太上老君的坐骑青牛偷了老君的金刚镯下界为妖,在金兜洞把唐僧捉住。悟空请来天神助战,不能取胜,找到太上老君处,责其收伏青牛。
唐僧、八戒饮子母河水受孕。悟空取来落胎泉水,解了二人胎气。西梁女国王欲强招唐僧为夫婿,悟空等智赚关文,出关西去。
琵琶洞蝎子精摄走唐僧,悟空请来昴日星官,星官化作大公鸡,使妖怪现原形而死。
六耳猕猴变成悟空模样,又令小妖们化成其他三人模样,欲上西天骗取真经。真假悟空大战,众多神佛不能分辨,直到西天雷音寺,如来说出猕猴本相,悟空打死六耳猕猴。
为过火焰山,悟空向铁扇公主借芭蕉扇灭火。铁扇公主恨悟空收伏其子红孩儿,不肯借。悟空与铁扇公主、牛魔王斗智斗勇,借天兵神力,降伏二怪,扑灭大火。
万圣老龙和九头虫驸马盗走祭赛国镇国之宝舍利子。悟空斗败二人,夺回佛宝。
荆棘岭,唐僧被树精、木怪迷惑联句对诗。
弥勒佛前黄眉童子下界作怪,假幻雷音寺,唐僧上当被擒。弥勒佛收伏为怪的童子。
过小西天,悟空打死蛇精。八戒用嘴拱开稀柿衢。
悟空为朱紫国国王治病,败獬豸洞妖怪金毛吼,救回王后。
盘丝洞蜘蛛精缠陷唐僧,悟空打死蜘蛛精。黄花观蜈蚣精又药翻唐僧,紫云山毗蓝婆应悟空之请,消除此怪。
经狮驼山,又有青狮、白象、大鹏作怪,众菩萨罗汉帮助降伏三怪。
比丘国王被寿星坐骑白鹿所化的国丈迷惑,欲用一千一百一十一个小儿心肝做药引,悟空解救婴儿,打退妖怪,寿星赶来收走白鹿怪。
陷空山无底洞老鼠精虏唐僧,欲与之成亲。李天王押走老鼠精。
灭法国王发愿杀一万僧人,悟空施法剃去国王、王后等人头发,国王回心转意,改灭法国为钦法国。
隐雾山连环洞豹子精欲吃唐僧肉,被悟空用瞌睡虫睡倒,八戒将其打死。
凤仙郡大旱,郡侯张榜求雨。悟空劝郡侯向善,天降甘雨。
在玉华州,黄狮精盗走悟空等三人兵器。悟空等夺回兵器,黄狮精投奔九灵元圣,太乙救苦天尊收伏九灵元圣,此怪为天尊坐骑九头狮子所化。
金平府,唐僧被玄英洞妖怪摄去,悟空请天上四位星宿帮忙捉怪,把妖怪斩首示众。
月宫玉兔化为天竺国公主抛绣球给唐僧,欲招之为婿。悟空会合太白星君擒伏玉兔,救回真公主。
镇台府地灵县寇员外家遭劫,员外丧生。唐僧师徒被当作强盗收监,悟空入地府招回寇员外魂,真相大白。
师徒历尽磨难,终至灵山,拜见佛祖如来,因不肯贿赂阿傩、伽叶二尊者,只取得无字经。燃灯古佛指使白雄尊者夺落经卷。四人又返回雷音寺,求有字真经。四人在回东土路上,经通天河,被老鼋连人带经翻人河中,经卷遭水,残缺不全。
佛经送回长安,四人真身重返灵山听封:三奘被封旃檀功德佛;悟空为斗战胜佛;八戒为净坛使者;沙僧为金身罗汉;白龙马为八部天龙,各归本位。

虚拟机.txt:

Java虚拟机(JVM)一种用于计算机设备的规范,可用不同的方式(软件或硬件)加以实现。编译虚拟机的指令集与编译微处理器的指令集非常类似。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。
Java虚拟机(JVM)是可运行Java代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。
Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。
Java虚拟机规范定义了一个抽象的——而非实际的——机器或处理器。这个规范描述了一个指令集,一组寄存器,一个堆栈,一个“垃圾堆”,和一个方法区。一旦一个Java虚拟机在给定的平台上运行,任何Java程序(编译之后的程序,称作字节码)都能在这个平台上运行。Java虚拟机(JVM)可以以一次一条指令的方式来解释字节码(把它映射到实际的处理器指令),或者字节码也可以由实际处理器中称作just-in-time的编译器进行进一步的编译。
Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。
Java虚拟机是Java语言底层实现的基础。这有助于理解Java语言的一些性质,也有助于使用Java语言。对于要在特定平台上实现Java虚拟机的软件人员,Java语言的编译器作者以及要用硬件芯片实现Java虚拟机的人来说,则必须深刻理解Java虚拟机的规范。另外,如果你想扩展Java语言,或是把其它语言编译成Java语言的字节码,你也需要深入地了解Java虚拟机。

测试:

 

 词云图: 

 

其他文件测试结果如下:

虚拟机.txt:

西游记.txt: 

 

举报

相关推荐

0 条评论