python_根据"词库"进行“词联想”

  输入法中,当你输入一个字的时候,输入法就能猜出你要输入什么词。这就是词联想。现在,再python中简单实现类似这样的功能:根据制定好的词库,输入一个新的词,帮助实现词联想。其中分词用了jieba包。

  1 # -*-coding:utf-8-*-
  2 
  3 
  4 
  5 """
  6     分词的函数cut_words()
  7 """
  8 def cut_words(temp):
  9     import jieba
 10     import re
 11     wenben = re.sub("[1234567890\s+\.\!\/_;:,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*()]+", "", temp)
 12 
 13     seg_list = jieba.cut(wenben, cut_all=True)  # 全模式分词
 14     # seg_list = jieba.cut(wenben,cut_all=False)#精确模式分词
 15     # seg_list = jieba.cut_for_search(wenben) #搜索引擎模式
 16     lists = []
 17     for item in seg_list:
 18         lists.append(item)
 19 
 20     return lists #分词结果返回到一个列表
 21 
 22 """
 23     统计词频的函数get_counts1(),参数lists为切好的词的列表
 24 """
 25 def get_counts1(lists):
 26     counts = {}
 27     for item in lists:
 28         if item in counts:
 29             counts[item] += 1
 30         else:
 31             counts[item] = 1
 32     return counts
 33 
 34 
 35 """
 36     方法2:统计词频的函数get_counts2,参数lists为切好的词如下:
 37 
 38 """
 39 from collections import defaultdict
 40 def get_counts2(lists):
 41     counts = defaultdict(int)
 42     for item in lists:
 43         counts[item] += 1
 44     return counts
 45 
 46 
 47 """
 48     统计词频的方法3:使用collection的Counter方法,参数lists为切好的词
 49 """
 50 
 51 
 52 def get_counts3(lists):
 53     from collections import Counter
 54     counter = Counter(lists)
 55     print(counter.most_common(10))
 56 
 57 
 58 """
 59     按照词频排序的函数get_top_counts()
 60 """
 61 
 62 
 63 def get_top_counts(counts):
 64     value_keys = sorted([(count, tz) for tz, count in counts.items()], reverse=True)
 65     result = {}
 66     for item in value_keys:
 67         result[item[1]] = item[0]
 68     return value_keys
 69     # return result
 70 
 71 """
 72  获取原始文本的所有汉字的联想词。函数的参数为原始文本。
 73 """
 74 
 75 
 76 def get_lianxiang(temp):
 77     import re
 78     wenzhang = re.sub("[1234567890\s+\.\!\/_;:,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*()]+", "", temp)
 79     a = cut_words(wenzhang)  # 分词
 80     b = get_counts1(a)  # 词频统计
 81     data = {}
 82     for i in range(len(wenzhang)):
 83         data[wenzhang[i]] = {}
 84         for key in get_counts1(a):
 85             try:
 86                 if wenzhang[i] == key[0]:
 87                     data[wenzhang[i]][key] = b[key]
 88             except:
 89                 pass
 90     print(data)
 91 
 92 """
 93     词联想的函数,输入的参数为输入的词,然后根据词库,按照词频高低,
 94     输出你想输入的词组,即词联想。词库为《明朝那些事》的部分章节。
 95 """
 96 def get_lianxiang1():
 97     import re
 98     word = input("请出入您想联想的词:")
 99     print("请稍等...")
100     wenzhang = re.sub("[1234567890\s+\.\!\/_;:,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*()]+", "", temp)
101     a = cut_words(wenzhang)  # 分词
102     b = get_counts1(a)  # 词频统计
103     data = {}
104     for i in range(len(wenzhang)):
105         data[wenzhang[i]] = {}
106         for key in get_counts1(a):
107             try:
108                 if wenzhang[i] == key[0]:
109                     data[wenzhang[i]][key] = b[key]
110             except:
111                 pass
112     if word in data:
113         dic=data[word]
114         a=get_top_counts(dic)
115         b=[]
116         for item in a:
117             b.append(item[1])
118         # print(a)
119         print("为您联想的几个词为:",b)
120         # print("联想结果如下:\n",data[word])
121     else:
122         print("没有根据本篇文章,您输入的词的联想词!")
123         get_lianxiang1()
124 
125 
126 if __name__ == '__main__':
127     temp = "之前我们曾经介绍过,朱棣曾派出两路人去寻找建文帝,一路是胡濙,他的事情我们已经讲过了,这位胡濙的生平很多人都不熟悉,这也不奇怪,因为他从事是秘密工作,大肆宣传是不好的。但另一路人马的际遇却大不相同,不但闻名于当时,还名留青史,千古流芳。这就是鼎鼎大名的郑和舰队和他们七下西洋的壮举同样是执行秘密使命,境遇却如此不同,我们不禁要问:同样是人,差距怎么那么大呢?原因很多,如队伍规模、附带使命等等,但在我看来,能成就如此壮举,最大的功劳应当归于这支舰队的指挥者——伟大的郑和。伟大这个词用在郑和身上是绝对不过分的,他不是皇室宗亲,也没有显赫的家世,但他以自己的努力和智慧成就了一段传奇——中国人的海上传奇,在郑和之前历史上有过无数的王侯将相,在他之后还会有很多,但郑和只有一个。下面就让我们来介绍这位伟大航海家波澜壮阔的一生。郑和,洪武四年(1371)出生,原名马三保,云南人,自小聪明好学,更为难得的是,他从小就对航海有着浓厚的兴趣,按说在当时的中国,航海并不是什么热门学科,而且云南也不是出海之地,为什么郑和会喜欢航海呢?这是因为郑和是一名虔诚的伊斯兰教徒,他的祖父和父亲都信奉伊斯兰教,而所有的伊斯兰教徒心底都有着一个最大的愿望去圣城麦加朝圣。去麦加朝圣是全世界伊斯兰教徒的最大愿望,居住在麦加的教徒们是幸运的,因为他们可以时刻仰望圣地,但对于当时的郑和来说,这实在是一件极为不易的事情。麦加就在今天的沙特阿拉伯境内,有兴趣的朋友可以在地图上把麦加和云南连起来,再乘以比例尺,就知道有多远了。不过好在他的家庭经济条件并不差,他的祖父和父亲都曾经去过麦加,在郑和小时候,他的父亲经常对他讲述那朝圣途中破浪远航、跋山涉水的惊险经历和万里之外、异国他乡的奇人异事。这些都深深的影响了郑和。也正是因此,幼年的郑和与他同龄的那些孩子并不一样,他没有坐在书桌前日复一日的背诵圣贤之言,以求将来图个功名,而是努力锻炼身体,学习与航海有关的知识,因为在他的心中,有着这样一个信念:有朝一日,必定乘风破浪,朝圣麦加。如果他的一生就这么发展下去,也许在十余年后,他就能实现自己的愿望,完成一个平凡的伊斯兰教徒的夙愿,然后平凡地生活下去可是某些人注定是不会平凡地度过一生的,伟大的使命和事业似乎必定要由这些被上天选中的人去完成,即使有时是以十分残忍的方式。洪武十四年(1381),傅友德、蓝玉奉朱元璋之命令,远征云南,明军势如破竹,仅用了半年时间就平定了云南全境,正是这次远征改变了郑和的命运。顺便提一句,在这次战役中,明军中的一名将领戚祥阵亡,他的牺牲为自己的家族换来了世袭武职,改变了自己家族的命运,从此他的子孙代代习武。这位戚祥只是个无名之辈,之所以这里要特意提到他,是因为他有一个十分争气的后代子孙戚继光。历史真是让人难以捉摸啊。对于明朝政府和朱元璋来说,这不过是无数次远征中的一次,但对于郑和而言,这次远征是他人生的转折,痛苦而未知的转折。战后,很多儿童成为了战俘,按说战俘就战俘吧,拉去干苦力也就是了,可当时对待儿童战俘有一个极为残忍的惯例阉割。这种惯例的目的不言而喻,也实在让人不忍多说,而年仅11 岁的马三保正是这些不幸孩子中的一员。我们不难想象当年马三保的痛苦,无数的梦想似乎都已经离他而去了,但历史已经无数次地告诉我们,悲剧的开端,往往也是荣耀的起点。悲剧,还是荣耀,只取决于你,取决于你是否坚强。从此,这个年仅十一岁的少年开始跟随明军征战四方,北方的风雪、大漠的黄沙,处处都留下了他的痕迹,以他的年龄,本应在家玩耍、嬉戏,却突然变成了战争中的一员,在那血流成河,尸横遍野的战场上飞奔。刀剑和长枪代替了木马和玩偶,在军营里,没有人会把他当孩子看,也不会有人去照顾和看护他,在战争中,谁也不能保证明天还能活下来,所以唯一可以照顾他的就是他自己。可是一个十一岁的孩子怎么能照顾自己呢?我们无法想象当年的马三保吃过多少苦,受过多少累,多少次死里逃生,我们知道的是,悲惨的遭遇并没有磨灭他心中的希望和信念,他顽强地活了下来,并最后成为了伟大的郑和。总结历史上的名人(如朱元璋等)的童年经历,我们可以断言:小时候多吃点苦头,实在不是一件坏事。在度过五年颠沛流离的生活后,他遇到了一个影响他一生的人,这个人就是朱棣当时的朱棣还是燕王,他一眼就看中了这个沉默寡言却又目光坚毅的少年,并挑选他做了自己的贴身侍卫,从此马三保就跟随朱棣左右,成为了他的亲信。金子到哪里都是会发光的,马三保是个注定要成就大事业的人,在之后的靖难之战中,他跟随朱棣出生入死,立下大功,我们之前介绍过,在郑村坝之战中,朱棣正是采用他的计策,连破李景隆七营,大败南军。朱棣从此也重新认识了这个贴身侍卫,永乐元年(1403), 朱棣登基后,立刻封马三保为内官监太监,这已经是内官的最高官职,永乐二年(1404),朱棣又给予他更大的荣耀,赐姓郑,之后,他便改名为郑和,这个名字注定要光耀史册。要知道,皇帝赐姓是明代至高无上的荣耀,后来的郑成功被皇帝赐姓后,便将之作为自己一生中的最大光荣,他的手下也称呼他为国姓爷,可见朱棣对郑和的评价之高。上天要你受苦,往往会回报更多给你,这也是屡见不鲜的,郑和受到了朱棣的重用,成为了朝廷中炙手可热的人物,作为朱棣的臣子,他已经得到了很多别人想都不敢想的荣耀,想来当年的郑和应该也知足了。但命运似乎一定要让他成为传奇人物,要让他流芳千古。更大的使命和光荣将会降临到他的头上,更大的事业将等待他去开创。朱棣安排郑和出海是有着深层次目的的,除了寻找建文帝外,郑和还肩负着威服四海,胸怀远人的使命,这大致也可以算是中国历史上的老传统,但凡强盛的朝代,必定会有这样的一些举动,如汉朝时候贯通东西的丝绸之路,唐朝时众多发展中国家及不发达国家留学生来到我国学习先进的科学文化技术,都是这一传统的表现。中国强盛,万国景仰,这大概就是历来皇帝们最大的梦想吧,历史上的中国并没有太多的领土要求,这是因为我们一向都很自负,天朝上国,万物丰盛,何必去抢人家的破衣烂衫?但正如俗话所说,锋芒自有毕现之日,强盛于东方之中国的光辉是无法掩盖的,当它的先进和文明为世界所公认之时,威服四海的时刻自然也就到来了。实话实说,在中国强盛之时,虽然也因其势力的扩大与外国发生过领土争端和战争(如唐与阿拉伯之战),也曾发动过对近邻国家的战争(如征高丽之战),但总体而言,中国的外交政策还是比较开明的,我们慷慨的给予外来者帮助,并将中华民族的先进科学文化成就传播到世界各地,四大发明就是最大的例证。综合来看,我们可以用四个字来形容中国胸怀远人的传统和宗旨:以德服人。现在中国又成为了一个强盛的国家,经过长期的战乱和恢复,以及几位堪称劳动模范的皇帝的辛勤耕耘和工作,此时的华夏大地已经成为了真正的太平盛世,人民安居乐业,国家粮银充足,是该做点什么的时候了。在我们这个庞大国家的四周到底还有些什么?这是每一个强盛的朝代都很感兴趣的一个问题,明帝国就是一个强盛的朝代,而明帝国四周的陆地区域已由汉唐盛世时的远征英雄们探明,相比而言,帝国那漫长的海岸线更容易引起人们的遐想,在宽阔大海的那一头有着怎样的世界呢?最先映入人们眼帘的就是西洋,需要说明的是西洋这个名词在明朝的意义与今日并不相同,当时的所谓西洋其实是现在的南洋,之前的朝代虽也曾派出船只远航过这些地区,但那只是比较单一的行动,并没有什么大的影响,海的那边到底有些什么,人们并不是十分清楚,而现在强大的明帝国的统治者朱棣是一个与众不同的人,他之所以被认为是历史上少有的英明君主,绝非由于仁慈或是和善,而是因为他做了很多历史上从来没有人做过的事情。现在,朱棣将把一件历史上从来没有人做过的事情交给郑和来完成,这是光荣,也是重托。无论从哪个角度来看,郑和都是最合适的人选,他不但具有丰富的航海知识,还久经战争考验,军事素养很高,性格坚毅顽强,最后,他要去的西洋各国中有很多都信奉伊斯兰教,而郑和自己就是一个虔诚的穆斯林。  按说这只是一次航海任务而已,何必要派郑和这样一个多样型人才去呢,然而事实证明,郑和此次远航要面对的,绝不仅仅是大海而已。历史将记住这个日子,永乐三年六月十五日( 1405 年7 月11 日),郑和在福建五虎门起航,开始了中国历史上最伟大的远航征程,郑和站在船头,看着即将出发的庞大舰队和眼前的茫茫大海。他明白自己此次航程所负的使命和职责,但他并不知道,此时此刻,他正在创造一段历史,将会被后人永远传颂的历史。  他的心中充满了兴奋,自幼年始向往的大海现在就在他的眼前,等待着他去征服!一段伟大的历程就要开始了!扬帆!我们之前曾不断用舰队这个词语来称呼郑和的船队,似乎略显夸张,一支外交兼寻人的船队怎么能被称为舰队呢,但看了下面的介绍,相信你就会认同,除了舰队外,实在没有别的词语可以形容他的这支船队。托当年一代枭雄陈友谅的服,朱元璋对造船技术十分重视,这也难怪,当年老朱在与老陈的水战中吃了不少亏,连命也差点搭进去。在他的鼓励下,明朝的造船工艺有了极大的发展,据史料记载,当时郑和的船只中最大的叫做宝船,这船到底有多大呢,大者,长四十四丈四尺,阔一十八丈;中者,长三十七丈,阔一十五丈。大家可以自己换算一下,按照这个长度,郑和大可在航海之余举办个运动会,设置了百米跑道绝对不成问题。而这条船的帆绝非我们电视上看到的那种单帆,让人难以想象的是,它有十二张帆!它的锚和舵也都是巨无霸型的,转动的时候需要几百人喊口号一起动手才能摆得动,南京市在五十年代曾经挖掘过明代宝船制造遗址,出土过一根木杆,这根木杆长十一米,问题来了,这根木杆是船上的哪个部位呢?鉴定结论出来了,让所有的人都目瞪口呆,这根木杆不是人们预想中的桅杆,而是舵杆! 果你不明白这是个什么概念,我可以说明一下,桅杆是什么大家应该清楚,所谓舵杆只不过是船只舵叶的控制联动杆,经过推算,这根舵杆连接的舵叶高度大约为六米左右。也就是说这条船的舵叶有三层楼高!航空母舰,名副其实的航空母舰。这种宝船就是郑和舰队的主力舰,也就是我们通常所说的旗舰,此外还有专门用于运输的马船,用于作战的战船,用于运粮食的粮船和专门在各大船只之间运人的水船。 和率领的就是这样的一支舰队,舰队之名实在实至名归。这是郑和船队的情况,那么他带了多少人下西洋呢?将士卒二万七千八百余人。说句实话,从这个数字看,这支船队无论如何也不像是去寻人或是办外交的,倒是很让人怀疑是出去找碴打仗的。但事实告诉我们,这确实是一支友好的舰队,所到之处,没有战争和鲜血,只有和平和友善。强而不欺,威而不霸,这才是一个伟大国家和民族的气度与底蕴。郑和的船队向南航行,首先到达了占城,然后他们自占城南下,半个月后到达爪哇(印度尼西亚爪哇岛),此地是马六甲海峡的重要据点,但凡由马六甲海峡去非洲必经此地,在当时,这里也是一个人口稠密,物产丰富的地方,当然,当时这地方还没有统一的印度尼西亚政府。而且直到今天,我们也搞不清当时岛上的政府是由什么人组成的。郑和的船队到达此地后,本想继续南下,但一场悲剧突然发生了,船队的航程被迫停止了,而郑和将面对他的航海生涯中的第一次艰难考验。  事情是这样的,当是统治爪哇国的有两个国王,互相之间开战,史料记载是东王和西王,至于到底是些什么人,那也是一笔糊涂账,反正是西王战胜了东王。东王战败后,国家也被灭了,西王准备秋后算账,正好此时,郑和船队经过东王的领地,西王手下的人杀红了眼,也没细看,竟然杀了船队上岸船员一百七十多人。郑和得知这个消息后,感到十分意外,手下的士兵们听说这个巴掌大的地方武装居然敢杀大明的人,十分愤怒和激动,跑到郑和面前,声泪俱下,要求就地解决那个什么西王,让他上西天去做一个名副其实的王。郑和冷静地看着围在他四周激动的下属,他明白,这些愤怒的人之所以没有动手攻打爪哇,只是因为还没有接到他的命令。那些受害的船员中有很多人郑和都见过,大家辛辛苦苦跟随他下西洋,是为了完成使命,并不是来送命的,他们的无辜被杀郑和也很气愤,他完全有理由去攻打这位所谓的“西王”,而且毫无疑问,这是一场毫无悬念的战争,自己的军队装备了火炮和火枪等先进武器,而对手不过是当地的一些土著而已,只要他一声令下,自己的舰队将轻易获得胜利,并为死难的船员们报仇雪恨。但他没有下达这样的命令。他镇定地看着那些跃跃欲试的下属,告诉他们,决不能开战,因为我们负有更大的使命。和平的使命。如果我们现在开战,自然可以取得胜利,但那样就会偏离我们下西洋的原意,也会耽误我们的行程,更严重的是,打败爪哇的消息传到西洋各地,各国就会怀疑我们的来意,我们的使命就真的无法达成了。"
128     get_lianxiang1()  # 调用获取联想词的函数。

 

posted @ 2017-01-02 22:05  coskaka  阅读(6278)  评论(0编辑  收藏  举报