├── LICENSE ├── README.md ├── ceshi.py ├── context ├── 0001 ├── 0002 ├── 0003 ├── 0004 ├── 0005 ├── 0006 ├── 0007 ├── 0008 ├── 0009 ├── 0010 ├── 0011 ├── 0012 ├── 0013 ├── 0014 ├── 0015 └── 0016 ├── my_log.log ├── setup.py └── textrank4zh ├── Segmentation.py ├── Segmentation.pyc ├── TextRank4Keyword.py ├── TextRank4Keyword.pyc ├── TextRank4Sentence.py ├── TextRank4Sentence.pyc ├── __init__.py ├── __init__.pyc ├── compute_yingda.py ├── compute_yingda.pyc ├── non_words.txt ├── stopwords.txt ├── util.py ├── util.pyc └── word_model └── log.txt /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Letian Sun 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## https://github.com/ouprince/text-rank.git 2 | ## 简单介绍 3 | 这里的代码主要是采用text-rank算法计算文本摘要,另外优势在于引入了词向量和权重倾斜 4 | 使得文章摘要提取效果得到了非常显著的提升。 5 | 6 | ## 注意 7 | 注意:由于github文件有大小限制,这里没有上传完整的词向量模型,所以无法直接运行,需要补充textrank4zh/word_model目录中的数据。 8 | 如果有需要,可在我的百度网盘下载,或者自己训练放入textrank4zh/word_model文件夹。 9 | 10 | 链接: https://pan.baidu.com/s/1o9RlASq 密码: 4kug 11 | 12 | ## 依赖 13 | jieba >= 0.35 14 | numpy >= 1.7.1 15 | networkx >= 1.9.1 16 | gensim 17 | 18 | ## 兼容性 19 | 适用于Python 2.7,已经测试过 20 | 21 | ## 原理 22 | 23 | 关于原理以及本代码实现的效果优化可见我上传的论文 《text-rank提取文章摘要与结果优化.doc》 24 | 阅读完对使用有很大的帮助 25 | 26 | ## 使用方式 27 | python ceshi.py n 28 | 直接在代码目录执行 python ceshi.py n (n就是我们要生成的摘要的句数) 29 | 30 | ceshi.py 只是提供了使用的范例,打印出摘要结果,具体可以自己修改。 31 | 32 | ## 说明: 33 | (1) 这里使用的词向量是基于自己在基维百科进行的语料训练,生成的 60 维。 34 | 如果有更好的词向量,可以自行替换 35 | 36 | (2) 在ceshi.py 中加入了倾斜因子,倾斜因子是针对不同文章的处理。取值范围 (0,1],具体说明如下: 37 | 我们知道,对于不同类别的文章,结构会很不一样,如果说散文,那么往往中心思想只有一个,且段落之间相对联系紧密,都是体现一个思想,描述一个问题。 38 | 这种情况下,我们不采用权重倾斜也是没太大问题。 39 | 但是,针对于那种新闻,资讯类的文章,往往并不体现一个主题,并且段落之间联系可能不是那么紧密,但是段落本身结构更紧凑,往往会在段落开始就一针见血。 40 | 如果我们还采用相似度作为句子与句子之间的链接关系,往往获取的摘要不是那么理想。 41 | 针对这种文章,同时又考虑到通用性。我们可以加入一个加权因子,即对每个段落的段首做适当的加权,往后逐渐衰减,呈梯度模型。 42 | 43 | 在ceshi.py 有一个 decay_rate 参数,取值 (0,1],值越小,倾斜越大,默认为 1 代表无任何倾斜,可处理一般文章。 44 | (在context目录中,有很多文章可供测试,里面比如 0003 是一般性散文,这时可设decay_rate = 1.0) 45 | 46 | 当需要处理咨询,新闻类比较结构紧凑的文章时,我们就加入适当的倾斜因子,一般设成0.8-0.9即可。这样的模型更加通用且实用。 47 | (我们可以用context目录中0015是金融咨询测试,当生成摘要时,取 decay_rate = 0.8 比 1.0 时效果好很多) 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /ceshi.py: -------------------------------------------------------------------------------- 1 | #-*- coding:utf-8 -*- 2 | import codecs 3 | import sys 4 | from textrank4zh import TextRank4Keyword, TextRank4Sentence 5 | 6 | zhaiyao_num = int(sys.argv[1]) 7 | text = codecs.open('./context/0015', 'r', 'utf-8').read() 8 | tr4s = TextRank4Sentence(stop_words_file='textrank4zh/stopwords.txt',decay_rate = 1.0) # 导入停止词 9 | tr4w = TextRank4Keyword(stop_words_file = 'textrank4zh/stopwords.txt') 10 | #使用词性过滤,文本小写,窗口为2 11 | tr4s.analyze(text=text, lower=True, source = 'all_filters') 12 | tr4w.analyze(text=text,lower=True, window=3, pagerank_config={'alpha':0.85}) 13 | key = [] 14 | print "关键词:" 15 | for item in tr4w.get_keywords(num=10, word_min_len=2): 16 | key.append(item.word) 17 | print " ".join(key) 18 | 19 | def find_in_key(cuts): 20 | for i in key: 21 | if cuts.find(i) >= 0: 22 | return True 23 | return False 24 | 25 | def jianhua(line): 26 | if len(line) >= 60: 27 | try: 28 | line = line.split(",") 29 | #print "line >50 and len(line) = " + str(len(line)) 30 | for i in range(len(line)): 31 | if find_in_key(line[i]): 32 | if i == 0: 33 | return ",".join(line[0:2]) 34 | else: 35 | return ",".join(line[i-1:i+2]) 36 | except:pass 37 | return line 38 | else: 39 | return line 40 | 41 | rows_num = tr4s.get_sentences_length() 42 | print "This text is %d rows" %rows_num 43 | 44 | count_sentens = 0 45 | print "摘要:" 46 | for item in sorted(tr4s.get_key_sentences(num=rows_num/4),key = lambda x:x.index,reverse = False): 47 | if float(item.weight) >= 1.0/rows_num and count_sentens <= zhaiyao_num: 48 | count_sentens += 1 49 | print jianhua(item.sentence) #type(item.sentence) 50 | else: 51 | break 52 | 53 | if count_sentens == 0: 54 | for item in sorted(tr4s.get_key_sentences(num=zhaiyao_num),key = lambda x:x.index,reverse = False): 55 | print(jianhua(item.sentence)) 56 | 57 | -------------------------------------------------------------------------------- /context/0001: -------------------------------------------------------------------------------- 1 | 城市中嘈杂的生活慢慢的吞噬了我们的身心,还有我们的味觉。远离钢筋水泥,回归大山的静谧,让大山再次拥抱流浪儿疲惫的身躯,让我们静下心来再次聆听妈妈讲那古老的传说。 2 | 或许是我们离开的太久了,记忆中,早春欲暖乍寒那是春天的味道、五月的花海那是夏天的热烈、沉甸甸的麦穗在夕阳下泛着金黄色的秋的喜悦、大雪覆盖了山峦和树梢那是最静谧的冬的安详,一切的一切都是儿时的回忆,都是妈妈的味道。 3 | 太阳升起的时刻,同好友一起驱车出发,久违了的家乡仿佛就在眼前,两个小时的车程很长也很短,其实就是从嘈杂到静谧、从城市到乡村。 4 | 陪着朋友游览了一番村里别样的秀美山村,那种惬意自然是无法用语言去形容的。大山依旧是儿时的大山,巍峨矗立在山村的四周,守护着乡村的宁静,沿着弯曲起伏的石砌小路感受着乡土的气息,仿佛又回到了小的时候,记忆中的大山就在眼前,一如儿时的高大,陪着我成长,陪着我走过了岁岁年年。 5 | 中午回到家老妈已经做好了久违的饭菜——大锅烩菜,一碗下肚又盛了一碗,大鱼大肉吃的多了,也吃的腻了,一碗烩菜感受的是家的味道、是妈妈的味道、是记忆中的味道。饭后依在院子里的躺椅上感受冬日的暖阳照在我的身上,慢慢的进入了梦乡...... 6 | -------------------------------------------------------------------------------- /context/0002: -------------------------------------------------------------------------------- 1 | 别嫌弃男生抽烟了 2 | 你永远不会懂 3 | 男生为什么吸烟 4 | 谁都知道抽烟伤肺 5 | 可是有些男生不是会抽烟 6 | 他们不是不爱惜自己 7 | 只是他们烦心事太多了 8 | 不知道找谁说去 9 | 只能一个人默默的抽烟 10 | 而女生伤心了 11 | 总有一两个男生 12 | 去陪她 去哄她 13 | 而男生哭了 14 | 多数人会说他懦弱 15 | 安慰他的也有 16 | 不过男生会说他没事 17 | 不用管他 18 | 其实并不是 19 | 他们在伤心和伤肺面前 20 | 他们总会选择伤肺 21 | 也不用关心他 同情他 22 | 这样的男生 23 | 不懂 24 | 就不要说他 25 | 也许你觉得 26 | 男生什么都应该做 27 | 在你哭的时候给你肩膀 28 | 在你不开心会哄你 29 | 他也有不开心的时候 30 | 只是他们不愿意说 31 | 对不起 他也会累 32 | 如果你真的爱他 33 | 就好好对待他 34 | -------------------------------------------------------------------------------- /context/0003: -------------------------------------------------------------------------------- 1 | 许久没有更新文章了。今天还是要把我发表到微信公众号的一篇关于友情的文章分享给爱写作的朋友们,希望各位品读下。 2 | 3 |    总以为时间很长,我们有的是时间玩乐。总以为我们还是小孩子,一天到晚还会形影不离。总以为我们是闺蜜,说不完的话题有的是时间聊。但是我们却忘记了一件重要的事,我们已长大,我们也会分离。 4 | 5 |    当我们还处在懵懂无知的状态时,事态炎凉逼迫着我们走向了成熟的轨道。只是太匆匆,我们还没来得及对过去,对青春,对自己说声再见,就向憧憬的明天招了手。 6 | 7 |    小时候,我们是伙伴,天天腻在一起有说有笑,做着童年最美好的梦。那时候,还不知道闺蜜的真正意义,只是强烈的感觉身边有你真好。 8 | 9 |    一起上学,放学。一起游玩,做游戏。一起摸爬滚打。形影不离地牵着彼此的手走过青春的足迹。虽然中学时光过去了十载之久,但是我们上学的情景仿佛就发生在昨天。 10 | 11 |    学校离家远,我们唯一的交通工具就是老式的脚踏车。那时候,对于我们而言,每天能骑着脚踏车去学校就是一件很幸福的事,毕竟在当时条件有限。常常宅在家,自我感觉都发霉了,唯有出去透透气。骑着电动车经过去往学校的道路,那些过往如碎片立即拼凑到了一起呈现于我的脑海。我和闺蜜的背影瞬间感觉如此清晰:我骑着简便的脚踏车带着闺蜜争分夺秒飞奔学校,喜欢那种“快马飞驰”的快感,一心只想着按时到校;喜欢那种“悠闲自乐”的释怀,途中与闺蜜肆无忌惮地畅谈;喜欢那种“沿途风景”的欣赏,道路两旁的田园风光给予我愉悦的心情。不管是刮风下雨,还是下雪天,都无法阻挡我们前进的步伐。飞奔学校的路上,我载她一会儿,她载我一会儿,边飞边聊天,忙得不亦乐乎,不知不觉之中就到了学校。这段贮藏心灵深处最快乐的时光其实就是在最平淡的日子里骑着简便的脚踏车带着闺蜜像疯子似的豪放不羁。除了周日外,这是我们每天必走的行程,也是我们朝夕相处最美好的时光。 12 | 13 |    后来我们长大了。每一次的心灵触动,每一次的真情流露,每一次的情绪宣泄,都令彼此心心相系。但凡一个表情,一句话语便能听出彼此的心事。这种超乎伙伴的情谊渐渐升华成闺蜜。我们住进了一个叫做友谊的小船里,向着壮丽的岸边靠近。 14 | 15 |    我们不再是小孩子了,经过几年的闯荡,各自都有了自己的见解。长大的烦恼犹如乱麻困扰着彼此,不管是家事还是私事,都会有那么一段失落的阶段,然而如今的我们就处于这种棱角未磨平又不知所措的阶段。长大的蜕变总要在经历过什么之后才会有所转变,面对种种困惑,本身迷茫的我望着未来更加迷茫,满眼惆怅地看不到前方。每当我们相对攀谈,她却总能有所觉察,然后将她多年来的阅历一一向我诉说。那些生动的叙述如同条条法规时刻警醒着我,让无知的我受益匪浅,收集着她积累下来的经验,汲取着其中的精髓,让自己慢慢地成长。其实她那双炯炯有神的眼睛里偶尔也会带些忧伤,而我则会成为她第一个倾诉对象,静静地聆听她的心声,不打扰,不多言,默默地守护在她身边,只要她需要一个空间倾诉,我随时都在。虽然有些懵懂,但却像是她提前给我上了一课。我们总是聊着聊着不经意间就到了该离开的时候,意犹未尽的话题才会嗄然断片。 16 | 17 |    或许就是这种单纯的交谈以及这种无所顾忌的谈心,让两颗本就心系彼此的心更加相融。在彼此需要的时候,恰好都在,这种不拘谨且轻松的情谊刚刚好。 18 | 19 |    人生难遇一知己,她可能就是上天派到我身边的天使,我也有幸成为她生命中的知音。当我们彼此吐露完心事,就会豁然开朗得各就各位,向着美好的明天继续迈进。 20 | 21 |    毕业后的我们选择了不同的道路,我在沿海城市青岛奋力拼搏,争取上进博得好的出路,她则在济宁报了专业,争取好就业。我们就这样为了更好的生活第一次分别。 22 | 23 |    一起住惯了,到了别的城市自然不适应,想家想父母更想这个可以说知心话的朋友。那时通讯设施还不先进,彼此的联系中断过。但在内心深处还会时常想念,然而那份想念也唯有延伸到每一次的放假。逢假回家,我们便情不自禁地跑到彼此的家里相约,滔滔不绝地谈笑风生。 24 | 25 |    曾以为中间的不联系会使我们再次见面尴尬,之间有隔阂或者见了面不知该如何说起。这些实质性的假想并没有在我们身上应验。我们的见面依然如初般轻松自在,坐在一起有说有笑,问着彼此的近况,憧憬着彼此的未来,就仿佛两人从未分别过一样。两人最好的相处莫过于久别重逢后的依然如故。最触动心灵的是:不管分别多久,我们依然很熟悉。 26 | 27 |    时光荏苒,我们已长大,不得不分开。我工作在外,她工作在家。即便如此,也不能割舍我们之间的情谊。偶尔通个电话,聊聊家常,诉说下心事,就好像彼此陪在身边一样。 28 | 29 |    曾记得我前年学车那会儿,她也报了名学车。我们竟如此的默契。我的学车之旅并没有她那么顺畅,几经波折,那段日子郁闷到了极点。她在老家学的,考试很顺利,没用多久便把驾照拿下来了。而我在外学车相当不容易,简直糟糕透顶,考试通过率极低,幸运之神总和我擦肩而过。每当我和她通电话,就要长篇大论地诉苦一番,她便语重心长地安慰我。被教练挨批是常有的事,我还好,不过时常心生烦躁不悦,自己练得不好了或者练得不到位了,那所谓的自尊就会受伤,自然就有些小情绪堵塞心田。此刻便会拨通闺蜜的号倾诉一番,电话的那头虎口婆心的劝慰总能令我内心暖洋洋,所有的烦忧随着超声波都抛到九霄云外了。我一言她一语的回应着,互相将各自的教练教法讲给对方听,又互相采纳着对方的建议,互相鼓励着彼此一起加油,努力将最好的自己呈现在庄严的考场上。她那些絮叨的话语如同妈妈的复读机,但就这恰到好处的抚慰让我感觉自己不再是孤军奋战,还好有你。复活的自己学会放空自己,放下包袱,重拾起信心,在闺蜜的鼓舞下圆满结束了学车之旅。 30 | 31 |    成长中的我们总是在困惑:生活是什么?幸福又是什么?迷迷糊糊中我们闯进了青年的大门,在那里我们历经工作中的琐碎,生活中的无奈,以及人世间的各种沧桑,跌跌撞撞中寻到了人生中最温馨的归属。 32 | 33 |    幸福的大门就这样为我们打开了。虽然我们还在迷茫中奔跑,但是终究逃不出命运的包围圈。幸福,真的就摆在了眼前。 34 | 35 |    我的好闺蜜,结婚了。在她经历过漫长的爱情长跑后,终于找到了人生伴侣。那一刻,她站在舞台的中央,神采飞扬地向着美好的明天宣誓,一道亮丽的风景线让这个隆重的节日变得更加庄严。我站在她的旁边,看着她满脸绽放着灿烂的笑容,不禁为她喝彩。欢呼声和着掌声汇成祝福的话语,愿她从此刻的起点起飞,带着满满的爱去创造属于他们最美的家。 36 | 37 |    我的好闺蜜,祝福你在人生最艰难的抉择中找到了满意的答卷。恭喜你脱单成功,扬起了幸福的旗帜。未来的路愿你更加勇敢,闺蜜我永远是你坚强的后盾。 38 | 39 |    我的好闺蜜,当幸福来敲门,我虽然有千万个舍不得,但我还是要松开你的手,把你送到幸福的手里。因为那里才是你的家,那里才会有幸福。 40 | 41 |    我的好闺蜜,当一切再也回不去,但至少我们有回忆,虽然你已成为人妻,但依然是我最亲密的姐妹。因为我们是闺蜜,我们是家人。 42 | 43 |    我的好闺蜜,当我们已长大,虽然注定是这样分离的结局,但至少我们年轻过,相聚过。因为世间有聚散,世间无完美。 44 | 45 |    我的好闺蜜,恰逢如此喜庆隆重的日子,告别单身生活的你更该欢喜,愿得一人心,白首不相离。 46 | 47 |    我的好闺蜜,一定要狠狠的幸福!明天依然会很美好。当你踏上红地毯,就意味着你拥有了温暖的避风港湾,你不再是一个人奋斗,而是有了可以依靠的肩膀。人生最幸福的事便是找到了另一半,这幅拼图才算完整。 48 | 49 |    我的好闺蜜,一定要狠狠的幸福!生活依然很美好。当他牵起你的手走过红地毯,便意味着以后的生活你们要携手前进。不管顺境还是逆境,你们都要时刻十指紧扣,共同面对。人生最快乐的事便是有你有我,生活才不会乏味。 50 | 51 |    其实有些事不明白,长大了便一目了然。就比如我们不知道所谓的爱情是什么,当找到了人生伴侣之后,仿佛一切都不必解释了。依靠且陪伴,或许就是人们对于爱情的心灵慰藉吧。 52 | 53 |    我的好闺蜜,茫茫人海,找寻郎君的旅途中深知其滋味,但在品味中寻到自己的如意郎君,便是人生最美好的收获。愿你们永远相亲相爱,相扶到老。 54 | 55 |    好闺蜜,一定要幸福。一定要狠狠的幸福! 56 | -------------------------------------------------------------------------------- /context/0004: -------------------------------------------------------------------------------- 1 | 很多时候,我们常常在想:生活,到底是什么? 2 | 3 | 生活,是一滴灵动的水  也许,对于每一个人来说,成长的轨迹不同,经历的过程不同,承受的重量不同,感怀的心境不同,便会滋生出许许多多迥异的答案。或是顺畅,或是坎坷;或是欣喜,或是悲痛;或是辛酸,或是幸福;或是眼泪,或是笑容。林林总总的表象,演绎着世事的繁衰和人间的苦乐。 4 | 5 |   人的一生,总是要经遇一些无法规避的事情,不管你接受不接受,喜欢不喜欢,它都以坚忍的性格,在辛辛苦苦的跋涉中,适时地给你创造一段无以言表的“情缘”,画上几个内涵丰富的“标点”。而其中的内容,定会像影子一样,在阳光明媚的日子,抑或淫雨菲菲的路上,左右着多变的情绪和前行的脚步。 6 | 7 |   一缕晨风,一米阳光,一抹微笑,都是生活无意的泼洒! 8 | 9 |   无论境遇如何,对于生命年轻的渴望,对于生活美好的向往,一直以来都在我们的心中萦绕,宛若碧蓝的天宇之下那只飞翔的白鸽,正在舒展着素洁的羽毛! 10 | 11 |   可是,在某一个不特定的时刻,也会有些许黯然的愁绪潜入心怀,让原本多姿多彩的物象,增添了寂寥的情节和无奈的忧伤。 12 | 13 |   生活,本来就是五味俱全,缺少了哪一种品尝,都会失去本真的意味!人必竟不是神仙,终究摆脱不掉凡胎俗骨。既然如此,也只能在浮华和烦燥的世事里,努力寻找一处宁静的港湾,让自己原本纯净的灵魂,得到片刻的憩息。 14 | 15 |   不是我们不懂得生活,大多时候是因为生活改变了我们!因此,有的人总感觉是生活让自己受了伤,一旦遇到不称心的事,便怨天尤人、恨世疾俗。岂不知,这主要缘于自己还没有真正了悟生活的真谛和内在的质地。 16 | 17 |   其实,生活就是一滴灵动的水! 18 | 19 |   有人说:山无常势,水无常形,很是有些道理。是呀,水无常形,这正应和了生活的本质。我们可以认真回忆一下自己的生活轨迹,就不难发现,很多时候,遇到的人,经历的事,受过的伤,哪一点是以正常的形态出现的呢?大概没有吧! 20 | 21 |   生活,是一滴灵动的水。它滴到哪里,就融入哪里,且了无声息,了无痕迹。生活也是一样,不可能总是轰轰烈烈、到处波澜。更多的时候,宛如一泓碧水,静如处子,脉脉含羞。 22 | 23 |   灵动之水,润物无声!水之灵动,柔和若棉! 24 | 25 |   遇石则跳,遇阻则绕,遇渊则欢,遇鱼则抱。这就是灵动之水之所以经久响在我们耳边的因由。 26 | 27 |   境由心生,心生万物。如果想让生活更加美好,也让自己更加美好地生活,我们不妨就把生活看作是一滴灵动的水。就像它一样,一切随势顺缘,尽情欢畅奔流。如若不能,便会滋生许多苦楚、哀愁和悲痛。 28 | 29 |   学一学那灵动的水滴,落入荒漠,便与漫漫黄沙合为一体;滚入江海,便与呼啸之声和弦鸣唱;溅入污浊,便与万物生灵息息相通!即使化为一缕薄雾,也会在太阳的光辉里,倒映绚丽的彩虹!即使滴成一颗露珠,也会在清晨的微风里,闪动晶莹的眼眸!即使变作一份营养,也会在小草的笑容里,招展付出的轻盈! 30 | 31 |   有一句话说得非常有哲理:“一个人总是仰望和羡慕着别人的幸福,但每一次回头时,才发现自己正被仰望和羡慕着。”是呀,仔细地想一想,很多时候,你的幸福,常常在别人的眼里,可自己却视而不见。 32 | 33 |   为什么会出现这样的情况?主要还是对生活本身缺乏一种内在的理解和把握。倘若把生活看作是一滴灵动的水,一切的一切就会迎刃而解了。 34 | 35 |   其实,我们之所以时常感到生活的不幸和楚痛,一个至关重要的因素,就是我们的心中总会滋生许多这样那样的想法,以至于苦苦追寻一些本来虚无飘缈的事物而舍不得放下,最终给自己设置了一道无法跨越的“魔障”和“鬼域”! 36 | 37 |   在这样的境况中左右摇摆,踌躇而行,哪里还能领略生活本真的味道?佛语说得好:“菩提本无树,明镜亦非台,心中无一物,何处惹尘埃?”只有懂得放下,才能轻盈上阵,解锁前行! 38 | 39 |   就像一滴灵动的水,无欲无求,反璞归真,在默默无声、晶莹纯净的滚动中,去体悟“梅花经历风霜苦,凌寒才有一段香”的况味。以这样的心境去生活,还会有烦恼吗? 40 | 41 |   有一首《宽心谣》,与灵动之水有异曲同工之妙,如能细细品味,定能深受启发:“日出东海落西山,愁也一天,喜也一天;遇事不钻牛角尖,人也舒坦,心也舒坦;正确树立金钱观,多也喜欢,少也喜欢;少荤多素日三餐,粗也香甜,细也香甜;新旧衣服不挑拣,好也御寒,赖也御寒;常与知己聊聊天,古也谈谈,今也谈谈;多把他人长处看,你也心欢,我也心欢;同志之间互慰勉,老也相安,新也相安;勤奋上进不埋怨,苦也乐观,累也乐观;心底无私天地宽,不是神仙,胜似神仙!” 42 | 43 |   生活,是一滴灵动的水!只要心纯意美,即使是一朵无名的小花,也会在幽谷里绽放肆意的芳菲! 44 | -------------------------------------------------------------------------------- /context/0005: -------------------------------------------------------------------------------- 1 | 坚贞信念的爱情总是经得起岁月的考验和风雨的洗礼,尤其到了中年,这种爱情就变成了左手和右手,彼此不可或缺的那部分。 2 | 3 |   我们家邻居,是一对中年夫妇。男人虽是满头白发,但在他的脸上却看不到一点点生活带来的忧伤,岁月留在他脸上的皱纹都被他灿烂又慈祥的笑容抢了风头,每次见到他,都会漏出一口洁白的牙齿。而旁边的女人比较瘦小,有点面黄肌肉的模样,两个人站在一起有些不搭调。 4 | 5 |   从我们搬过来两年多时间,从来没听到他们有过任何口舌之争,每次出门都是男人拉着女人的手一起等电梯,一起出去买菜、购物……就像年轻情侣每天做的事却被他们复制了,这引来我们整层楼邻居的羡慕。 6 | 7 |   但这样的画风没过多久却发生了改变。有过一段时间没有见到过他们一起出门,也只是偶尔看到男人一个人出门买菜,脸上依旧挂着灿烂的笑容。有一天我下楼扔垃圾,在楼下看到男人搀扶着女人走路,我感到很吃惊,一问才知女人前段时间得了脑出血,留下了后遗症,现在腿脚不便,就连一只胳膊也受了牵连,生活必须要有人来照顾。 8 | 9 |   从此,男人便完全进入了家庭煮夫的生活阶段。由于女人生活无法自理,男人包揽了家里所有的家务和照顾女人的责任,开启了每天每个时间点固定的生活模式。洗衣做饭打扫房间、早晚用热水给女人泡脚、扶着她在楼道走路锻炼、帮助她做腿部和手臂的按摩…… 10 | 11 |   听起来这么简单又正常的事情,他已经坚持了快一年,每次见到他依然是那副慈祥的笑容,在他的脸上看不到任何的怨言和牢骚,依旧坚持着每天该坚持的。我想这就是执子之手,与之偕老。 12 | 13 |   经过男人的细心照料,女人恢复的非常快。由起初的步履蹒跚,必须让人扶着才能挪动,甚至说话都有些困难,直到现在不需要借力可以走很多步,脚步也变得轻盈,说话已经恢复正常,不得不说,男人的功劳非常的大。 14 | 15 |   有一次我开玩笑的说“阿姨恢复的这么快,叔叔真的是功不可没” 16 | 17 |   女人连忙接话,就像要借机感谢男人,字里行间非常肯定的说“真的是这样,没有他,我现在是死是活都不知道” 18 | 19 |   男人笑的更加灿烂了,说道“都是一家人,别说两家话,谁这辈子不生点病啊” 20 | 21 |   这个年龄的这个心态,或许是看穿了世间百态、人生无常,也或许是爱情带来的力量。 22 | 23 |   我们常说心态决定一切,面对生活带给我们的种种压力和坎坷,只有保持一颗积极向上的心态,和坚持不懈的精神才能够度过一个个难关。 24 | -------------------------------------------------------------------------------- /context/0006: -------------------------------------------------------------------------------- 1 | 2 | 3 |   某高中同学在网上告诉我小樱领证结婚了,还给我发来他们的结婚照。红底照片上的一对新人好似金童玉女,十分合衬。我盯着小樱光洁的额头看,突然好奇,新郎知道小樱曾经额头上都是毛发吗? 4 | 5 | 你才不是一个没有故事的女同学  小樱是我的高中舍友。那时我们很要好,手机还不普及,我的床位靠近固定电话机,她经常躺在我的床上用IC卡打电话,巴掌大的小脸,露出满额头的毛发。我第一次看到时吓了一跳,“你的额头怎么都是毛?”她拿开话筒,嘘声说:“没进化好!”原来她毛发旺盛,额头都是毛发,发际线模糊,撩起来怪吓人,平时留着齐刘海,轻易不让人看到额头。 6 | 7 |   就算没进化好,她依然是一个美女。其实她算不上真正意义的美,我们家的男同胞全见过她的人,都说一般,没有我说的那么美。是,严格算起来,她根本不美,小眼睛,单眼皮,塌鼻梁,尤其一口参差不齐的烂牙,实在算不上美女。但她依然被很多人评为班花,这大概和她在深圳长大有关,她小时候和家人在深圳生活上学,因为户籍问题不能在深圳异地高考才回到老家上高中。见过世面的她气质上较之课余还要下田干活的农村女孩自然更出尘优雅一些,而且她的皮肤极好,雪白细腻,招人喜爱。 8 | 9 |   我很喜欢她,她性格活泼热情,声音甜美清脆,我们很要好,几乎形影不离。和她走在路上,常有男生看她,我跟她开玩笑:“和你在一起,我也享受了回头率。”我们去超市买东西,连我的东西老板也因为喜欢她而省去零头。因为喜欢,我待她很好,大早起床去食堂帮她买早餐。当然她也对我不错,怒骂对她不错但欺负过我的男生,帮我洗衣服,和我讲她初中男友的故事。 10 | 11 |   我知道有很多男生喜欢他,但很少人明儿地追她,因为和她走得近的男生大都知道她有个初中同学的男朋友。他们分分合合好几年,整个高中,她都在我的床上和他通电话。他在深圳,她在深圳上初中认识了他。在她的描述里,他是一个清瘦挺拔的男生,气质忧郁,但聪敏有趣。每一段潮湿惨绿的青春期,都有一颗无处盛放的灵魂和一份叛逆不安的爱情。小樱说,初中时他们的恋爱,曾经惊动得老师把家长都叫来。一次,班主任听说有女生跳楼殉情,急不可待,还没有确认真假就把她家长喊来学校,因为她是班里唯一公开恋爱的女生。当然不是她,她说她是自爱的人,再大的事也不会做自伤的事。但经班主任一搅,父母全知道,她虽然认为恋爱天经地义但让父母操心还是很难受。恋爱的问题,亲子的问题,在叛逆的青春期里,成为少女心中一刀又一刀的伤痕,她最不开心的时候,曾一个人在坟地改造的学校后山呆一整夜,也曾将男朋友送的东西扔到大海里。 12 | 13 |   恋爱中的女生自有一种对异性的排他,所以追她的人不多,她和大部分男生是一种哥们儿关系。高一下学期有个班级被拆分,分来一个胆小内向的男生,喜欢上了小樱。因为胆小内向,他倒也没敢有什么行动,但不知为何,他喜欢小樱的事还是被很多男生看出来,大概是因为年少单纯的人很容易真情流露吧。令人讨厌的男生们看到他写满小樱名字的作业本,大肆嘲笑,广而告之。那是一个很怯弱内向的男生,并不起眼,面对自己的心情大概也慌张,话也不敢跟小樱说,在其他人的嘲笑下日渐退缩,独来独往,更见孤单。整整大半个学期,嘲笑声不间断。 14 | 15 |   年少的女孩,被男孩喜欢,容易虚荣自持,小樱却从来没有这种虚荣。善良的小樱,每次听见别人嘲笑他,都十分难过。她想要帮助他,想对他好,与他交友,消解别人对他的嘲笑,但又不想他和他们误会。有一次晚自习前,我们去找英语老师聊天,她问英语老师有什么办法可以帮助他。她这种坦诚善良的美丽,老师也很喜欢,老师打趣她:“怪不得我们都找不到对象呢,原来大家在你们这年纪都预定完了呀!”后来,她偷偷给他一本英语参考书,并附上纸条,说自己已经有在外地的男友了,但感谢他的喜欢,愿意和他交朋友,他可以来问她英语。嗯,她英语不错,他英语不好。别人还是偶尔会嘲笑他,但他明显不再那么难堪了,她看了很高兴。 16 | 17 |   有一次小樱的男友和她分手,说不想影响她的学习,我看见她大颗大颗的眼泪滚下来,说一辈子的约定怎么不算呢。在旁的我,也以为她一辈子也忘不了他了。如今再看那金童玉女的结婚照,和谐般配,而这个金童并不是那个曾让她流泪的男友。年少的爱火光芒四射,但也如李健在《中学时代》里唱的:“爱是什么,我还不知道,谁能懂永远,谁能懂自己。” 18 | 19 |   同事经过我的电脑,看见小樱的结婚照,大喊:“这女的好可爱啊!像小朋友!”同事的意思大概是说小樱面相看起来纯真简单,不似有的人脸上写满故事。我盯着结婚照想,你才不是一个没有故事的女同学。你的故事多么温暖,不仅因为青春里飞扬的爱恋,还因为润物无声的善良。 20 | 21 |   小樱曾经闹着玩照着杂志上的交友电话给人打过去,对方不相信她真名叫小樱,她在电话这端愉快而清脆地大声回答:“我就是叫小樱啊,我就是叫小樱啊……”已经多年未见,现在想起来,仍然是她清脆的声音:“我就是叫小樱啊……” 22 | -------------------------------------------------------------------------------- /context/0007: -------------------------------------------------------------------------------- 1 | “人生若只如初见,何事秋分悲画扇。”第一次见到这句诗是上课的时候,我坐在他身后,从他的书中飘出来一张白纸落到我的脚边,那是我看过写的最好看的字,工整又不失张扬,给人一种特别舒适的感觉。有一种不舍得还给他的感觉,我轻轻的拍了一下他:“同学,这个是你的吧?”他回头盯着我手里的纸片,那张整齐排列的五官映入我的眼帘,他反映了一会儿,“啊!是的,谢谢!”他继续听课了,我很庆幸他并没有发现我的脸涨得通红。后来听宿舍里的人说他叫张扬,爱打篮球,是个大才子。 2 | 3 |   “阿嚏,阿嚏。”一向有鼻炎的我坐在教室里吊扇的正下方,吹的时间久了,自然有点吃不消。“给你。”旁边一个长相乖巧的男生递过来一包纸巾,“我叫李想,来自安徽芜湖,我从班长那儿看了我们班花名册,就咱俩是同乡,你叫许紫菲对吧?”“嗯嗯,我们家是安徽亳州。”我特别激动,初到这个新环境,竟然有人已经对我有所耳闻,还是有些小得意的。然后我们俩就像是给家乡搞宣传一样,把我们那儿,所有的好吃的好玩的都聊了个遍,感觉很过瘾。 4 | 5 |   刚入学,对其他人也不太认识,我一进教室李想就向我招招手,他已经给我占好了桌位。有一次起床晚了忘记吃早餐,然而我那脆弱的小胃可受不了啊!痛得我,趴在桌上捂着肚子脸色苍白,连说话的力气都没有。吓得李想从那以后每天都给我准备一份早餐,我都不好意思了。一天早上我又踏着上课铃声走进教室坐下,“快吃早餐吧!一会儿该凉了!”李想说。我从钱包里拿出一百块钱塞给他给他,“来,这两个月的早餐钱。”他不肯收,“你要不收,今后就不要给我买早餐了。”他没有收。从那以后李想没有再给我带早餐了,我也每天尽量早起五分钟去买早餐,但是李想的包里总是不断零食。每到快放学的时候,李想就特别屁颠的从书包里拿出面包,饼干之类的零食说:“来,紫菲,肯定饿了吧?”然后我们就像两只老鼠一样,把头塞进桌兜里偷吃。 6 | 7 |   其实,我想说,我们宿舍里都是女汉子。王艳拉着我说走篮球社纳新呢,我们去报名,学长可都是又高又帅又有型的呢。我很不屑的用食指点着王艳的脑袋说:“你个大花痴!”转眼我们就到了,王艳毫不犹豫的报了名,她签名字的时候,我看见我又看见了那工整又跋扈的两个字“张扬”,他也报名了。“给”王艳写完名字把笔递给我,我犹豫了一下,“哎呀!你就当是陪我去嘛!”王艳撒起了娇。“好吧!”然后我也报了名。 8 | 9 |   “紫菲,你快点,一会我们俩该去迟到了”王艳催我。今天篮球社第一次召集大家训练,我特别熟练的把长发挽起来,显得很清爽。然后我们就向体育场飞奔过去。我们去到,还没开始训练,男生们在一块打球。张扬穿着那件黄色的球衣特别显眼,他就钻进我的眼里出不来了。每一个投篮都是那么帅气,我在心里为他鼓掌呐喊。突然张扬手里的球向我飞奔过来,砸到我的头上,我感觉头很懵,就蹲下了,张扬跑过来关切地说:“美女,对不起啊,没事儿吧?”我心里窃喜,他叫我们美女耶!“奥,没事没事。” 10 | 11 |   刚开学大家总归是客客气气的,过了一段时间大家都玩得很熟了。眼看张扬一个帅气的三步上篮,运球,跳,准备投的时候被一个跳起的瘦高个挡了一下,投偏了,没有进。“张扬,你是猪吗?看不见他从这边拦你啊?”我大声嚷着。“许紫菲,你懂个毛线,闭嘴!”张扬大汗淋漓,晚霞的余光照到他身上感觉好像他整个人都在发光。他掀起黄色球衣一次性盖在脸上擦掉脸上汗珠,我就默默的关注着他,做他的小粉丝,只有我自己清楚我有多么崇拜他。我喜欢他的霸道,喜欢他和我斗嘴。 12 | 13 |   这时我的电话响了,是李想,我们说好晚上一块去补作业,因为明天要交了,其实也就是我拿他的作业copy一份。“嗯,我这边就要结束了,我在这边等你。”来到自习室,我就拿起作业狂抄,“你有没有不懂的?我来给你讲讲。”“谢谢我们的大学霸,这些我都会做只是懒得耗费时间罢了。”我三下五除二写完了。如释重负的说“走吧!”“现在就走?”他有些疑惑,“不然呆在这里干什么?”“那我送你回去吧!”他有些不舍。回宿舍的路上,他一直问:“紫菲,你要不要吃这个?紫菲要不我给你买个冰激凌吃吧?”我们就一人舔着一个冰激凌走向宿舍。“我是第一次有男生送我感觉怪怪的。”“那今后我每天都送你好不好?”他认真的看着我。“哎呀!干嘛?我长这么安全,根本不用送好吗?”我装傻的说。我们一直没有说话,到了楼下,我说:“我上去了啊,谢谢你的冰激凌。” 14 | 15 |   从那以后,每天篮球训练,李想也都会去捧场,他总是拎一大兜矿泉水,等大家训练累了休息的时候分给大家喝,“给,张扬”李想扔过去一瓶矿泉水,张扬接住,他们俩是一个宿舍的,玩得很铁。我兴冲冲跑去拿一瓶正准备拧开。“紫菲,这个是给你准备的。”李想把手中已经拧松的脉动递给我。“哎,李想,大家待遇怎么不一样啊?”王艳一脸坏笑的看着我。我使劲掐了她一下:“死丫头,来来来,咱俩换换。”我抢过她手中的矿泉水。我注意到张扬的脸铁青着,不说话,拿一瓶矿泉水浇到头上。王艳拿着脉动很得意的递到张扬面前说:“来,张队长辛苦,给您!”张扬很用力的推开王艳“我不喝!”然后就大步走开了。 16 | 17 |   回去的路上王艳一脸坏笑说:“紫菲,你说我们每天形影不离的,你跟李想什么时候好的,我怎么一开始没看出来啊!快给我招了。”然后就开始挠我痒痒。“哎呀,艳子,你别闹了。我们俩是老乡,你不要乱说,李想他个老好人对谁都好。”“那他怎么不给我买脉动啊?”王艳有点吃醋的说。“好,那我就你们牵牵牵线让他每天都给我们王大小姐买脉动好不好?”“我才不要呢,我已经有我们家张扬张大队长了,你们家脉动还是留着自己喝吧!”王艳脸上洋溢着幸福和憧憬。我的心里一紧张,有点支支吾吾的说“你喜欢张扬啊?”“对啊,紫菲,你不感觉队长特别帅吗?每一个投篮,运球,啊!真是太帅了。”王艳两眼放光的样子看着远方说。我敲了她脑袋一下,“看你一副流口水的样子,好像要吃了让人家张扬一样。”王艳一路上都在给我讲张扬怎样怎样的令她神魂颠倒,我没有听进去。我内心一阵悸动,怎么可以这样,我最好的闺蜜竟然喜欢我心底的那个小心翼翼珍藏的他。 18 | 19 |   张扬打完球,一边察汗一边冲我走过来,小心脏在砰砰狂跳,我在想要怎样跟他打招呼呢!“给你,张扬。”艳子递给张扬一瓶脉动。“谢谢!”张扬冲艳子笑笑,艳子害羞的低下了头。我就站在旁边看着他们,艳子回过神来说:“来来来,紫菲,我给你买了你最喜欢的果粒奶优。”我接过来,没有说话。燕子是一个勇敢大方奔放的女生,自从那次他给我说他喜欢张扬,现在,每次训练完,她都热情跑到小卖铺去买水。“张队长,那个三步上篮我怎么都学不会,不是多一步就是少一步,一会儿你再教教我吧?”王艳一脸期待的看着张扬。“嗯,好!”“那个,艳子,你跟着张扬好好练,我就不等你了,我先回去了。”我看出了艳子的小计谋。 20 | 21 |   从那以后我就找各种理由请病假不去参加篮球培训,也不去上课,就那样蜗在宿舍里。李想给我打电话问我是不是病了,说要来带我去医院,我说没事,就是懒得上课。李想托艳子给我拎了一大兜苹果,还有各种感冒药。过了几天,李想问我感冒好了没有,我说好了好了,怕他又给我买药。好了就要多出来走走,不能老是蜗在宿舍里。我们去了图书馆,我一头扎进书堆里,各种类型的小说书一本接着一本,不停地看,像是疯了一样。李想摸摸我的头说,你这脑子不会烧坏了吧? 22 | 23 |   到了吃饭时间,我也不愿意去,李想说你想吃什么,我去给你买回来。我说随便吧!我又继续钻进我的小说世界里去了,“嘿”有人突然跳出来重重的拍了我一下,吓得我“啊!”一声大叫出来,周围其他人都分分抬头看我,我脸刷的一下红了。张扬特别得意:“怎么样,许爱妃,你的病好了没?”他给我起的外号,他说我的名字,许紫菲,倒过来念是许妃子,今后就叫我许爱妃了。“张扬,你有病啊?吓死我了。”在其他人面前他是一个酷酷的队长,在我面前他像是一个赖皮一样,总是爱捉弄我,并引以为乐。“怎么样啊!最近都不来训练,本来就底子差还不好好训练。”“哼……本小姐就是不用训练也照样虐你。”我夸下海口。“唉吆喂,走吧!练练去。”张扬晃手中的篮球向我挑衅。我不甘示弱,放下书,跟着他来到篮球场。 24 | 25 |   我抢过球,在篮下不停的投,不停地捡球,再投,完全不顾张扬。我浑身出满了汗,但是仍然在继续投。“紫菲,你怎么了?累了就歇一会。”张扬抢过篮球关切地说,他从没见过我这样,像脱缰的野马一样,拼命投球。“不累”我去抢张扬手里的球,他的手臂很长,他双手举起球,右手一勾,球进了。他抱住我,“到底怎么了?紫菲,你这样对自己我很心疼。”我在他怀里挣扎,他抱得更紧了,“有什么事你给我说啊!”你知道喜欢的人不能喜欢是什么感觉吗?”他在我额头上深深的亲了一下,靠在他宽大的怀抱中,我感觉特别踏实,我真想时光能够停留在那里。“我不管你喜欢的是谁,但今后只能喜欢我,因为我喜欢你。”这是我听过最霸道的告白。他送我回宿舍,半路他的大手主动来握住我的小手,很温暖,但是我甩开了。我们就这样左右并排走着,离得很远,我扭捏着有点不好意思。 26 | 27 |   他跑去给我买了粥和饼,“赶快吃吧!肯定饿坏了!”他关切的看着我。我真的感觉像是做梦一样,回到宿舍,艳子跑过来关切地说:“怎么现在才吃晚饭?一天没有见你,想死你了。我要抱抱!”我的心里感觉像是做了亏心事,和艳子一直像是亲姐妹一样,我们无话不说,性格相仿的我们很合得来。我从刚才那个甜蜜的梦中醒来,心里像是压一块大石头一样,堵得慌。左手是友情,右手是爱情。洗刷完躺到床上,李想和我聊天,李想是一个特别特别好的人,无可挑剔,对我关心之至,大暖男一枚。聊了好久,我的心也不堵了,就睡觉了。梦中,我们四个人都是特别亲密的好朋友,我们纯洁透明的友谊不参杂任何杂质。 28 | 29 |   往后的日子里我特别乖,每天按时去上课,乖乖的坐在艳子和李想中间认真听课,然后去图书馆认真完成作业。只是没有再去篮球社团打球了,见着张扬也是绕道走像是没看见一样。我已经决定为了艳子我要灭了心中那窜类似爱情的小火苗。下课了,张扬就在门口堵着我,“张扬”艳子兴冲冲的跑上去,“陈紫菲,你过来一下!”张扬有点严肃。“艳子,你先去等我一会,估计是我这几天没有去篮球社训练,也没有请假,惹队长不高兴了。”我趴到艳子耳边悄悄的跟她说。艳子点点头先走了。“那我也先走了”李想感觉自己有点多余识趣地走了。“你这几天为什么躲着我?”张扬还是特别严肃。“我没有啊,咱俩以前交集也不是很多,也没怎么说话啊!”我装作无所谓的样子看着地面说。“好,那你为什么不去参加篮球培训,而且还不请假?”张扬更加愤怒了。“姐不想去了,行不行,我要退了篮球社。”我有点恶狠狠的又有点不忍心伤害张扬。“好,我再问你最后一个问题,你那天晚上有没有接受我?”张扬抱着最后一丝希望,眼睛特别渴望的看着我。“没有啊!怕你太伤心,安慰你的。”我眼神飘忽,没有敢直视他。张扬愣了一会,平静下来问我:“那你喜欢的人是李想对不对?”“对”说完我面无表情的转身走了,可是转过身的我却已泪流满面。 30 | 31 |   我在心里安慰自己,如果我和张扬在一块了,那么根据李想的性格,一定会恨死张扬,他俩就不能做好哥们了,而且我也没有脸见艳子了。如果燕子和张扬在一块的话,那么大家都还是好朋友。上课的时候,我依然和李想艳子坐一块,我知道张扬在暗中监视我,所以我就和李想装作很亲密。而且果然奏效,很快张扬就对外声称艳子是他女朋友了。 32 | 33 |   我像平时一样和李想一块去食堂吃饭,他像平时一样细心体贴的给我剥鸡蛋。吃过饭我们准备返回图书馆,我怕自己的心静下来,会感觉特别空虚和委屈,最近就一只躲在图书馆看书。李想最近和我说话我总是能够听出一种暧昧的感觉。回图书馆的路上,他竟然拉起我的手,“紫菲,我喜欢你,你可以做我女朋友吗?我听张扬说你也喜欢我,是真的吗?”我的脸上一阵发烫,没有回答他,也没有甩开他的手。当时就是,不想让李想伤心难过。就这样,李想每天都约我或者是去图书馆,或者是去公园。他以为我是默认了,善良单纯的我只是不懂得拒绝。有时候我感觉李想大多是一个一块玩耍的好伙伴,而不像是男朋友,他真的是各方面都很好,对我的好也是无可挑剔,我总是觉得我对他缺一种感觉。我们在一块玩的时候还挺愉快的,双子座和双鱼座是很好玩伴,但是恋人指数偏低。当时感觉傻乎乎的,懵懵懂懂的,上课不能做亲密动作,只要有熟人在就不能拉手。为此我们还立下字句,双方还摁手印签名了呢!两个人凑一块就变成了两个逗比。艳子每天不在宿舍,晚上回来的时候就跟拉着我说:“紫菲,你知道吗,今天我和张扬一块去坐摩天轮了呢,给你看我们拍的照片。”我看见照片上他们俩笑得都很开心。心里有一种莫名的悲伤。 34 | 35 |   放暑假了,我是很期待这个暑假的,在学校里待的够了,想换个环境。李想去火车站送我上车,一路上特别的不舍,我说没事的我们可以打电话,聊QQ。回家之后,我们每天晚上都打电话,聊的今天干什么了,聊到没有话了,还是不挂电话。我给我妈妈说,有个男孩子追我,我不知道怎么拒绝。妈妈说:“那你要知道自己到底喜不喜欢他,现在都上大学了,妈妈也不管你了,可是你要跟着自己的心走,既然都说不知道如何拒绝,那你肯定是不那么喜欢他了?”“他的人特别好,对所有人都好。”我说:“傻孩子,世界上好人多了,他们要是都喜欢你,你该怎么办呢?喜欢一个人的感觉就是就算全世界都不喜欢他,你也会站在他的身后崇拜他。在你的心中他是一个太阳般的人,是最完美的人。”妈妈说完,我的脑海里浮现了李想投中球之后嘚瑟的冲我一笑的场景。 36 | 37 |   李想再给我打电话,我们总是说不几句,我就想各种借口,我先洗澡,我妈叫我刷碗呢,然后就挂了,再打过来我就说我有一点困了。李想是那种特别迁就我,体贴的人。并不是妈妈那样说我才对李想疏远的,而是每次打电话的话题总是千篇一律,让我感觉如同爵蜡。我用我的小技俩推脱了有一个礼拜,每次打电话就只说了几句。李想问我:“紫菲,你是不是想和我分手了?你说为什么?”我没有说话,“你不想说话,好,你如果是想和我分手,就直接回答我:是 就行了。”我犹豫了,他也不说话,就这样静静的,过了好久,我小声的“嗯”了一声。然后他就默默的挂了电话,我再也打不通。他总是这样,给我想要的,哪怕我想要跟他分开,他也会撕心裂肺的满足我。 38 | 39 |   开学了,今年我们大三了,时间过得真快。回到学校,进教室的时候我的心里砰砰砰的,好像是做了亏心事一样既害怕见到李想,又有点想看到他。我偷偷地看着他,他瘦了许多,整个人也都像霜打的茄子一样,萎靡不振的。他找过我一次,“紫菲,我们不闹了好不好?”我不知道怎么回答他,他看出了我的答案。走的时候给我留下了一大堆好吃的,回到宿舍,翻看他买的零食,我哭了,全都是我爱吃的。他没有再来找过我,他好像消失了一样,我知道自己有多么残忍,自责也无济于事。从此他对我就就鸡犬之声相闻,老死不肯往来。开学之后,艳子每次回宿舍总是眼睛红红的,看样子张扬又惹她生气了。没多久他俩也分手了。 40 | 41 |   时间过得不急不慢,百无聊赖的我喜欢泡图书馆,一泡就是一整天,大学,我可没少啃图书馆的书。上课的时候,李想总是故意躲着我。张扬喜欢盯着我看,碍于艳子,我也总是避着他。快毕业的我们还是比较忙的,写完论文,答辩过后,我们就要毕业了。 42 | 43 |   有些人,一辈子都不可能会在一起,但可以在心里藏一辈子。毕业那天晚上你问“如果我们能在恰当时间,恰当的地点,恰当的场合,相遇在一起,会不会在一起相恋?” 44 | 45 |   “时光恍若隔世,或许会吧,只是没有如果!”我抬起头,仰望着星空说。 46 | 47 |   泪光滑过你的脸颊,在夜空发黄的灯光照耀下,显得晶莹剔透,“我懂了!”你转过身,背向着我说。 48 | 49 |   “人生若之如初见,何处秋风悲画屏。”彼岸豆蔻,谁许谁地老天荒?此去经年,谁伴谁天涯海角?只道是情深似海,奈何缘浅于此。你说“我们在最美的季节相遇,却没有在最美的季节相恋。”我说“情深与此,奈何缘浅!”只道一声君安,勿忘! 50 | -------------------------------------------------------------------------------- /context/0008: -------------------------------------------------------------------------------- 1 | 吃罢晚饭,正要收拾碗筷,楼下突然传来激烈的争吵声。仔细听听,原来是两口子准备离婚。为孩子,房子,车子和存款达不成最终分割的统一意见而大战马路。丝毫不顾及路人的眼光和哭的撕心裂肺的孩子。 2 | 3 |    离婚,在这个物欲日益膨胀的社会,已经不是什么新鲜事。离婚的理由也是五花八门,只要婚姻中有一方,想要退出婚姻的围城,围城的墙壁上随时都可以找到一个可以钻出去的洞口。一个芝麻绿豆的事态,也会被人用心良苦的大肆宣扬,无限的扩大,直到另一方妥协,被吹大的肥皂泡泡才会破灭,才会息事宁人。 4 | 5 |    无形的洪荒之力,把应有的责任心冲打的溃不成军,霓虹灯飘渺的光影下,一颗心越来越虚浮。忍耐的底线越来越高,包容的尺度越来越小,关怀的甜点越来越少。越来越多的与时俱进的学会了自私自利的享受,把自己高高在上的放在心中无可替代的位置。爱,成了一个人的独角戏,不再分享与共。 6 | 7 |    庄严神圣的大红色结婚证书,渐渐的褪去了它的终身制和不可侵犯的尊严,变成了可以随意调换的商品,不再用“从一而终”的心态去呵护它,守卫它。闪婚,闪离,踏着快节奏的生活旋律,走着快节奏的步伐,新生代的名词在一闪过后,铺天盖地的流行起来。 8 | 9 |    一只刚出炉的面包,在适宜的温度下有三天的寿命,若放在高温潮湿的地方,能隔夜不发霉,就很不错了。采摘下一只健康的苹果,在妥善的保存下要半年才能脱水干瘪或者是腐烂。若放在桌上置若罔闻,顶多采摘下来一个月,外观就让人不忍直视。它们寿命的长短,不在乎是否劣质,而是没有正确的,稳妥的,用心的去呵护。 10 | 11 |    爱情也一样,需要妥善的保管才能让它的生命力发挥到极致。携手走入婚姻围城的俩个人,不管初遇时的心动多么激烈,若是不好好的用心供养爱情的玫瑰花园,保鲜期会提前,会在凋零之后发霉腐烂。不管贫富与否,爱情里从来不缺少浪漫,缺少的是把激情正确的转化为亲情的方向,让两颗心,不仅仅是你装着我,我装着你,还默契的装着我们对未来的打算和珍藏一路共有的记忆。 12 | 13 |    婚姻,不是用来捆绑感情的,而是责任的升级。有感情的人不一定非要结婚,但结了婚就一定要负起责任。组建起这个家庭的男人和女人,不再是单纯的个体,而是既能自由活动又能互相约束的结合体。同在一个屋檐下,共同打造一个家,而这个“家”质量的好坏,能不能长久的使用,和遭遇风雨时能不能得到妥善的维护,是要两个人齐心协力去付出的。 14 | 15 |    好的婚姻,都是用心经营出来的。一份呵护打造一份和谐,一份容忍收获一份安稳,一份付出得到一份明媚。经营的阳光和绚,鸟语花香的家,不管涉入尘世的心有多疲惫,迈进家门的那一刻,轻松宜人的氛围都会把心灵上的尘埃轻轻的拂去。一句暖心的话,一杯喜欢的茶,在日复一日的简单中,让纯真的感情愈发的浓厚。 16 | 17 |    温暖心灵的不是暖气,拂去烦躁的不是空调,而是一份懂得与体贴。能够拴住一颗心的不是容貌与身材,也不是地位与身价,而是另一颗心的内涵。两情相悦,四壁透风的草房,也会被内在的幸福填满。家是心灵的港湾,是灵魂栖息的地方。不需要奢华,却一定要舒适。 18 | 19 |    婚姻的灵魂是感情,一个没有好好维系感情的婚姻就是一个空壳,无论装潢多么的奢侈华丽,都会在风雨中不堪一击。每天,细腻的感受爱人的一颦一笑,适时的调节自己心情,转换自己的思想。用心的接受身边人的悲与欢,对与错的同时,也坦诚的对身边人敞开自己心扉,把自己的苦与乐,阴与晴用恰当的方式倾诉与爱人。 20 | 21 |    交流,是让爱情长久不可或缺的方式之一。有些顾虑,说出来,心结会轻轻的打开。有些矛盾,说到明处,干戈就会化为玉帛。有些苦衷,说出来,紧蹙的眉头就会云淡风轻。爱人也是人,不会未卜先知,也不会能掐会算,有些话,不说,就失去了让TA懂得的机会。即便不懂,TA还可以问,你还可以解释。 22 | 23 |    夫妻关系和任何一种关系都不一样。手足之情,朋友之情,都是真挚的,甚至我们可以拿命去换,可真的某天利益当头,还是会掂量下轻重,考虑一下是否可行。夫妻的利益不分孰重孰轻,一荣俱荣,一损俱损,没有彼此之分,没有胜败之说,确切的说,彼此之间的任何事态,都没有什么利益或是损失可以是单对某一方的。 24 | 25 |    这样的两个人,没有理由不相互敞开心扉,掏出肺腑。在为事业打拼的空闲时,在烟熏火燎的罅隙里,背靠着背,对着一窗新月,把柔软的心敞开,听听爱人的心,也让爱人听听自己的心。用自己温柔的体贴缝补爱人闯荡在外留下的伤口,而自己在人际中的憋屈也让爱人用TA的细腻温情融化。 26 | 27 |    最好的婚姻,不是郎才女貌,门当户对,而是无才无貌,门不当户不对的两个人,彼此在乎,彼此珍惜,彼此忍让,彼此奉献,因为心中真挚的爱,粗茶淡饭才会在唇齿间留香,粗布衣衫才能穿出眼中旖旎的风景。 28 | 29 |    能够走进婚姻的殿堂,无外乎是一见倾心或是日久生情。只是那个当初怦然心动的人在柴米油盐中黯然了色彩。当青蛙王子天天为生活奔波的时候,他的帅气和体贴难免打些折扣;当白雪公主时时为生活操碎了心的时候,她的贤淑与温柔难免遗失些许。不要抱怨婚前与婚后的TA判若两人,能够改变对方的因素大部分是自己造成的。 30 | 31 |    作为一个男人若能顶天立地的为爱人撑起一片晴空,用关怀和呵护让她无忧无虑如少女般生活在温馨的摇篮里,被爱情滋润的她会更加可爱,比婚前有过之而无不及。没有哪个女人愿意做怨妇,心情舒畅的女人会把锅碗瓢盆的协奏曲弹奏的很美妙,虽比不了天籁之音,却也能让人流连忘返。 32 | 33 |    做为一个女人若能用一个贤妻良母的温婉为爱人解去后顾之忧,用体贴和善解人意让他能够放手自己的事业,被爱情浇灌的他会更加成熟稳重,用全身心去为家打拼。没有哪个男人愿意把家庭当作战场,温暖舒适的小窝会让他乐此不彼的为家人系上围裙,用一粥一饭诱惑爱人的味蕾,温暖爱人的心扉。 34 | 35 |    生活的快节奏,社会的高强度压力,免不了会有心理上的压抑需要用发泄来缓解。而发泄的方式有很多种,有人酗酒,有人玩命工作,有人大发雷霆,喋喋不休的抱怨,只有少数明智的人,才会对着爱人,娓娓道出自己的感觉。甘苦与共的另一半,也有自己的独立的思想,有时候TA会无法接受你的缓解的方式。勺子碰到锅沿时,恰当的退一步,给枕边人一份包容,一份体谅和一分钟的解释。 36 | 37 |    细腻的爱情会擦去在尘世中跋涉而蒙尘的心,会修复在风吹雨打中道道伤痕,会营养在外应酬疲惫而枯燥的心。好的爱情是婚姻的润滑剂,在不断的注入下,婚姻会永远的和谐美好。“百年修得同船渡,千年修得共枕眠。”虽然我不相信前世来生的说法,相信人只是个一次性的肉体,用完之后,就会回归自然的垃圾场。但在千千万万的人之中,能够遇见真的不容易,应该用生命珍惜这份来之不易的缘分。 38 | 39 |    两个人在一起,同在一个屋檐下,并驾齐驱,没有高低贵贱之分,没有聪明笨傻之分。在日久的相濡以沫里,习惯慢慢融合,性格慢慢互补,爱的激情慢慢升华成血脉相连的亲情。爱与情,不仅仅是左手牵右手的浪漫,更是息息相通的心与肺;不仅仅是心甘情愿的做另一半的拐杖,更愿意做TA的眼,TA的嘴,TA的一切的一切…… 40 | -------------------------------------------------------------------------------- /context/0009: -------------------------------------------------------------------------------- 1 | 不要等到生病住院了,才明白健康是多么的重要。 2 | 3 |   身体是自己的,不论好坏都得自己承载。健康的身体让我们如鱼得水,游山玩水,不健康的身体可以让我们度日如年,甚至于拖垮一个家庭。生活要注重细节,平时要善待自己,克制自己,健康都是从一点一滴的好习惯中培养出来的。 4 | 5 |   不能等到年老无助了,才明白时间是那么的重要。 6 | 7 |   随心而动,想做的事情就抓紧时间去实现吧。一眨眼,我们就都要面对现实苍老了。喜欢的东西,自己动手用脑努力赚钱去买;喜欢的人,学会珍惜拥有,用心经营好彼此之间的情谊。别等到老了,心有余力而不足的时候,才遗憾时间都去哪儿了。 8 | 9 |   不要等到人心凉透了,才明白原来没有学会珍惜。 10 | 11 |   往往摆在我们眼前的,现实的版本,我们总是不以为然,仿佛别人对我们的好都是理所当然,不懂得感恩。其实平凡的陪伴弥足珍贵,无声无息的默默付出最伟大。我们的父母,我们的爱人,我们的孩子,我们的知已朋友,都是日复一日,年复一年的施恩于我们,全心全意不求回报。所以,我们应该学会珍惜,回赠给他们同样的关心和温暖…。 12 | 13 |   不要等到落魄、处处碰壁的时候,才明白谁是真正的朋友。 14 | 15 |   人与人之间相互交往,不但要用眼睛辨别是非,还要更加用心的去体会,谁才是我们身边真正的朋友,并不是每天陪着我们胡吃海喝的朋友就是真朋友,也许在你张扬、辉煌的时候,他们像苍蝇一样围着你转,当有一天,你落魄不堪的时候,他们就离你远去,形同陌路。 16 | 17 |   人生苦短,我们伤不起、赌不起、输不起、也等不起。能真正争取到手里的东西举止可数,所以,我们一定要努力去争取,做自己想做的事情,哪怕最终的结果是失败,至少我们尽力了,试过了,不要连尝试去做的勇气都没有。 18 | 19 |   人生在世,有多少人都输在一个“等”字上,总以为很多人,很多事都可以等到,等自己有能力,等自己有机会,等自己长大,等自己有钱,等自己有时间,等自己有工作,等自己退休后……。然而,握在自己手里的幸福是经不起等待的。等没了青春,等没了健康,等来的是无穷无尽的悔恨和遗憾。 20 | 21 |   人这一辈子,真的很短暂,千万别懂得太晚!太晚!太晚!重要的事情说三遍! 22 | -------------------------------------------------------------------------------- /context/0010: -------------------------------------------------------------------------------- 1 | 生活就如同时间一样,对每一个人都是一样的。但是却因为人与人思想、思维、心态等不同便出现了不同的生活局面,有的人过得贫苦心酸,有的人过得衣食无忧,有的人过得锦衣玉食。 2 | 3 |   面对如此落差的生活,自然就会心生埋怨或牢骚满腹。但是,我们可有进行过深层次的分析和思考,为什么别人可以过得很好而你却过不好?很多时候,我们就是太在意自己家境或父母为我们积累的财富或给予我们的物质基础太过于薄弱,把借口和理由全部推到了父母的身上,如果只是这样那还不为过,要是把自己不努力才导致自己生活不如别人或者当成是父母的罪过,那么这样就太不应该了。 4 | 5 |   父母能给予我们的其实只有生命,这已经是大自然对我们最大的恩赐,我们绝对不能不感恩反而忘恩负义或者恩将仇报等,那是我们最大的罪过。我们其实更应该知道自己的处境和与别人的不同,而找到自己奋斗的方向和目标,并不断地去努力和改变。如果只是一味地进行抱怨或发牢骚,那样可能一辈子也就这样了。 6 | 7 |   在我们的身边出生卑微、家境贫寒、遭遇不好的人比比皆是,但是他们却可以活的潇洒自由、幸福美满,而你怎么不能呢?这就是我们该思考的,应该清楚:“抱怨没有用,一切靠自己”。因为在这个世界上我们唯一能依靠的只有自己,为什么?因为你靠别人,别人不可能永远帮助或者侍奉你,有一天他们会离开你;因为你靠父母,父母不可能永远把你当孩子或不让你长大,有一天他们也会离开你;因为你靠亲戚朋友,亲戚朋友不会时时刻刻都能帮助你,有一天他们也会爱莫能助。 8 | 9 |   抱怨,其实对我们是最大的阻碍,如果我们就因为遇到一点点的不如意或不顺心就开始心灰意冷、者垂头丧气、一蹶不振,整个人急如此颓废下去,那么谁也拯救不了你,谁也改变不了你,最终真的就会谁都看不起你。我们应该时刻保持着一种阳光心态,自信生活,因为生活本来就不会那么美好,那么我们就更没有理由不去把它过好。这种心态其实才是难能可贵的,但是我们很多的人就是做不到,或许他们总会觉得这样就是做作,就是矫情,就是在勉强自己。但是,我们可以仔细地去观察一下我们身边的人,那些整天只会抱怨的有几个成功了?没有。反而那些遇到困难主动寻求解决办法的基本都小有成就,这就是区别,这就是你一直想不明白的。所以,你的生活不如别人那就是因为你吃不了别人能吃的苦,你不想去付出别人付出的那么多,你不去面对或者害怕面对那些困难与挫折。 10 | 11 |   古语有云:“吃得苦中苦,方为人上人”,正是告诉我们在面对生活的苦于累理所应当,我们只有经历了世间的苦才会砥砺我们坚韧不拔的意志和不屈不挠的品格。我们需要的是行动而不是抱怨和牢骚,只有行动才能解决问题,抱怨只能算得上是对自己无能的愤慨。因为自己没有能力或勇气去克服和改变,才会找借口和理由来推脱,才会不断地心生怨艾,最终困扰自己从而庸庸碌碌消耗了一生的宝贵时光。要成为人上人,就必须克服抱怨心态,消除牢骚心理,用一种我能行的自信去拼搏,这样你的人生自然与众不同。 12 | 13 |   要想真正的的活出一个像样的自己,那么就得时时刻刻都正视自己,正视自己的缺点和不足,正视自己生活的不美好之处,正视自己的行动与能力,然后在不断的实践过程中完善自己,彻底的告别抱怨,这样你就会获得一个全新的自己,你才会真正的蜕变,勇敢的走出生活的包围圈,跨出思维的禁锢区和舒适区,大胆的去践行自己的想法,克服生活中的种种困难,只为成功找理由,不为失败找借口。告诉自己,借口和理由只能是某些时候对别人的一种敷衍与应付,但这其实也是不应该的,因为我觉得我们做人就应该敢作敢为,有胆识、有担当,绝无任何借口,这样雷厉风行的作风是我们前进的动力和利器。每当自己在遇到一些失败或挫折的时候,要清楚自己是能力不济还是准备不够充分,是自己没有意识还是别人捷足先登,而不是一来就抱怨命运不公或者埋怨自己能力不如别人。这只在一念之间便决定了你以后的一个成就与收获,有时候你清楚根源在哪里,那么便为你后续的生活提供了借鉴和警示,知道自己该从哪些方面去努力攻克,自己该提升哪些方面的能力。 14 | 15 |   与其用时间去抱怨反倒不如把这些时间留给自己去思考、总结和改进。因为只有把时间充分的运用起来才会让我们没有时间去胡思乱想,才会更能够激励自己奋发向上,积极进取。这样紧张而充实的生活才是我们必须的,如果你没有时间去颓废,没有时间去抱怨,没有时间去无聊,那么你一定可以向别人一样优秀,你也会觉得自己换了一个模样,那么你就活出了一个真我。因为我们每个人都有三个“我”——假我、自我、真我,只有将自己的潜能全部激发出来并坚持不懈的努力下去,那样才会发现真正的我,才会发现自己也优秀的潜质,所以,不要随便的抱怨自己,只需要努力到无能为力,拼搏到感动自己就可以了,就能够人生无憾。 16 | 17 |   我们来到这个世界,似乎就是为了要做点什么?因此,在我们的这个漫长而又短暂的生命时光里,我们真的应该多一些努力少一些抱怨,不断地敲响自己的奋斗的号角来警示自己,不断地激励自己抱怨没有用,抱怨只能是对自己无能的愤慨。 18 | -------------------------------------------------------------------------------- /context/0011: -------------------------------------------------------------------------------- 1 | 时间是一道转轮,寒来暑往,兜兜转转,却在不经意之间磨平了人的棱角。蓦然一惊,已到中年,所有青春的轻狂,化作酒一杯,凝成过往。少年听雨歌楼上,壮年听雨客舟中,暮年听雨僧庐下。 2 | 3 |    年少时,不懂人情世故,所以肆意挥洒青春,贪恋红尘,伤害过别人也被人伤害;壮年时,出门闯荡,为生活忙忙碌碌,在磕磕绊绊中学会珍惜和坚强;等到渐渐老去,历经了世事刁难,才慢慢参透人生,学会慈悲,一蓑烟雨也是平生,极致简单才是美。 越活到老越明白,越直越吃亏,越发脾气越是伤害自己。人心本就浮躁,太多人活在自己的世界,听不进他人的言语,如果你先动气,就会被人抓住弱点。人心本就虚荣,听不得不好的评价,如果你不懂得修饰,不懂得委婉,随意去评判他人,最终惹来的也是不愉快。 4 | 5 |    人活在世,不需要急也不要太硬,学会柔软,学会不动声色,在安静中,才能显示人品的高贵,享受世界的美好。 有的时候你觉得自己看透了一切,但是你要知道,你永远也猜透不了人心。社会残酷,世事繁杂,总有你想象不到的事物存在。学会谦虚,活到老学到老。人这一辈子,看不完,想不完,唯有淡然。锋芒太露,容易被打压,稻穗太重,容易压弯腰。别急着显山露水,说话之前想十秒,太自作聪明会被人嫉妒,遭人陷害。谦虚是美德,装糊涂是智慧。 学会放下和后退。放下就是自在,后退一步海阔天空。 6 | 7 |    人之所以烦恼太多,就是执着的太多,想要的太多,欲望只会摧毁你本就平稳的步伐,让你失去最初的自己。时不可追,最重要的是过程,而不是结果。很多东西失去了就失去了,只要曾经拥有过就好了。走累了就停下来歇歇,走不下去了也别硬撑,钱没了还可以再赚,只要人活着就有机会。 8 | 9 |    人生在世,什么也买不来健康和快乐。 看淡一切,看开一切。纸醉金迷花花绿绿的喧嚣,不如天地一人,云水禅心。淡到极致就是绝美,看开了就是新的世界。别去在意别人的看法,只遵从内心的想法,快乐一天是一天,人最终的归宿还是自己,孰轻孰重,冷暖自知。不因老去而忧伤,不因得失而惆怅,饿了吃饭,困了睡觉,糊涂时读书,做好最简单的事情,你就学会了真正去生活。 10 | 11 |    亲爱的自己,不要害怕磨难,也别害怕孤单。人生本就是自己和自己的修炼,你终究会和最好的自己相遇,也会获得最好的温暖和幸福。惜福的人才能获得快乐,心中有爱的人才会被爱,每一个善良的人都会被世界温柔以待。 认真生活,静悄悄绽放。时光若水,无言即大美。日子如莲,平凡即至雅。 12 | 13 |   写给渐渐老去的自己,我们开始变得害怕,但却又不知道自己究竟在害怕什么,似乎我们什么都没有失去,但又像我们失去的什么都不剩。 14 | 15 |   写给渐渐老去的自己,其实我们还可以很好很好的,即使只是一个人,我们还可以坚持自己的坚持,选择自己的选择,做自己想做的事。看自己喜欢的电影,听自己喜欢的歌,爱自己爱的人,追求我们自己想要的一切,但是我们不要轻言放弃,我们不能放弃。 16 | 17 |   写给渐渐老去的自己,我要开始一次漫长的旅行,可能会有你的陪伴,但是也许会只有我一个人,路还是要自己走,梦还是要自己实现,只是还是会希望有你的陪伴。 18 | 19 |   写给渐渐老去的自己,当我终于看到自己安静的一面时,可能我是真的老去了,也许只是我变得成熟了,却都是离死亡又近了一步,离我们分开的日子越来越近了,但是现在我还不知道你在哪儿。喜欢的不一定可以永恒,想要珍惜的不一定是属于你的,陪你到最后的可能不是你真正欣赏的,可是喜欢的东西是不会消失的,又害怕不会拥有,是不是老去了的我们开始变得很贪心很贪心,想要拥有整个世界? 20 | -------------------------------------------------------------------------------- /context/0012: -------------------------------------------------------------------------------- 1 | 中国银监会2017年组织开展了“三三四十”等一系列专项治理行动,下大力气整治银行业市场乱象,取得阶段性成效,银行业经营发展呈现出积极变化,整体保持稳中有进的良好态势。但是,整治银行业市场乱象具有长期性、复杂性和艰巨性,是当前及今后一段时期银行业改革发展和监管的一项常态化重点工作。为全面贯彻落实党的十九大、中央经济工作会议和全国金融工作会议精神,严守不发生系统性金融风险的底线,近日,银监会印发了《关于进一步深化整治银行业市场乱象的通知》(以下简称《通知》),在全国范围内进一步深化整治银行业市场乱象,切实巩固前期专项治理成果,着力引导银行业回归本源、专注主业、做精专业、合规经营、稳健发展。 2 |   《通知》对2018年深化整治银行业市场乱象提出了一些具体、可操作性的工作要求,明确设定评估、检查、督查和整改等环节,以评估检验质效,以检查锁定问题,以督查确保真实,以整改促进规范。要求实行“一把手”负责制,制定可行性、针对性强的实施方案,深挖细查,规范整改,严肃问责,并严格纪律执行。对严重违法违规行为、屡查屡犯问题、重大案件和风险事件,依法进行处罚,提升监管威慑力。 3 |   为加强政策执行,突出工作重点,银监会同时印发了《进一步深化整治银行业市场乱象的意见》(以下简称《意见》)和《2018年整治银行业市场乱象工作要点》(以下简称《要点》)。《意见》共10条,对深化整治银行业市场乱象提出方向性、原则性和指导性的工作要求,明确银行业金融机构承担主体责任,监管部门承担监管责任,要求把发现问题和解决问题作为出发点和落脚点,重点整治问题多的机构、乱象多的区域、风险集中的业务领域。 4 |   《要点》共8个方面、22条,明确2018年重点整治公司治理不健全、违反宏观调控政策、影子银行和交叉金融产品风险、侵害金融消费者权益、利益输送、违法违规展业、案件与操作风险、行业廉洁风险8个方面,基本涵盖了银行业市场乱象和存在问题的主要类别,同时单独列举了监管履职方面的负面清单。 5 |   银监会方面强调,各银行业金融机构和各级监管机构要准确把握习近平新时代中国特色社会主义思想的理论精髓,在思想上政治上行动上与以习近平同志为核心的党中央保持高度一致,不折不扣落实党中央、国务院关于金融工作的决策部署,以深化整治银行业市场乱象为重要抓手,切实回归服务实体经济本源,坚决打好防范化解重大风险攻坚战。 6 | -------------------------------------------------------------------------------- /context/0013: -------------------------------------------------------------------------------- 1 | 中国人民银行副行长殷勇1月14日出席第二届金家岭财富管理论坛并作了题为“推进人民币国际化 服务全面开放新格局”的主旨演讲。殷勇表示,综合中国经济地位与人民币目前使用状况的差异,考虑到市场对扩大人民币国际使用的巨大需求以及“一带一路”倡议为人民币国际化提供的重要战略机遇,可以得出一个结论,即人民币的国际使用还有巨大的发展空间。 2 |   殷勇称,中国目前在全球经济、贸易和投资中已经占有了很重要的份额。但是,人民币在国际体系中还处在一个相对较低的水平。例如,在国际清算总量当中,人民币使用量大概只有1.8%左右;在全球外汇交易总量中,按可比口径调整后,人民币大约在2%左右;人民币占全球外汇储备也才刚刚超过1%。可以说,人民币在国际体系中的使用程度和中国经济的国际地位相比还有比较大的差距。一种货币的国际地位从根本上来说是由这个国家在全球经济当中的地位和影响力所决定的,从这个角度来说,人民币国际化还有很大的发展空间。 3 |   同时,市场存在着扩大人民币国际使用的巨大需求。“中国目前是全球最大的贸易国,但人民币在中国跨境贸易结算中的占比只有1/4左右。实际上,进一步增加人民币在跨境贸易中的使用会带来很多便利,最明显的就是可以降低通过第三方货币进行转换的汇率成本,同时相应减少汇率风险,也能够减少对第三方货币的融资依赖。”殷勇解释说,因此,从进一步减少汇率风险、汇兑成本和提高融资可靠性的角度来说,市场有继续扩大人民币国际使用的需求。 4 |   从全球投资组合、优化全球投资配置的角度来看,市场对人民币资产也有巨大需求。据殷勇介绍,2017年7月3日,我国开通了债券通,这是在我国已经开放银行间债券市场的基础上引入的一个新通道。截至去年11月末,已有212家机构通过这一机制入市,目前债券的托管余额已经接近800亿元。 5 |   殷勇认为,由于国际地缘关系的一些变化,一些国家滥用国际主导货币地位,片面谋取单边利益,利用国内法搞长臂管辖,例如实行单边的国际金融制裁等,这些做法促使不少国家和地区把眼光投向了更负责任的货币,人民币因此成为很多国家和地区的一个选择。此外,“一带一路”倡议为人民币国际化提供了重要的战略机遇。 6 |   不过,殷勇强调,人民币国际化是一个长期战略。一种货币成为国际的主要货币,往往需要经历一个漫长的过程。同时,一种货币的国际化没有必要以替代其他货币成为国际主导货币为目标。 7 |   在殷勇看来,随着世界多极化的不断演进,出现几种主要货币共同存在、共同发挥主导作用的局面是有可能的。人民币国际化的目标主要是便利人民币在我国对外贸易、投资和其他涉外经济活动当中发挥作用,不应该以人民币的排名作为国际化的目标。 8 |   据殷勇介绍,过去几年,人民币国际化已经取得了长足进展。根据环球银行金融电信协会(SWIFT)的统计,截至去年11月末,人民币作为全球支付货币的市场占有率是1.75%,而5年前这一占有率只有0.25%。根据国际货币基金组织公布的国际官方外汇储备币种构成调查,截至去年9月末,人民币占全球外汇储备的比例约为1.12%,有60多个国家和地区的中央银行或货币当局把人民币纳入其外汇储备篮子,而5年前几乎没有。与此同时,一些大宗商品交易也开始以人民币作为计价货币。截至2017年年末,已经有超过25万家企业和245家银行开展了跨境人民币业务,和中国发生跨境人民币收付的国家和地区已经达到了195个。 9 |   在谈及如何多措并举、进一步推动人民币国际化时,殷勇表示,首先是审时度势,及时破除影响人民币便利使用的一些制度障碍;其次是积极拓展,不断搭建人民币便利使用的基础设施;再次是注重引领,带动人民币更广泛的使用。 10 | -------------------------------------------------------------------------------- /context/0014: -------------------------------------------------------------------------------- 1 | 进入2018年,多地密集调整房地产调控相关政策,比如,兰州部分区域取消限购与限售并行,合肥商品住宅实行市场调节价,天津实施引进人才“租房落户”政策,南京三类人才购买首套不受户籍限制,青岛全面放开城镇落户限制,厦门明确实行差别化调控政策等。一时间,房地产市场再掀波澜,有市场观点认为,这释放了调控政策开始放松的信号。 2 |   从表面来看,上述城市调整房地产政策貌似”松绑“,但以此断定国家房地产调控政策松动,显然纯属误读。对这些城市出台的政策稍加梳理分析可以发现,房地产调控“房住不炒”基调并未发生改变,调控力度没有放松,其政策调整仅是差别化调控的表现之一。注重调控的精准性与实效性,是构建房地产长效机制的题中应有之义,这与中央调控方向是一致的。 3 |   所谓差别化调控,是指各地在坚持房地产调控总基调不变的基础之上,结合自身情况,因城施策、分类调控,制定符合本地实际的调控措施。其可以是一城一策,也可以一城多策。2017年以来,我国采取分类调控、因城施策的房地产调控政策,做好一线城市和热点二线城市的控房价、防风险,在调控方式上实施限购、限贷、限售、限价等措施,同时加大土地和租赁房的供应,加快推进三四线城市的房地产去库存。有统计显示,截至2017年12月,全国共有54个城市出台房地产调控政策,累计出台129条限购政策、169条限贷政策,其中15个城市实行“认房又认贷”,48个城市实行限售。 4 |   从政策实施的效果来看,房地产市场基本保持了平稳健康发展,房价过快上涨势头得到有效遏制。一线城市新建商品住宅和二手住宅价格同比涨幅连续14个月回落,热点城市新房价格环比保持平稳,全国商品房待售面积保持下降态势。 5 |   如果以为房地产调控取得明显成效,房地产市场相对平稳,就揣测房地产调控可能松绑,则有一厢情愿之嫌。最近一段时间,中央及监管层频频发声定调2018年房地产市场调控。十九大报告提出,坚持房子是用来住的、不是用来炒的定位;2017年12月召开的中央经济工作会议强调,完善促进房地产市场平稳健康发展的长效机制,保持房地产市场调控政策连续性和稳定性,分清中央和地方事权,实行差别化调控;同月召开的全国住房城乡建设工作会议提出,针对各类需求实行差别化调控政策,满足首套刚需、支持改善需求、遏制投机炒房。这无不传递出中央坚持房地产调控不动摇、力度不放松的决心和信号,同时强调实施差别化调控。 6 |   正是在这一背景下,一些城市进行有条件的适时适度微调。作为新年伊始首个调整限购政策的城市,兰州对高坪等偏远地区原限购调整为限售,明确3年内限制转让,同时该项措施涵盖主城区等限购区域。兰州市官方也回应称,此次政策调整不是放松调控,而是落实分类调控、因域施策,提高调控的精准性。事实也确实如此,由于目前兰州房地产市场过热的地方集中在市区, 一些郊区的库存仍较大。所以,政策调整正是落实差别化调控的具体举措,既支持了改善需求、遏制投机炒房,又实现了去库存。 7 |   南京对于三类高端人才在本市无住房、购买首套房的,可不受户籍限制。天津市实行引进人才“租房落户”政策,对本人或直系亲属名下无合法住房的,可在其长期租赁房屋所在社区落集体户口。青岛以合法稳定住所(含租赁)或合法稳定就业为基本落户条件,全面放开城镇落户限制。有人质疑这些政策是绕开限购,变相为房地产松绑,其实不然,因为安居落户本身就是人才引进政策的重要内容,且早已有之。而且,从这些政策的内容来看,大多围绕落户、首套房不受限等方面,而之前各项限购等调控措施仍在严格实施,这并没有违背房地产调控的总基调。这些地方政策的初衷是为了引进人才、发展住房租赁市场,是落实差别化调控、满足首套刚需的有益之举。 8 |   同时,一线热点城市房地产调控则进一步收紧。近期,深圳启动新建住宅限售。上海调控联席会议强调调控不动摇、不松懈,引导开发商合理定价。此外,福建、湖北、四川等地召开住房城乡工作会议强调,2018年房地产调控将完善促进房地产市场平稳健康发展的长效机制,保持调控政策的连续性和稳定性,并强调因城施策、精准调控。 9 |   可见,房地产调控政策连续稳定与差别化并不冲突,“房住不炒”的定位没有改变,局部的适时精准微调不代表政策放松。当政策效应逐步释放时,视情况适度进行微调和优化,是有必要且符合实际的。长远来看,要保持房地产市场平稳健康发展,根本上要完善房地产市场长效机制,加快建立多主体供给、多渠道保障、租购并举的住房制度,推进土地、住房、税收等方面改革,让全体人民住有所居。 10 | -------------------------------------------------------------------------------- /context/0015: -------------------------------------------------------------------------------- 1 | ●12月M2增速创历史新低 新增贷款5844亿 2 | 中国12月M2货币供应同比增8.2%,增速创历史新低,中国12月新增人民币贷款 5844亿元人民币,创2016年4月以来最低。 3 | ●发改委:统一规范特色小镇 各地不能乱戴帽 4 | 国家发展改革委有关负责人表示,特色小镇是加快建设新型城镇化的重要突破口,是基于当地资源优势形成特色产业,从而吸引人口、企业、资本聚集。要以人为中心,要有好的公共服务、基础设施、公共医疗等,是人居住和就业的地方,建设要遵循规律。 5 | ●外资加速流入逆周期因子反向调整 人民币汇率将更具弹性 6 | 资本市场都在关注,此次央妈真正的意图是什么?2018年的人民币何去何从?近日央行参事盛松成称,人民币汇率主要受金融市场利率影响,目前人民币汇率不存在贬值压力,会在合理均衡水平上基本稳定,“未来一段时间随着短期因素消退,人民币汇率会回调,预计在6.6附近波动。” 多位市场人士都认为,2018年人民币弹性增大,将呈现宽幅震荡。 7 | 【金融资本】 8 | ●证监会核发3家企业IPO批文 9 | 1月12日,证监会按法定程序核准了以下企业的首发申请,上交所主板:北京淳中科技股份有限公司,深交所中小板:华西证券股份有限公司,深交所创业板:深圳明阳电路科技股份有限公司。上述企业及其承销商将分别与沪深交易所协商确定发行日程,并陆续刊登招股文件。上述企业筹资总额不超过62亿元。 10 | ●交易所发文:这11种减持被规范 11 | 12日,沪深两大交易所分别发布减持新股实施细则的答投资者问,对一系列减持中遇到的问题进行了明确,其中有11种情况全部或部分被明确适用减持新规,另有几种情况明确不适用减持新规。 12 | ●银监会:进一步深化整治银行业市场乱象 13 | 银监会发布通知,各银行业金融机构和各级监管机构要坚持稳中求进,在守住不发生系统性金融风险的底线上求稳,在处置违法违规问题、重大案件和高风险事件上求进,坚决整治各类扰乱银行业市场秩序的乱象。要循序渐进,密切关注宏观形势和市场变化,把握好力度和节奏,制定阶段性目标,防止出现政策叠加和力度叠加,防范“处置风险的风险”。要新老划断,对于存量业务,区分问题性质、产生原因和造成后果等情况,给予一定的消化期和过渡期,差别化处置;对于整治银行业市场乱象工作开展以后(2017年5月1日后)的新增业务,严格按照法律法规进行规范,依法查处。要分类施策,坚持自查自纠从宽、监管发现从严,对主动发现、主动处置、主动作为的提高监管容忍度;对监管发现、主观恶意、性质恶劣、情节严重的依法从严处罚,特别是对重大案件和风险事件,依法予以顶格处罚。 14 | 15 | -------------------------------------------------------------------------------- /context/0016: -------------------------------------------------------------------------------- 1 | 这是一个很悲伤的故事 2 | 有一天,我快睡着了,这个时候想起来没吃饭。于是我就自己去吃饭,as大V暗室逢灯。 3 | 就这么发生了北京 4 | -------------------------------------------------------------------------------- /my_log.log: -------------------------------------------------------------------------------- 1 | 2018-01-17 10:20:13,313: DEBUG :Building prefix dict from the default dictionary ... 2 | 2018-01-17 10:20:13,315: DEBUG :Loading model from cache /tmp/jieba.cache 3 | 2018-01-17 10:20:13,523: DEBUG :Loading model cost 0.209 seconds. 4 | 2018-01-17 10:20:13,523: DEBUG :Prefix dict has been built succesfully. 5 | 2018-01-17 10:21:49,646: DEBUG :Building prefix dict from the default dictionary ... 6 | 2018-01-17 10:21:49,647: DEBUG :Loading model from cache /tmp/jieba.cache 7 | 2018-01-17 10:21:49,854: DEBUG :Loading model cost 0.208 seconds. 8 | 2018-01-17 10:21:49,854: DEBUG :Prefix dict has been built succesfully. 9 | 2018-01-17 10:27:58,017: DEBUG :Building prefix dict from the default dictionary ... 10 | 2018-01-17 10:27:58,018: DEBUG :Loading model from cache /tmp/jieba.cache 11 | 2018-01-17 10:27:58,355: DEBUG :Loading model cost 0.337 seconds. 12 | 2018-01-17 10:27:58,355: DEBUG :Prefix dict has been built succesfully. 13 | 2018-01-17 10:37:18,721: DEBUG :Building prefix dict from the default dictionary ... 14 | 2018-01-17 10:37:18,722: DEBUG :Loading model from cache /tmp/jieba.cache 15 | 2018-01-17 10:37:19,051: DEBUG :Loading model cost 0.330 seconds. 16 | 2018-01-17 10:37:19,051: DEBUG :Prefix dict has been built succesfully. 17 | 2018-01-17 10:51:48,036: DEBUG :Building prefix dict from the default dictionary ... 18 | 2018-01-17 10:51:48,038: DEBUG :Loading model from cache /tmp/jieba.cache 19 | 2018-01-17 10:51:48,247: DEBUG :Loading model cost 0.210 seconds. 20 | 2018-01-17 10:51:48,247: DEBUG :Prefix dict has been built succesfully. 21 | 2018-01-17 10:54:01,069: DEBUG :Building prefix dict from the default dictionary ... 22 | 2018-01-17 10:54:01,070: DEBUG :Loading model from cache /tmp/jieba.cache 23 | 2018-01-17 10:54:01,407: DEBUG :Loading model cost 0.338 seconds. 24 | 2018-01-17 10:54:01,407: DEBUG :Prefix dict has been built succesfully. 25 | 2018-01-17 10:58:41,303: DEBUG :Building prefix dict from the default dictionary ... 26 | 2018-01-17 10:58:41,304: DEBUG :Loading model from cache /tmp/jieba.cache 27 | 2018-01-17 10:58:41,512: DEBUG :Loading model cost 0.208 seconds. 28 | 2018-01-17 10:58:41,512: DEBUG :Prefix dict has been built succesfully. 29 | 2018-01-17 11:00:08,526: DEBUG :Building prefix dict from the default dictionary ... 30 | 2018-01-17 11:00:08,527: DEBUG :Loading model from cache /tmp/jieba.cache 31 | 2018-01-17 11:00:08,865: DEBUG :Loading model cost 0.339 seconds. 32 | 2018-01-17 11:00:08,865: DEBUG :Prefix dict has been built succesfully. 33 | 2018-01-17 11:01:59,349: DEBUG :Building prefix dict from the default dictionary ... 34 | 2018-01-17 11:01:59,350: DEBUG :Loading model from cache /tmp/jieba.cache 35 | 2018-01-17 11:01:59,680: DEBUG :Loading model cost 0.331 seconds. 36 | 2018-01-17 11:01:59,680: DEBUG :Prefix dict has been built succesfully. 37 | 2018-01-17 11:39:46,968: DEBUG :Building prefix dict from the default dictionary ... 38 | 2018-01-17 11:39:46,969: DEBUG :Loading model from cache /tmp/jieba.cache 39 | 2018-01-17 11:39:47,310: DEBUG :Loading model cost 0.342 seconds. 40 | 2018-01-17 11:39:47,310: DEBUG :Prefix dict has been built succesfully. 41 | 2018-01-17 11:49:58,034: DEBUG :Building prefix dict from the default dictionary ... 42 | 2018-01-17 11:49:58,036: DEBUG :Loading model from cache /tmp/jieba.cache 43 | 2018-01-17 11:49:58,243: DEBUG :Loading model cost 0.208 seconds. 44 | 2018-01-17 11:49:58,243: DEBUG :Prefix dict has been built succesfully. 45 | 2018-01-17 11:54:59,440: DEBUG :Building prefix dict from the default dictionary ... 46 | 2018-01-17 11:54:59,442: DEBUG :Loading model from cache /tmp/jieba.cache 47 | 2018-01-17 11:54:59,651: DEBUG :Loading model cost 0.211 seconds. 48 | 2018-01-17 11:54:59,652: DEBUG :Prefix dict has been built succesfully. 49 | 2018-01-17 11:55:56,549: DEBUG :Building prefix dict from the default dictionary ... 50 | 2018-01-17 11:55:56,550: DEBUG :Loading model from cache /tmp/jieba.cache 51 | 2018-01-17 11:55:56,758: DEBUG :Loading model cost 0.209 seconds. 52 | 2018-01-17 11:55:56,759: DEBUG :Prefix dict has been built succesfully. 53 | 2018-01-17 11:57:07,238: DEBUG :Building prefix dict from the default dictionary ... 54 | 2018-01-17 11:57:07,239: DEBUG :Loading model from cache /tmp/jieba.cache 55 | 2018-01-17 11:57:07,578: DEBUG :Loading model cost 0.339 seconds. 56 | 2018-01-17 11:57:07,578: DEBUG :Prefix dict has been built succesfully. 57 | 2018-01-17 12:01:10,249: DEBUG :Building prefix dict from the default dictionary ... 58 | 2018-01-17 12:01:10,250: DEBUG :Loading model from cache /tmp/jieba.cache 59 | 2018-01-17 12:01:10,458: DEBUG :Loading model cost 0.209 seconds. 60 | 2018-01-17 12:01:10,459: DEBUG :Prefix dict has been built succesfully. 61 | 2018-01-17 12:46:46,487: DEBUG :Building prefix dict from the default dictionary ... 62 | 2018-01-17 12:46:46,488: DEBUG :Loading model from cache /tmp/jieba.cache 63 | 2018-01-17 12:46:46,824: DEBUG :Loading model cost 0.336 seconds. 64 | 2018-01-17 12:46:46,824: DEBUG :Prefix dict has been built succesfully. 65 | 2018-01-17 12:48:46,435: DEBUG :Building prefix dict from the default dictionary ... 66 | 2018-01-17 12:48:46,436: DEBUG :Loading model from cache /tmp/jieba.cache 67 | 2018-01-17 12:48:46,769: DEBUG :Loading model cost 0.334 seconds. 68 | 2018-01-17 12:48:46,769: DEBUG :Prefix dict has been built succesfully. 69 | 2018-01-17 12:53:40,065: DEBUG :Building prefix dict from the default dictionary ... 70 | 2018-01-17 12:53:40,066: DEBUG :Loading model from cache /tmp/jieba.cache 71 | 2018-01-17 12:53:40,275: DEBUG :Loading model cost 0.210 seconds. 72 | 2018-01-17 12:53:40,275: DEBUG :Prefix dict has been built succesfully. 73 | 2018-01-17 12:54:32,841: DEBUG :Building prefix dict from the default dictionary ... 74 | 2018-01-17 12:54:32,842: DEBUG :Loading model from cache /tmp/jieba.cache 75 | 2018-01-17 12:54:33,050: DEBUG :Loading model cost 0.209 seconds. 76 | 2018-01-17 12:54:33,051: DEBUG :Prefix dict has been built succesfully. 77 | 2018-01-17 12:55:26,224: DEBUG :Building prefix dict from the default dictionary ... 78 | 2018-01-17 12:55:26,226: DEBUG :Loading model from cache /tmp/jieba.cache 79 | 2018-01-17 12:55:26,433: DEBUG :Loading model cost 0.209 seconds. 80 | 2018-01-17 12:55:26,434: DEBUG :Prefix dict has been built succesfully. 81 | 2018-01-17 12:58:33,237: DEBUG :Building prefix dict from the default dictionary ... 82 | 2018-01-17 12:58:33,238: DEBUG :Loading model from cache /tmp/jieba.cache 83 | 2018-01-17 12:58:33,448: DEBUG :Loading model cost 0.211 seconds. 84 | 2018-01-17 12:58:33,448: DEBUG :Prefix dict has been built succesfully. 85 | 2018-01-17 13:09:27,175: DEBUG :Building prefix dict from the default dictionary ... 86 | 2018-01-17 13:09:27,176: DEBUG :Loading model from cache /tmp/jieba.cache 87 | 2018-01-17 13:09:27,384: DEBUG :Loading model cost 0.208 seconds. 88 | 2018-01-17 13:09:27,384: DEBUG :Prefix dict has been built succesfully. 89 | 2018-01-17 13:11:59,043: DEBUG :Building prefix dict from the default dictionary ... 90 | 2018-01-17 13:11:59,044: DEBUG :Loading model from cache /tmp/jieba.cache 91 | 2018-01-17 13:11:59,253: DEBUG :Loading model cost 0.210 seconds. 92 | 2018-01-17 13:11:59,254: DEBUG :Prefix dict has been built succesfully. 93 | 2018-01-17 13:12:52,690: DEBUG :Building prefix dict from the default dictionary ... 94 | 2018-01-17 13:12:52,691: DEBUG :Loading model from cache /tmp/jieba.cache 95 | 2018-01-17 13:12:52,900: DEBUG :Loading model cost 0.210 seconds. 96 | 2018-01-17 13:12:52,900: DEBUG :Prefix dict has been built succesfully. 97 | 2018-01-17 13:14:22,066: DEBUG :Building prefix dict from the default dictionary ... 98 | 2018-01-17 13:14:22,067: DEBUG :Loading model from cache /tmp/jieba.cache 99 | 2018-01-17 13:14:22,407: DEBUG :Loading model cost 0.341 seconds. 100 | 2018-01-17 13:14:22,407: DEBUG :Prefix dict has been built succesfully. 101 | 2018-01-17 13:15:36,136: DEBUG :Building prefix dict from the default dictionary ... 102 | 2018-01-17 13:15:36,137: DEBUG :Loading model from cache /tmp/jieba.cache 103 | 2018-01-17 13:15:36,493: DEBUG :Loading model cost 0.357 seconds. 104 | 2018-01-17 13:15:36,493: DEBUG :Prefix dict has been built succesfully. 105 | 2018-01-18 05:21:49,901: DEBUG :Building prefix dict from the default dictionary ... 106 | 2018-01-18 05:21:49,903: DEBUG :Loading model from cache /tmp/jieba.cache 107 | 2018-01-18 05:21:50,112: DEBUG :Loading model cost 0.210 seconds. 108 | 2018-01-18 05:21:50,112: DEBUG :Prefix dict has been built succesfully. 109 | 2018-01-18 05:47:12,256: DEBUG :Building prefix dict from the default dictionary ... 110 | 2018-01-18 05:47:12,257: DEBUG :Loading model from cache /tmp/jieba.cache 111 | 2018-01-18 05:47:12,465: DEBUG :Loading model cost 0.209 seconds. 112 | 2018-01-18 05:47:12,465: DEBUG :Prefix dict has been built succesfully. 113 | 2018-01-18 05:55:27,656: DEBUG :Building prefix dict from the default dictionary ... 114 | 2018-01-18 05:55:27,657: DEBUG :Loading model from cache /tmp/jieba.cache 115 | 2018-01-18 05:55:27,997: DEBUG :Loading model cost 0.341 seconds. 116 | 2018-01-18 05:55:27,997: DEBUG :Prefix dict has been built succesfully. 117 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from distutils.core import setup 3 | LONGDOC = """ 4 | Please go to https://github.com/someus/TextRank4ZH for more info. 5 | """ 6 | 7 | setup( 8 | name='textrank4zh', 9 | version='0.3', 10 | description='Extract keywords and abstract Chinese article', 11 | long_description=LONGDOC, 12 | author='Letian Sun', 13 | author_email='sunlt1699@gmail.com', 14 | url='https://github.com/someus/TextRank4ZH', 15 | license="MIT", 16 | classifiers=[ 17 | 'Intended Audience :: Developers', 18 | 'License :: OSI Approved :: MIT License', 19 | 'Operating System :: OS Independent', 20 | 'Natural Language :: Chinese (Simplified)', 21 | 'Natural Language :: Chinese (Traditional)', 22 | 'Programming Language :: Python :: 2', 23 | 'Programming Language :: Python :: 2.7', 24 | 'Programming Language :: Python :: 3', 25 | 'Programming Language :: Python :: 3.4', 26 | 'Topic :: Text Processing', 27 | 'Topic :: Text Processing :: Linguistic', 28 | ], 29 | keywords='NLP,Chinese,Keywords extraction, Abstract extraction', 30 | install_requires=['jieba >= 0.35', 'numpy >= 1.7.1', 'networkx >= 1.9.1'], 31 | packages=['textrank4zh'], 32 | package_dir={'textrank4zh':'textrank4zh'}, 33 | package_data={'textrank4zh':['*.txt',]}, 34 | ) -------------------------------------------------------------------------------- /textrank4zh/Segmentation.py: -------------------------------------------------------------------------------- 1 | #-*- encoding:utf-8 -*- 2 | """ 3 | @author: letian 4 | @homepage: http://www.letiantian.me 5 | @github: https://github.com/someus/ 6 | """ 7 | from __future__ import (absolute_import, division, print_function, 8 | unicode_literals) 9 | 10 | import jieba.posseg as pseg 11 | import codecs 12 | import os,re 13 | 14 | from . import util 15 | 16 | def get_default_stop_words_file(): 17 | d = os.path.dirname(os.path.realpath(__file__)) 18 | return os.path.join(d, 'stopwords.txt') 19 | 20 | class WordSegmentation(object): 21 | """ 分词 """ 22 | 23 | def __init__(self, stop_words_file = None, allow_speech_tags = util.allow_speech_tags): 24 | """ 25 | Keyword arguments: 26 | stop_words_file -- 保存停止词的文件路径,utf8编码,每行一个停止词。若不是str类型,则使用默认的停止词 27 | allow_speech_tags -- 词性列表,用于过滤 28 | """ 29 | 30 | allow_speech_tags = [util.as_text(item) for item in allow_speech_tags] 31 | 32 | self.default_speech_tag_filter = allow_speech_tags 33 | self.stop_words = set() 34 | self.stop_words_file = get_default_stop_words_file() 35 | if type(stop_words_file) is str: 36 | self.stop_words_file = stop_words_file 37 | for word in codecs.open(self.stop_words_file, 'r', 'utf-8', 'ignore'): 38 | self.stop_words.add(word.strip()) 39 | 40 | def segment(self, text, lower = True, use_stop_words = True, use_speech_tags_filter = False): 41 | """对一段文本进行分词,返回list类型的分词结果 42 | 43 | Keyword arguments: 44 | lower -- 是否将单词小写(针对英文) 45 | use_stop_words -- 若为True,则利用停止词集合来过滤(去掉停止词) 46 | use_speech_tags_filter -- 是否基于词性进行过滤。若为True,则使用self.default_speech_tag_filter过滤。否则,不过滤。 47 | """ 48 | text = util.as_text(text) 49 | jieba_result = pseg.cut(text) 50 | 51 | if use_speech_tags_filter == True: 52 | jieba_result = [w for w in jieba_result if w.flag in self.default_speech_tag_filter] 53 | else: 54 | jieba_result = [w for w in jieba_result] 55 | 56 | # 去除特殊符号 57 | word_list = [w.word.strip() for w in jieba_result if w.flag!='x'] 58 | word_list = [word for word in word_list if len(word)>0] 59 | 60 | if lower: 61 | word_list = [word.lower() for word in word_list] 62 | 63 | if use_stop_words: 64 | word_list = [word.strip() for word in word_list if word.strip() not in self.stop_words] 65 | 66 | return word_list 67 | 68 | def segment_sentences(self, sentences, lower=True, use_stop_words=True, use_speech_tags_filter=False): 69 | """将列表sequences中的每个元素/句子转换为由单词构成的列表。 70 | 71 | sequences -- 列表,每个元素是一个句子(字符串类型) 72 | """ 73 | 74 | res = [] 75 | for sentence in sentences: 76 | res.append(self.segment(text=sentence, 77 | lower=lower, 78 | use_stop_words=use_stop_words, 79 | use_speech_tags_filter=use_speech_tags_filter)) 80 | return res 81 | 82 | class SentenceSegmentation(object): 83 | """ 分句 """ 84 | 85 | def __init__(self, delimiters=util.sentence_delimiters): 86 | """ 87 | Keyword arguments: 88 | delimiters -- 可迭代对象,用来拆分句子 89 | """ 90 | self.delimiters = set([util.as_text(item) for item in delimiters]) 91 | 92 | def segment(self, text): 93 | res = re.sub(".”","”",util.as_text(text)) 94 | res = [re.sub("\n","\nou",res)] 95 | 96 | util.debug(res) 97 | util.debug(self.delimiters) 98 | 99 | for sep in self.delimiters: 100 | text, res = res, [] 101 | for seq in text: 102 | res += seq.split(sep) 103 | res = [s.strip() for s in res if len(s.strip()) > 0] 104 | return res 105 | 106 | class Segmentation(object): 107 | 108 | def __init__(self, stop_words_file = None, 109 | allow_speech_tags = util.allow_speech_tags, 110 | delimiters = util.sentence_delimiters): 111 | """ 112 | Keyword arguments: 113 | stop_words_file -- 停止词文件 114 | delimiters -- 用来拆分句子的符号集合 115 | """ 116 | self.ws = WordSegmentation(stop_words_file=stop_words_file, allow_speech_tags=allow_speech_tags) 117 | self.ss = SentenceSegmentation(delimiters=delimiters) 118 | 119 | def segment(self, text, lower = False): 120 | text = util.as_text(text) 121 | sentences = self.ss.segment(text) 122 | words_no_filter = self.ws.segment_sentences(sentences=sentences, 123 | lower = lower, 124 | use_stop_words = False, 125 | use_speech_tags_filter = False) 126 | words_no_stop_words = self.ws.segment_sentences(sentences=sentences, 127 | lower = lower, 128 | use_stop_words = True, 129 | use_speech_tags_filter = False) 130 | 131 | words_all_filters = self.ws.segment_sentences(sentences=sentences, 132 | lower = lower, 133 | use_stop_words = True, 134 | use_speech_tags_filter = True) 135 | 136 | return util.AttrDict( 137 | sentences = sentences, 138 | words_no_filter = words_no_filter, 139 | words_no_stop_words = words_no_stop_words, 140 | words_all_filters = words_all_filters 141 | ) 142 | 143 | 144 | 145 | if __name__ == '__main__': 146 | pass 147 | -------------------------------------------------------------------------------- /textrank4zh/Segmentation.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ouprince/text-rank/eb70d43c316d5996ada2b968b141a8355c077fc9/textrank4zh/Segmentation.pyc -------------------------------------------------------------------------------- /textrank4zh/TextRank4Keyword.py: -------------------------------------------------------------------------------- 1 | #-*- encoding:utf-8 -*- 2 | """ 3 | @author: oyp 4 | @github: https://github.com/ouprince 5 | """ 6 | from __future__ import (absolute_import, division, print_function, 7 | unicode_literals) 8 | 9 | import networkx as nx 10 | import numpy as np 11 | 12 | from . import util 13 | from .Segmentation import Segmentation 14 | 15 | class TextRank4Keyword(object): 16 | 17 | def __init__(self, stop_words_file = None, 18 | allow_speech_tags = util.allow_speech_tags, 19 | delimiters = util.sentence_delimiters): 20 | """ 21 | Keyword arguments: 22 | stop_words_file -- str,指定停止词文件路径(一行一个停止词),若为其他类型,则使用默认停止词文件 23 | delimiters -- 默认值是`?!;?!。;…\n`,用来将文本拆分为句子。 24 | 25 | Object Var: 26 | self.words_no_filter -- 对sentences中每个句子分词而得到的两级列表。 27 | self.words_no_stop_words -- 去掉words_no_filter中的停止词而得到的两级列表。 28 | self.words_all_filters -- 保留words_no_stop_words中指定词性的单词而得到的两级列表。 29 | """ 30 | self.text = '' 31 | self.keywords = None 32 | 33 | self.seg = Segmentation(stop_words_file=stop_words_file, 34 | allow_speech_tags=allow_speech_tags, 35 | delimiters=delimiters) 36 | 37 | self.sentences = None 38 | self.words_no_filter = None # 2维列表 39 | self.words_no_stop_words = None 40 | self.words_all_filters = None 41 | 42 | def analyze(self, text, 43 | window = 2, 44 | lower = False, 45 | vertex_source = 'all_filters', 46 | #edge_source = 'no_stop_words', 47 | pagerank_config = {'alpha': 0.85,}): 48 | """分析文本 49 | 50 | Keyword arguments: 51 | text -- 文本内容,字符串。 52 | window -- 窗口大小,int,用来构造单词之间的边。默认值为2。 53 | lower -- 是否将文本转换为小写。默认为False。 54 | vertex_source -- 选择使用words_no_filter, words_no_stop_words, words_all_filters中的哪一个来构造pagerank对应的图中的节点。 55 | 默认值为`'all_filters'`,可选值为`'no_filter', 'no_stop_words', 'all_filters'`。关键词也来自`vertex_source`。 56 | edge_source -- 选择使用words_no_filter, words_no_stop_words, words_all_filters中的哪一个来构造pagerank对应的图中的节点之间的边。 57 | 默认值为`'no_stop_words'`,可选值为`'no_filter', 'no_stop_words', 'all_filters'`。边的构造要结合`window`参数。 58 | """ 59 | 60 | # self.text = util.as_text(text) 61 | self.text = text 62 | self.word_index = {} 63 | self.index_word = {} 64 | self.keywords = [] 65 | self.graph = None 66 | 67 | result = self.seg.segment(text=text, lower=lower) 68 | self.sentences = result.sentences 69 | self.words_no_filter = result.words_no_filter 70 | self.words_no_stop_words = result.words_no_stop_words 71 | self.words_all_filters = result.words_all_filters 72 | for i in self.words_all_filters: 73 | while "ou" in i: 74 | i.remove("ou") 75 | 76 | util.debug(20*'*') 77 | util.debug('self.sentences in TextRank4Keyword:\n', ' || '.join(self.sentences)) 78 | util.debug('self.words_no_filter in TextRank4Keyword:\n', self.words_no_filter) 79 | util.debug('self.words_no_stop_words in TextRank4Keyword:\n', self.words_no_stop_words) 80 | util.debug('self.words_all_filters in TextRank4Keyword:\n', self.words_all_filters) 81 | 82 | 83 | options = ['no_filter', 'no_stop_words', 'all_filters'] 84 | 85 | if vertex_source in options: 86 | _vertex_source = result['words_'+vertex_source] 87 | else: 88 | _vertex_source = result['words_all_filters'] 89 | ''' 90 | if edge_source in options: 91 | _edge_source = result['words_'+edge_source] 92 | else: 93 | _edge_source = result['words_no_stop_words'] 94 | ''' 95 | self.keywords = util.sort_words(_vertex_source, window = window, pagerank_config = pagerank_config) 96 | 97 | def get_keywords(self, num = 6, word_min_len = 1): 98 | """获取最重要的num个长度大于等于word_min_len的关键词。 99 | 100 | Return: 101 | 关键词列表。 102 | """ 103 | result = [] 104 | count = 0 105 | for item in self.keywords: 106 | if count >= num: 107 | break 108 | if len(item.word) >= word_min_len: 109 | result.append(item) 110 | count += 1 111 | return result 112 | 113 | def get_keyphrases(self, keywords_num = 12, min_occur_num = 2): 114 | """获取关键短语。 115 | 获取 keywords_num 个关键词构造的可能出现的短语,要求这个短语在原文本中至少出现的次数为min_occur_num。 116 | 117 | Return: 118 | 关键短语的列表。 119 | """ 120 | keywords_set = set([ item.word for item in self.get_keywords(num=keywords_num, word_min_len = 1)]) 121 | keyphrases = set() 122 | for sentence in self.words_no_filter: 123 | one = [] 124 | for word in sentence: 125 | if word in keywords_set: 126 | one.append(word) 127 | else: 128 | if len(one) > 1: 129 | keyphrases.add(''.join(one)) 130 | if len(one) == 0: 131 | continue 132 | else: 133 | one = [] 134 | # 兜底 135 | if len(one) > 1: 136 | keyphrases.add(''.join(one)) 137 | 138 | return [phrase for phrase in keyphrases 139 | if self.text.count(phrase) >= min_occur_num] 140 | 141 | if __name__ == '__main__': 142 | pass 143 | -------------------------------------------------------------------------------- /textrank4zh/TextRank4Keyword.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ouprince/text-rank/eb70d43c316d5996ada2b968b141a8355c077fc9/textrank4zh/TextRank4Keyword.pyc -------------------------------------------------------------------------------- /textrank4zh/TextRank4Sentence.py: -------------------------------------------------------------------------------- 1 | #-*- encoding:utf-8 -*- 2 | """ 3 | @author: oyp 4 | @github: https://github.com/ouprince 5 | """ 6 | from __future__ import (absolute_import, division, print_function, 7 | unicode_literals) 8 | 9 | import networkx as nx 10 | import numpy as np 11 | 12 | from . import util 13 | from .Segmentation import Segmentation 14 | 15 | class TextRank4Sentence(object): 16 | 17 | def __init__(self, stop_words_file = None, text_cut = True,decay_rate = 1.0, 18 | allow_speech_tags = util.allow_speech_tags, 19 | delimiters = util.sentence_delimiters): 20 | """ 21 | Keyword arguments: 22 | stop_words_file -- str,停止词文件路径,若不是str则是使用默认停止词文件 23 | delimiters -- 默认值是`?!;?!。;…\n`,用来将文本拆分为句子。 24 | 25 | Object Var: 26 | self.sentences -- 由句子组成的列表。 27 | self.words_no_filter -- 对sentences中每个句子分词而得到的两级列表。 28 | self.words_no_stop_words -- 去掉words_no_filter中的停止词而得到的两级列表。 29 | self.words_all_filters -- 保留words_no_stop_words中指定词性的单词而得到的两级列表。 30 | """ 31 | self.seg = Segmentation(stop_words_file=stop_words_file, 32 | allow_speech_tags=allow_speech_tags, 33 | delimiters=delimiters) 34 | 35 | self.text_cut = text_cut 36 | self.decay_rate = decay_rate 37 | self.sentences = None 38 | self.words_no_filter = None # 2维列表 39 | self.words_no_stop_words = None 40 | self.words_all_filters = None 41 | 42 | self.key_sentences = None 43 | 44 | def analyze(self, text, lower = False, 45 | source = 'no_stop_words', 46 | sim_func = util.get_similarity, 47 | pagerank_config = {'alpha': 0.85,}): 48 | """ 49 | Keyword arguments: 50 | text -- 文本内容,字符串。 51 | lower -- 是否将文本转换为小写。默认为False。 52 | source -- 选择使用words_no_filter, words_no_stop_words, words_all_filters中的哪一个来生成句子之间的相似度。 53 | 默认值为`'all_filters'`,可选值为`'no_filter', 'no_stop_words', 'all_filters'`。 54 | sim_func -- 指定计算句子相似度的函数。 55 | """ 56 | 57 | self.key_sentences = [] 58 | 59 | result = self.seg.segment(text=text, lower=lower) 60 | self.sentences = result.sentences 61 | if self.text_cut: 62 | if len(self.sentences) > 50: 63 | mm = len(self.sentences) - 25 64 | self.sentences = result.sentences[0:25] + result.sentences[mm:] 65 | 66 | self.words_no_filter = result.words_no_filter 67 | self.words_no_stop_words = result.words_no_stop_words 68 | self.words_all_filters = result.words_all_filters 69 | 70 | options = ['no_filter', 'no_stop_words', 'all_filters'] 71 | if source in options: 72 | _source = result['words_'+source] 73 | else: 74 | _source = result['words_no_stop_words'] 75 | 76 | self.key_sentences = util.sort_sentences(sentences = self.sentences, 77 | words = _source, 78 | sim_func = sim_func, 79 | decay_rate = self.decay_rate, 80 | pagerank_config = pagerank_config) 81 | 82 | 83 | def get_key_sentences(self, num = 6, sentence_min_len = 6): 84 | """获取最重要的num个长度大于等于sentence_min_len的句子用来生成摘要。 85 | 86 | Return: 87 | 多个句子组成的列表。 88 | """ 89 | result = [] 90 | count = 0 91 | for item in self.key_sentences: 92 | if count >= num: 93 | break 94 | if len(item['sentence']) >= sentence_min_len: 95 | result.append(item) 96 | count += 1 97 | return result 98 | 99 | def get_sentences_length(self): 100 | return len(self.sentences) 101 | 102 | if __name__ == '__main__': 103 | pass 104 | -------------------------------------------------------------------------------- /textrank4zh/TextRank4Sentence.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ouprince/text-rank/eb70d43c316d5996ada2b968b141a8355c077fc9/textrank4zh/TextRank4Sentence.pyc -------------------------------------------------------------------------------- /textrank4zh/__init__.py: -------------------------------------------------------------------------------- 1 | #-*- encoding:utf-8 -*- 2 | from __future__ import absolute_import 3 | from .TextRank4Keyword import TextRank4Keyword 4 | from .TextRank4Sentence import TextRank4Sentence 5 | from . import Segmentation 6 | from . import util 7 | 8 | version = '0.2' -------------------------------------------------------------------------------- /textrank4zh/__init__.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ouprince/text-rank/eb70d43c316d5996ada2b968b141a8355c077fc9/textrank4zh/__init__.pyc -------------------------------------------------------------------------------- /textrank4zh/compute_yingda.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | from __future__ import unicode_literals 3 | import gensim 4 | import logging 5 | import sys,os 6 | import numpy 7 | import jieba 8 | import jieba.posseg as pseg 9 | 10 | reload(sys) 11 | 12 | sys.setdefaultencoding("utf-8") 13 | #导入模型 14 | d = os.path.dirname(os.path.realpath(__file__)) 15 | 16 | model=gensim.models.Word2Vec.load(os.path.join(d,"word_model/Word60.model")) 17 | logging.basicConfig(format='%(asctime)s: %(levelname)s :%(message)s',filename='my_log.log',level=logging.INFO) 18 | 19 | 20 | #句式处理 21 | def trim_str(pi_str=""): 22 | ss="" 23 | #pi_str=pi_str.encode("utf-8") 24 | for word in pi_str: 25 | if word <> " ": 26 | ss=ss+word 27 | return ss 28 | 29 | #句子重点词汇处理解析 30 | def chuli(pi) : 31 | question_words=jieba.cut(pi,cut_all=False) #进行分词 32 | pi=" ".join(question_words).split() 33 | with open(os.path.join(d,"non_words.txt")) as readme: 34 | for line in readme: 35 | non_words=line.split() 36 | for non_word in non_words: 37 | for question_word in pi: 38 | try: 39 | '''排除无关词阈值''' 40 | if model.similarity(question_word,non_word)>=0.8: 41 | try: 42 | pi.remove(question_word) 43 | except AttributeError: 44 | pass 45 | except KeyError: 46 | try: 47 | tt=model[question_word] 48 | except KeyError: 49 | try : 50 | pi.remove(question_word) 51 | except AttributeError: 52 | pass 53 | else: 54 | pass 55 | else: 56 | pass 57 | return pi 58 | 59 | def get_word_similar(word1,word2): 60 | try: 61 | return max(model.similarity(word1,word2),0) 62 | except KeyError: 63 | return 0.0 64 | 65 | #计算两句话的相似性 单向 66 | def pipei_reverse(s1="",s2=""): 67 | s1 = chuli(s1) 68 | s2 = chuli(s2) 69 | results=[] 70 | kks=0 71 | if len(s1)==0: 72 | return 0 73 | for s in s1: 74 | result=0 75 | for d in s2: 76 | try: 77 | result=max(model.similarity(s,d),result) 78 | except KeyError: 79 | if d==s: 80 | result=1 81 | results.append(result) 82 | for kk in results: 83 | kks=kks+kk 84 | return kks/len(s1) 85 | 86 | #计算两句话的相似性 双向 基于单向 87 | def pipei(s1="",s2=""): 88 | return (pipei_reverse(s1,s2)+pipei_reverse(s2,s1))/2 89 | 90 | #定义增量函数 91 | def zengliang(ss=""): 92 | with open("kehu.txt","a") as object_file: 93 | try: 94 | object_file.write(ss.encode("utf-8")+"\n") 95 | except UnicodeDecodeError: 96 | pass 97 | 98 | #定义口语到标准的接口 99 | def verbal_to_standard(question_source="",threshold=0.67): 100 | question=trim_str(question_source) 101 | ranks=[] 102 | maybes=[] 103 | ranks_chushi=[] 104 | xulie=[] 105 | #先处理客户的记录 106 | zengliang_flag=True 107 | try: 108 | with open("kehu.txt") as readme: 109 | for line in readme: 110 | if line.strip().replace("\n","")==question_source.strip().replace("\n",""): 111 | zengliang_flag=False 112 | break 113 | except IOError: 114 | pass 115 | 116 | if zengliang_flag: 117 | zengliang(question_source) 118 | 119 | #开始实现应答 120 | with open("biaozhun.txt") as file_object: 121 | ii=0 122 | for line in file_object: 123 | '''句子匹配阈值''' 124 | if pipei(question,line)>=threshold: 125 | maybes.insert(ii,line) 126 | ranks.insert(ii,pipei(question,line)) 127 | ii+=1 128 | ranks_chushi=ranks[:] 129 | 130 | for i in range(0,len(ranks)): 131 | for j in range(i,len(ranks)): 132 | if ranks[i]ranks[i-1] and i<>0) or i==0): 141 | xulie.insert(mm,j) 142 | mm+=1 143 | 144 | if len(xulie)>0: 145 | str_last="您可能想问的是\n" 146 | for ou in range(0,len(xulie)): 147 | str_last=str_last+ str(ranks_chushi[xulie[ou]])+" :"+maybes[xulie[ou]]+"\n" 148 | else: 149 | str_last="对不起,我不知道您的意思" 150 | return str_last 151 | 152 | #根据标准找口头的接口 153 | def standard_to_verbal(standard="",threshold=0.67): 154 | standard=trim_str(standard) 155 | ranks=[] 156 | maybes=[] 157 | ranks_chushi=[] 158 | xulie=[] 159 | #开始实现应答 160 | with open("kehu.txt") as file_object: 161 | ii=0 162 | for line in file_object: 163 | '''句子匹配阈值''' 164 | if pipei(standard,line)>=threshold: 165 | maybes.insert(ii,line) 166 | ranks.insert(ii,pipei(standard,line)) 167 | ii+=1 168 | ranks_chushi=ranks[:] 169 | for i in range(0,len(ranks)): 170 | for j in range(i,len(ranks)): 171 | if ranks[i]ranks[i-1] and i<>0) or i==0): 180 | xulie.insert(mm,j) 181 | mm+=1 182 | 183 | if len(xulie)>0: 184 | str_last="客户问过的问题可能是:\n" 185 | for ou in range(0,len(xulie)): 186 | str_last=str_last+ str(ranks_chushi[xulie[ou]])+" :"+maybes[xulie[ou]]+"\n" 187 | else: 188 | str_last="未找到客户可能问过的问题" 189 | 190 | return str_last 191 | -------------------------------------------------------------------------------- /textrank4zh/compute_yingda.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ouprince/text-rank/eb70d43c316d5996ada2b968b141a8355c077fc9/textrank4zh/compute_yingda.pyc -------------------------------------------------------------------------------- /textrank4zh/non_words.txt: -------------------------------------------------------------------------------- 1 | 请问 嗯 谢谢 是 的 你们 我们 他们 好 请 好 很 非常 2 | 啊 额 嘞 ok 问题 好的 吧 早上 下午 对不起 没关系 3 | 你 想 你好 是的 ? , 4 | 我 他 吗 了 勒 ou 5 | -------------------------------------------------------------------------------- /textrank4zh/stopwords.txt: -------------------------------------------------------------------------------- 1 | ? 2 | 、 3 | 。 4 | “ 5 | ” 6 | 《 7 | 》 8 | ! 9 | , 10 | : 11 | ; 12 | ? 13 | 啊 14 | 阿 15 | 哎 16 | 哎呀 17 | 哎哟 18 | 唉 19 | 俺 20 | 俺们 21 | 按 22 | 按照 23 | 吧 24 | 吧哒 25 | 把 26 | 罢了 27 | 被 28 | 本 29 | 本着 30 | 比 31 | 比方 32 | 比如 33 | 鄙人 34 | 彼 35 | 彼此 36 | 边 37 | 别 38 | 别的 39 | 别说 40 | 并 41 | 并且 42 | 不比 43 | 不成 44 | 不单 45 | 不但 46 | 不独 47 | 不管 48 | 不光 49 | 不过 50 | 不仅 51 | 不拘 52 | 不论 53 | 不怕 54 | 不然 55 | 不如 56 | 不特 57 | 不惟 58 | 不问 59 | 不只 60 | 朝 61 | 朝着 62 | 趁 63 | 趁着 64 | 乘 65 | 冲 66 | 除 67 | 除此之外 68 | 除非 69 | 除了 70 | 此 71 | 此间 72 | 此外 73 | 从 74 | 从而 75 | 打 76 | 待 77 | 但 78 | 但是 79 | 当 80 | 当着 81 | 到 82 | 得 83 | 的 84 | 的话 85 | 等 86 | 等等 87 | 地 88 | 第 89 | 叮咚 90 | 对 91 | 对于 92 | 多 93 | 多少 94 | 而 95 | 而况 96 | 而且 97 | 而是 98 | 而外 99 | 而言 100 | 而已 101 | 尔后 102 | 反过来 103 | 反过来说 104 | 反之 105 | 非但 106 | 非徒 107 | 否则 108 | 嘎 109 | 嘎登 110 | 该 111 | 赶 112 | 个 113 | 各 114 | 各个 115 | 各位 116 | 各种 117 | 各自 118 | 给 119 | 根据 120 | 跟 121 | 故 122 | 故此 123 | 固然 124 | 关于 125 | 管 126 | 归 127 | 果然 128 | 果真 129 | 过 130 | 哈 131 | 哈哈 132 | 呵 133 | 和 134 | 何 135 | 何处 136 | 何况 137 | 何时 138 | 嘿 139 | 哼 140 | 哼唷 141 | 呼哧 142 | 乎 143 | 哗 144 | 还是 145 | 还有 146 | 换句话说 147 | 换言之 148 | 或 149 | 或是 150 | 或者 151 | 极了 152 | 及 153 | 及其 154 | 及至 155 | 即 156 | 即便 157 | 即或 158 | 即令 159 | 即若 160 | 即使 161 | 几 162 | 几时 163 | 己 164 | 既 165 | 既然 166 | 既是 167 | 继而 168 | 加之 169 | 假如 170 | 假若 171 | 假使 172 | 鉴于 173 | 将 174 | 较 175 | 较之 176 | 叫 177 | 接着 178 | 结果 179 | 借 180 | 紧接着 181 | 进而 182 | 尽 183 | 尽管 184 | 经 185 | 经过 186 | 就 187 | 就是 188 | 就是说 189 | 据 190 | 具体地说 191 | 具体说来 192 | 开始 193 | 开外 194 | 靠 195 | 咳 196 | 可 197 | 可见 198 | 可是 199 | 可以 200 | 况且 201 | 啦 202 | 来 203 | 来着 204 | 离 205 | 例如 206 | 哩 207 | 连 208 | 连同 209 | 两者 210 | 了 211 | 临 212 | 另 213 | 另外 214 | 另一方面 215 | 论 216 | 嘛 217 | 吗 218 | 慢说 219 | 漫说 220 | 冒 221 | 么 222 | 每 223 | 每当 224 | 们 225 | 莫若 226 | 某 227 | 某个 228 | 某些 229 | 拿 230 | 哪 231 | 哪边 232 | 哪儿 233 | 哪个 234 | 哪里 235 | 哪年 236 | 哪怕 237 | 哪天 238 | 哪些 239 | 哪样 240 | 那 241 | 那边 242 | 那儿 243 | 那个 244 | 那会儿 245 | 那里 246 | 那么 247 | 那么些 248 | 那么样 249 | 那时 250 | 那些 251 | 那样 252 | 乃 253 | 乃至 254 | 呢 255 | 能 256 | 你 257 | 你们 258 | 您 259 | 宁 260 | 宁可 261 | 宁肯 262 | 宁愿 263 | 哦 264 | 呕 265 | 啪达 266 | 旁人 267 | 呸 268 | 凭 269 | 凭借 270 | 其 271 | 其次 272 | 其二 273 | 其他 274 | 其它 275 | 其一 276 | 其余 277 | 其中 278 | 起 279 | 起见 280 | 起见 281 | 岂但 282 | 恰恰相反 283 | 前后 284 | 前者 285 | 且 286 | 然而 287 | 然后 288 | 然则 289 | 让 290 | 人家 291 | 任 292 | 任何 293 | 任凭 294 | 如 295 | 如此 296 | 如果 297 | 如何 298 | 如其 299 | 如若 300 | 如上所述 301 | 若 302 | 若非 303 | 若是 304 | 啥 305 | 上下 306 | 尚且 307 | 设若 308 | 设使 309 | 甚而 310 | 甚么 311 | 甚至 312 | 省得 313 | 时候 314 | 什么 315 | 什么样 316 | 使得 317 | 是 318 | 是的 319 | 首先 320 | 谁 321 | 谁知 322 | 顺 323 | 顺着 324 | 似的 325 | 虽 326 | 虽然 327 | 虽说 328 | 虽则 329 | 随 330 | 随着 331 | 所 332 | 所以 333 | 他 334 | 他们 335 | 他人 336 | 它 337 | 它们 338 | 她 339 | 她们 340 | 倘 341 | 倘或 342 | 倘然 343 | 倘若 344 | 倘使 345 | 腾 346 | 替 347 | 通过 348 | 同 349 | 同时 350 | 哇 351 | 万一 352 | 往 353 | 望 354 | 为 355 | 为何 356 | 为了 357 | 为什么 358 | 为着 359 | 喂 360 | 嗡嗡 361 | 我 362 | 我们 363 | 呜 364 | 呜呼 365 | 乌乎 366 | 无论 367 | 无宁 368 | 毋宁 369 | 嘻 370 | 吓 371 | 相对而言 372 | 像 373 | 向 374 | 向着 375 | 嘘 376 | 呀 377 | 焉 378 | 沿 379 | 沿着 380 | 要 381 | 要不 382 | 要不然 383 | 要不是 384 | 要么 385 | 要是 386 | 也 387 | 也罢 388 | 也好 389 | 一 390 | 一般 391 | 一旦 392 | 一方面 393 | 一来 394 | 一切 395 | 一样 396 | 一则 397 | 依 398 | 依照 399 | 矣 400 | 以 401 | 以便 402 | 以及 403 | 以免 404 | 以至 405 | 以至于 406 | 以致 407 | 抑或 408 | 因 409 | 因此 410 | 因而 411 | 因为 412 | 哟 413 | 用 414 | 由 415 | 由此可见 416 | 由于 417 | 有 418 | 有的 419 | 有关 420 | 有些 421 | 又 422 | 于 423 | 于是 424 | 于是乎 425 | 与 426 | 与此同时 427 | 与否 428 | 与其 429 | 越是 430 | 云云 431 | 哉 432 | 再说 433 | 再者 434 | 在 435 | 在下 436 | 咱 437 | 咱们 438 | 则 439 | 怎 440 | 怎么 441 | 怎么办 442 | 怎么样 443 | 怎样 444 | 咋 445 | 照 446 | 照着 447 | 者 448 | 这 449 | 这边 450 | 这儿 451 | 这个 452 | 这会儿 453 | 这就是说 454 | 这里 455 | 这么 456 | 这么点儿 457 | 这么些 458 | 这么样 459 | 这时 460 | 这些 461 | 这样 462 | 正如 463 | 吱 464 | 之 465 | 之类 466 | 之所以 467 | 之一 468 | 只是 469 | 只限 470 | 只要 471 | 只有 472 | 至 473 | 至于 474 | 诸位 475 | 着 476 | 着呢 477 | 自 478 | 自从 479 | 自个儿 480 | 自各儿 481 | 自己 482 | 自家 483 | 自身 484 | 综上所述 485 | 总的来看 486 | 总的来说 487 | 总的说来 488 | 总而言之 489 | 总之 490 | 纵 491 | 纵令 492 | 纵然 493 | 纵使 494 | 遵照 495 | 作为 496 | 兮 497 | 呃 498 | 呗 499 | 咚 500 | 咦 501 | 喏 502 | 啐 503 | 喔唷 504 | 嗬 505 | 嗯 506 | 嗳 507 | a 508 | able 509 | about 510 | above 511 | abroad 512 | according 513 | accordingly 514 | across 515 | actually 516 | adj 517 | after 518 | afterwards 519 | again 520 | against 521 | ago 522 | ahead 523 | ain't 524 | all 525 | allow 526 | allows 527 | almost 528 | alone 529 | along 530 | alongside 531 | already 532 | also 533 | although 534 | always 535 | am 536 | amid 537 | amidst 538 | among 539 | amongst 540 | an 541 | and 542 | another 543 | any 544 | anybody 545 | anyhow 546 | anyone 547 | anything 548 | anyway 549 | anyways 550 | anywhere 551 | apart 552 | appear 553 | appreciate 554 | appropriate 555 | are 556 | aren't 557 | around 558 | as 559 | a's 560 | aside 561 | ask 562 | asking 563 | associated 564 | at 565 | available 566 | away 567 | awfully 568 | b 569 | back 570 | backward 571 | backwards 572 | be 573 | became 574 | because 575 | become 576 | becomes 577 | becoming 578 | been 579 | before 580 | beforehand 581 | begin 582 | behind 583 | being 584 | believe 585 | below 586 | beside 587 | besides 588 | best 589 | better 590 | between 591 | beyond 592 | both 593 | brief 594 | but 595 | by 596 | c 597 | came 598 | can 599 | cannot 600 | cant 601 | can't 602 | caption 603 | cause 604 | causes 605 | certain 606 | certainly 607 | changes 608 | clearly 609 | c'mon 610 | co 611 | co. 612 | com 613 | come 614 | comes 615 | concerning 616 | consequently 617 | consider 618 | considering 619 | contain 620 | containing 621 | contains 622 | corresponding 623 | could 624 | couldn't 625 | course 626 | c's 627 | currently 628 | d 629 | dare 630 | daren't 631 | definitely 632 | described 633 | despite 634 | did 635 | didn't 636 | different 637 | directly 638 | do 639 | does 640 | doesn't 641 | doing 642 | done 643 | don't 644 | down 645 | downwards 646 | during 647 | e 648 | each 649 | edu 650 | eg 651 | eight 652 | eighty 653 | either 654 | else 655 | elsewhere 656 | end 657 | ending 658 | enough 659 | entirely 660 | especially 661 | et 662 | etc 663 | even 664 | ever 665 | evermore 666 | every 667 | everybody 668 | everyone 669 | everything 670 | everywhere 671 | ex 672 | exactly 673 | example 674 | except 675 | f 676 | fairly 677 | far 678 | farther 679 | few 680 | fewer 681 | fifth 682 | first 683 | five 684 | followed 685 | following 686 | follows 687 | for 688 | forever 689 | former 690 | formerly 691 | forth 692 | forward 693 | found 694 | four 695 | from 696 | further 697 | furthermore 698 | g 699 | get 700 | gets 701 | getting 702 | given 703 | gives 704 | go 705 | goes 706 | going 707 | gone 708 | got 709 | gotten 710 | greetings 711 | h 712 | had 713 | hadn't 714 | half 715 | happens 716 | hardly 717 | has 718 | hasn't 719 | have 720 | haven't 721 | having 722 | he 723 | he'd 724 | he'll 725 | hello 726 | help 727 | hence 728 | her 729 | here 730 | hereafter 731 | hereby 732 | herein 733 | here's 734 | hereupon 735 | hers 736 | herself 737 | he's 738 | hi 739 | him 740 | himself 741 | his 742 | hither 743 | hopefully 744 | how 745 | howbeit 746 | however 747 | hundred 748 | i 749 | i'd 750 | ie 751 | if 752 | ignored 753 | i'll 754 | i'm 755 | immediate 756 | in 757 | inasmuch 758 | inc 759 | inc. 760 | indeed 761 | indicate 762 | indicated 763 | indicates 764 | inner 765 | inside 766 | insofar 767 | instead 768 | into 769 | inward 770 | is 771 | isn't 772 | it 773 | it'd 774 | it'll 775 | its 776 | it's 777 | itself 778 | i've 779 | j 780 | just 781 | k 782 | keep 783 | keeps 784 | kept 785 | know 786 | known 787 | knows 788 | l 789 | last 790 | lately 791 | later 792 | latter 793 | latterly 794 | least 795 | less 796 | lest 797 | let 798 | let's 799 | like 800 | liked 801 | likely 802 | likewise 803 | little 804 | look 805 | looking 806 | looks 807 | low 808 | lower 809 | ltd 810 | m 811 | made 812 | mainly 813 | make 814 | makes 815 | many 816 | may 817 | maybe 818 | mayn't 819 | me 820 | mean 821 | meantime 822 | meanwhile 823 | merely 824 | might 825 | mightn't 826 | mine 827 | minus 828 | miss 829 | more 830 | moreover 831 | most 832 | mostly 833 | mr 834 | mrs 835 | much 836 | must 837 | mustn't 838 | my 839 | myself 840 | n 841 | name 842 | namely 843 | nd 844 | near 845 | nearly 846 | necessary 847 | need 848 | needn't 849 | needs 850 | neither 851 | never 852 | neverf 853 | neverless 854 | nevertheless 855 | new 856 | next 857 | nine 858 | ninety 859 | no 860 | nobody 861 | non 862 | none 863 | nonetheless 864 | noone 865 | no-one 866 | nor 867 | normally 868 | not 869 | nothing 870 | notwithstanding 871 | novel 872 | now 873 | nowhere 874 | o 875 | obviously 876 | of 877 | off 878 | often 879 | oh 880 | ok 881 | okay 882 | old 883 | on 884 | once 885 | one 886 | ones 887 | one's 888 | only 889 | onto 890 | opposite 891 | or 892 | other 893 | others 894 | otherwise 895 | ought 896 | oughtn't 897 | our 898 | ours 899 | ourselves 900 | out 901 | outside 902 | over 903 | overall 904 | own 905 | p 906 | particular 907 | particularly 908 | past 909 | per 910 | perhaps 911 | placed 912 | please 913 | plus 914 | possible 915 | presumably 916 | probably 917 | provided 918 | provides 919 | q 920 | que 921 | quite 922 | qv 923 | r 924 | rather 925 | rd 926 | re 927 | really 928 | reasonably 929 | recent 930 | recently 931 | regarding 932 | regardless 933 | regards 934 | relatively 935 | respectively 936 | right 937 | round 938 | s 939 | said 940 | same 941 | saw 942 | say 943 | saying 944 | says 945 | second 946 | secondly 947 | see 948 | seeing 949 | seem 950 | seemed 951 | seeming 952 | seems 953 | seen 954 | self 955 | selves 956 | sensible 957 | sent 958 | serious 959 | seriously 960 | seven 961 | several 962 | shall 963 | shan't 964 | she 965 | she'd 966 | she'll 967 | she's 968 | should 969 | shouldn't 970 | since 971 | six 972 | so 973 | some 974 | somebody 975 | someday 976 | somehow 977 | someone 978 | something 979 | sometime 980 | sometimes 981 | somewhat 982 | somewhere 983 | soon 984 | sorry 985 | specified 986 | specify 987 | specifying 988 | still 989 | sub 990 | such 991 | sup 992 | sure 993 | t 994 | take 995 | taken 996 | taking 997 | tell 998 | tends 999 | th 1000 | than 1001 | thank 1002 | thanks 1003 | thanx 1004 | that 1005 | that'll 1006 | thats 1007 | that's 1008 | that've 1009 | the 1010 | their 1011 | theirs 1012 | them 1013 | themselves 1014 | then 1015 | thence 1016 | there 1017 | thereafter 1018 | thereby 1019 | there'd 1020 | therefore 1021 | therein 1022 | there'll 1023 | there're 1024 | theres 1025 | there's 1026 | thereupon 1027 | there've 1028 | these 1029 | they 1030 | they'd 1031 | they'll 1032 | they're 1033 | they've 1034 | thing 1035 | things 1036 | think 1037 | third 1038 | thirty 1039 | this 1040 | thorough 1041 | thoroughly 1042 | those 1043 | though 1044 | three 1045 | through 1046 | throughout 1047 | thru 1048 | thus 1049 | till 1050 | to 1051 | together 1052 | too 1053 | took 1054 | toward 1055 | towards 1056 | tried 1057 | tries 1058 | truly 1059 | try 1060 | trying 1061 | t's 1062 | twice 1063 | two 1064 | u 1065 | un 1066 | under 1067 | underneath 1068 | undoing 1069 | unfortunately 1070 | unless 1071 | unlike 1072 | unlikely 1073 | until 1074 | unto 1075 | up 1076 | upon 1077 | upwards 1078 | us 1079 | use 1080 | used 1081 | useful 1082 | uses 1083 | using 1084 | usually 1085 | v 1086 | value 1087 | various 1088 | versus 1089 | very 1090 | via 1091 | viz 1092 | vs 1093 | w 1094 | want 1095 | wants 1096 | was 1097 | wasn't 1098 | way 1099 | we 1100 | we'd 1101 | welcome 1102 | well 1103 | we'll 1104 | went 1105 | were 1106 | we're 1107 | weren't 1108 | we've 1109 | what 1110 | whatever 1111 | what'll 1112 | what's 1113 | what've 1114 | when 1115 | whence 1116 | whenever 1117 | where 1118 | whereafter 1119 | whereas 1120 | whereby 1121 | wherein 1122 | where's 1123 | whereupon 1124 | wherever 1125 | whether 1126 | which 1127 | whichever 1128 | while 1129 | whilst 1130 | whither 1131 | who 1132 | who'd 1133 | whoever 1134 | whole 1135 | who'll 1136 | whom 1137 | whomever 1138 | who's 1139 | whose 1140 | why 1141 | will 1142 | willing 1143 | wish 1144 | with 1145 | within 1146 | without 1147 | wonder 1148 | won't 1149 | would 1150 | wouldn't 1151 | x 1152 | y 1153 | yes 1154 | yet 1155 | you 1156 | you'd 1157 | you'll 1158 | your 1159 | you're 1160 | yours 1161 | yourself 1162 | yourselves 1163 | you've 1164 | z 1165 | zero -------------------------------------------------------------------------------- /textrank4zh/util.py: -------------------------------------------------------------------------------- 1 | #-*- encoding:utf-8 -*- 2 | """ 3 | @author: letian 4 | @homepage: http://www.letiantian.me 5 | @github: https://github.com/someus/ 6 | """ 7 | from __future__ import (absolute_import, division, print_function, 8 | unicode_literals) 9 | 10 | import os 11 | import math 12 | import networkx as nx 13 | import numpy as np 14 | import sys 15 | from . import compute_yingda 16 | 17 | try: 18 | reload(sys) 19 | sys.setdefaultencoding('utf-8') 20 | except: 21 | pass 22 | 23 | sentence_delimiters = ['?', '!', ';', '?', '!', '。', ';', '……', '…', '\n'] 24 | allow_speech_tags = ['an', 'i', 'j', 'l', 'n', 'nr', 'nrfg', 'ns', 'nt', 'nz', 't', 'v', 'vd', 'vn', 'eng'] 25 | 26 | PY2 = sys.version_info[0] == 2 27 | if not PY2: 28 | # Python 3.x and up 29 | text_type = str 30 | string_types = (str,) 31 | xrange = range 32 | 33 | def as_text(v): ## 生成unicode字符串 34 | if v is None: 35 | return None 36 | elif isinstance(v, bytes): 37 | return v.decode('utf-8', errors='ignore') 38 | elif isinstance(v, str): 39 | return v 40 | else: 41 | raise ValueError('Unknown type %r' % type(v)) 42 | 43 | def is_text(v): 44 | return isinstance(v, text_type) 45 | 46 | else: 47 | # Python 2.x 48 | text_type = unicode 49 | string_types = (str, unicode) 50 | xrange = xrange 51 | 52 | def as_text(v): 53 | if v is None: 54 | return None 55 | elif isinstance(v, unicode): 56 | return v 57 | elif isinstance(v, str): 58 | return v.decode('utf-8', errors='ignore') 59 | else: 60 | raise ValueError('Invalid type %r' % type(v)) 61 | 62 | def is_text(v): 63 | return isinstance(v, text_type) 64 | 65 | __DEBUG = None 66 | 67 | def debug(*args): 68 | global __DEBUG 69 | if __DEBUG is None: 70 | try: 71 | if os.environ['DEBUG'] == '1': 72 | __DEBUG = True 73 | else: 74 | __DEBUG = False 75 | except: 76 | __DEBUG = False 77 | if __DEBUG: 78 | print( ' '.join([str(arg) for arg in args]) ) 79 | 80 | class AttrDict(dict): 81 | """Dict that can get attribute by dot""" 82 | def __init__(self, *args, **kwargs): 83 | super(AttrDict, self).__init__(*args, **kwargs) 84 | self.__dict__ = self 85 | 86 | 87 | def combine(word_list, window = 2): 88 | """构造在window下的单词组合,用来构造单词之间的边。 89 | 90 | Keyword arguments: 91 | word_list -- list of str, 由单词组成的列表。 92 | windows -- int, 窗口大小。 93 | """ 94 | if window < 2: window = 2 95 | for x in xrange(1, window): 96 | if x >= len(word_list): 97 | break 98 | word_list2 = word_list[x:] 99 | res = zip(word_list, word_list2) 100 | for r in res: 101 | yield r 102 | 103 | def get_similarity(word_list1, word_list2): 104 | """默认的用于计算两个句子相似度的函数。 105 | 106 | Keyword arguments: 107 | word_list1, word_list2 -- 分别代表两个句子,都是由单词组成的列表 108 | """ 109 | words = list(set(word_list1 + word_list2)) 110 | vector1 = [float(word_list1.count(word)) for word in words] 111 | vector2 = [float(word_list2.count(word)) for word in words] 112 | 113 | vector3 = [vector1[x]*vector2[x] for x in xrange(len(vector1))] 114 | vector4 = [1 for num in vector3 if num > 0.] 115 | co_occur_num = sum(vector4) 116 | 117 | if abs(co_occur_num) <= 1e-12: 118 | return 0. 119 | 120 | denominator = math.log(float(len(word_list1))) + math.log(float(len(word_list2))) # 分母 121 | 122 | if abs(denominator) < 1e-12: 123 | return 0. 124 | 125 | return co_occur_num / denominator 126 | 127 | def sort_words(vertex_source, window = 2, pagerank_config = {'alpha': 0.85,}): 128 | """将单词按关键程度从大到小排序 129 | 130 | Keyword arguments: 131 | vertex_source -- 二维列表,子列表代表句子,子列表的元素是单词,这些单词用来构造pagerank中的节点 132 | edge_source -- 二维列表,子列表代表句子,子列表的元素是单词,根据单词位置关系构造pagerank中的边 133 | window -- 一个句子中相邻的window个单词,两两之间认为有边 134 | pagerank_config -- pagerank的设置 135 | """ 136 | sorted_words = [] 137 | word_index = {} 138 | index_word = {} 139 | _vertex_source = vertex_source 140 | words_number = 0 141 | for word_list in _vertex_source: 142 | for word in word_list: 143 | if not word in word_index: 144 | word_index[word] = words_number 145 | index_word[words_number] = word 146 | words_number += 1 147 | 148 | graph = np.zeros((words_number, words_number)) 149 | 150 | for word_list in _vertex_source: 151 | for w1, w2 in combine(word_list, window): 152 | if w1 in word_index and w2 in word_index: 153 | index1 = word_index[w1] 154 | index2 = word_index[w2] 155 | graph[index1][index2] = 1.0 156 | graph[index2][index1] = 1.0 157 | 158 | debug('graph:\n', graph) 159 | 160 | nx_graph = nx.from_numpy_matrix(graph) 161 | scores = nx.pagerank(nx_graph, **pagerank_config) # this is a dict 162 | sorted_scores = sorted(scores.items(), key = lambda item: item[1], reverse=True) 163 | for index, score in sorted_scores: 164 | item = AttrDict(word=index_word[index], weight=score) 165 | sorted_words.append(item) 166 | 167 | return sorted_words 168 | 169 | def sort_sentences(sentences, words, sim_func = get_similarity,decay_rate = 1.0, pagerank_config = {'alpha': 0.85,}): 170 | """将句子按照关键程度从大到小排序 171 | 172 | Keyword arguments: 173 | sentences -- 列表,元素是句子 174 | words -- 二维列表,子列表和sentences中的句子对应,子列表由单词组成 175 | sim_func -- 计算两个句子的相似性,参数是两个由单词组成的列表 176 | pagerank_config -- pagerank的设置 177 | """ 178 | 179 | while "ou" in sentences: 180 | sentences.remove("ou") 181 | 182 | sorted_sentences = [] 183 | _source = words 184 | 185 | sentences_num = len(sentences) 186 | graph = np.zeros((sentences_num, sentences_num)) 187 | 188 | for x in xrange(sentences_num): 189 | for y in xrange(x, sentences_num): 190 | #similarity = sim_func( _source[x], _source[y] ) 191 | similarity = compute_yingda.pipei(sentences[x],sentences[y]) 192 | graph[x, y] = similarity 193 | graph[y, x] = similarity 194 | 195 | #进行咨询新闻特殊处理 196 | chapital = [] 197 | duanluo_index = [x for x in xrange(sentences_num) if sentences[x].find("ou") >= 0] 198 | chapital.append((0,duanluo_index[0])) 199 | for i in range(len(duanluo_index)-1): 200 | ft = (duanluo_index[i],duanluo_index[i+1]) 201 | chapital.append(ft) 202 | chapital.append((duanluo_index[-1],sentences_num)) 203 | 204 | #归一化 205 | for x in xrange(sentences_num): 206 | sum_lie = 0 207 | for y in xrange(sentences_num): 208 | if x != y : 209 | sum_lie += graph[y,x] 210 | if sum_lie >0 : 211 | graph [x,x] = 0 212 | else: 213 | graph [x,x] = 1.0 214 | sum_lie = 1.0 215 | for y in xrange(sentences_num): 216 | graph [y,x] = float(graph[y,x]) / sum_lie 217 | graph [x,y] = graph [y,x] 218 | 219 | 220 | #权重倾斜 221 | for i in xrange(len(chapital)): 222 | for j in xrange(chapital[i][0],chapital[i][1]): 223 | if chapital[i][1] - chapital[i][0] <= 1 and i != len(chapital) - 1 and sentences[chapital[i][0]].find(",") < 0: 224 | for k in xrange(chapital[i+1][0],chapital[i+1][1]): 225 | graph [chapital[i][0] , k] += (1.0/decay_rate - 1.0) 226 | elif j < chapital[i][1] - 1 and chapital[i][1] - chapital[i][0] >=3 : 227 | graph[j , j+1] += (1.0/decay_rate -1.0) 228 | 229 | for x in xrange(sentences_num): 230 | sum_lie = 0 231 | for y in xrange(sentences_num): 232 | sum_lie += graph[y , x] 233 | for y in xrange(sentences_num): 234 | graph[y,x] = float(graph[y,x]) / sum_lie 235 | 236 | nx_graph = nx.from_numpy_matrix(graph) 237 | scores = nx.pagerank(nx_graph, **pagerank_config) # this is a dict 238 | sorted_scores = sorted(scores.items(), key = lambda item: item[1], reverse=True) 239 | 240 | for index, score in sorted_scores: 241 | item = AttrDict(index=index, sentence=sentences[index].replace("ou","").strip(), weight=score) 242 | sorted_sentences.append(item) 243 | 244 | return sorted_sentences 245 | 246 | if __name__ == '__main__': 247 | pass 248 | -------------------------------------------------------------------------------- /textrank4zh/util.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ouprince/text-rank/eb70d43c316d5996ada2b968b141a8355c077fc9/textrank4zh/util.pyc -------------------------------------------------------------------------------- /textrank4zh/word_model/log.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ouprince/text-rank/eb70d43c316d5996ada2b968b141a8355c077fc9/textrank4zh/word_model/log.txt --------------------------------------------------------------------------------