def func9(): """ 文本相似度 """ test_text = [['性格', '善良'], ['善良', '温柔', '温柔'], ['温柔', '善良'], ['好人'], ['性格', '善良']] s1 = SnowNLP(test_text) print(s1.sim(['温柔'])) print(s1.sim(['善良'])) print(s1.sim(['好人']))
def parse(content,keywords): wordlist=keywords.decode('gbk').split(u',') #python 2.7形式 # wordlist=words.split(u',') #python 3.5形式 conlist=content.replace('\n','').replace(' ','').split('\xe3\x80\x82') HanLP = JClass('com.hankcs.hanlp.HanLP') allwords=[] sentences=[] for fword in conlist: if len(fword)>0: swords = HanLP.extractPhrase(HanLP.convertToSimplifiedChinese(fword),10000) #以词组进行拆分 allwords.append(swords) #保留原话内容 sentences.append(fword) #保留拆分后的内容 这里形成的两个数列具有一一对应关系 wordall=[] for line in allwords: words=[] for word in line: word="".join(word) words.append(word) wordall.append(words) ss = SnowNLP(wordall) ##ss.sim 进行全匹配 传入参数conlist:有空格无法匹配 simlist=ss.sim(wordlist) #根据指标对应的关键词词组进行权重计算 结果是一个数列,每个元素与上边生成的两个数列都是一一对应的关系 conlist=[] if max(simlist)>0: for ind in range(len(simlist)): if simlist[ind]>0: shan=SnowNLP(sentences[ind].decode('utf8')) sshan=shan.han #繁体转简体 conlist.append((sshan,simlist[ind])) #提取权重大于0的语句 sortconlist=sorted(conlist,key=lambda x:x[1],reverse=True) #根据权重排序,只取权重高的前三句话 return sortconlist[:3] else: return 'None'
def similarText(tokens, content): snow = SnowNLP(tokens) similar = snow.sim(content) norm = math.sqrt(sum(map(lambda x: x * x, similar))) if (norm == 0): return False similar = map(lambda x: x / norm, similar) return max(similar) >= 0.95
def similarity_snownlp(cls, sentence1, sentence2): """ call snownlp to do similarity analysis Args: sentence1: string sentence2: string Returns: float """ snow = SnowNLP(sentence1) return snow.sim(sentence2)
def runDemo(): s = SnowNLP(u'这个东西真心很赞') print("原句:%s" % s.doc) # 分词 print("分词:" + " ".join(s.words)) print("词性分析: %s" % list(s.tags)) print("情感化程度: %f" % s.sentiments) # 情感化程度0~1 ,越接近1表示正面情绪,越接近0表示负面情绪 print("拼音: %s" % s.pinyin) print("\n") s = SnowNLP(u'「繁體字」「繁體中文」的叫法在臺灣亦很常見。') # 翻译成简体中文 print("简化字: %s" % s.han) print("\n") text = u''' 自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。 它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。 自然语言处理是一门融语言学、计算机科学、数学于一体的科学。 因此,这一领域的研究将涉及自然语言,即人们日常使用的语言, 所以它与语言学的研究有着密切的联系,但又有重要的区别。 自然语言处理并不是一般地研究自然语言, 而在于研制能有效地实现自然语言通信的计算机系统, 特别是其中的软件系统。因而它是计算机科学的一部分。 ''' s = SnowNLP(text) print("原句:%s" % s.doc) # 关键词提取 print("关键词: %s" % s.keywords(3)) # 摘要生成 print("摘要三句话: %s " % s.summary(3)) # [u'因而它是计算机科学的一部分', # u'自然语言处理是一门融语言学、计算机科学、 # 数学于一体的科学', # u'自然语言处理是计算机科学领域与人工智能 # 领域中的一个重要方向'] print(s.sentences) print("\n") l = [[u'这篇', u'文章'], [u'那篇', u'论文'], [u'这个']] print("假设有这么三句话,已分词: %s" % l) s = SnowNLP(l) #计算相似度 print("计算与'文章'这个词汇的相似度,也可以是分词后的句子") print(s.sim([u'文章'])) # [0.3756070762985226, 0, 0]
def cal_BM25(data, segment_list): question_list = [] ## make a quesion only list from json for i in range(0, len(data)): question_list.append(data[i]['question']) question_word = [] ## send every question in CKIP and save result in question_word for question in question_list: question_temp = [] result = seg(question) # send to CKIP for words in result: question_temp.append(words[0]) # result save in question_temp question_word.append( question_temp) # save result of every question in question_word #print(question_word) ## calculate the BM25 s = SnowNLP(question_word) s.tf s.idf #print(segment_list) ##debugger return s.sim(segment_list)
# In[42]: s.tf #tf # In[43]: s.idf #idf # In[46]: s.sim(['作']) #相似度 # In[47]: s = SnowNLP([[T_3_comment.题目[1],T_3_comment.题目[0],T_3_comment.题目[7]]]) # In[66]: from snownlp import SnowNLP s = SnowNLP(T_3_comment.评论内容[1]) print(s.summary(3),) #用段落比较好
#分割成句子 print(s.sentences) #['自然语言处理是计算机科学领域与人工智能领域中的一个重要方向', '它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法', '自然语言处理是一门融语言学、计算机科学、数学于一体的科学', '因此', '这一领域的研究将涉及自然语言', '即人们日常使用的语言', '所以它与语言学的研究有着密切的联系', '但又有重要的区别', '自然语言处理并不是一般地研究自然语言', '而在于研制能有效地实现自然语言通信的计算机系统', '特别是其中的软件系统', '因而它是计算机科学的一部分'] s = SnowNLP([['这篇', '文章'], ['那篇', '论文'], ['这个']]) #词频 tf print(s.tf) # [{'文章': 1, '这篇': 1}, {'论文': 1, '那篇': 1}, {'这个': 1}] #IDF print(s.idf)#{'文章': 0.5108256237659907, '这篇': 0.5108256237659907, '论文': 0.5108256237659907, '那篇': 0.5108256237659907, '这个': 0.5108256237659907} #文本相似 print(s.sim(['文章'])) #[0.4686473612532025, 0, 0] #文本分类(Naive Bayes) data=[('另外,龙华现代有轨电车试验线总投资约24 .2亿元,已完成投资1 .95亿元,主体工程完成2 .3%,同步实施的道路改造、绿化迁移、管线改迁等工程完成19.3%,力争于2017年1月开通试运行。深圳同步开展运营管理立法,正在组织研究制订《有轨电车驾驶资格及车辆牌证管理办法》、《有轨电车沿线道路通行秩序管理办法》、《现代有轨电车运营服务管理办法》。相关管理办法已完成初稿,力争2016年底前完成立法工作。',2), ('根据深圳轨道交通三期工程建设规划,预计到2020年,深圳轨道交通将形成11条完整线路、435公里轨道交通网络。深圳就此形成16个项目,总长411公里,拟总投资3248亿元的建议上报方案。目前正进一步梳理各专家、各区政府的意见,修改完善方案,力争今年一季度形成轨道交通四期建设规划方案上报国家有关部门审批。',2), ('2015年市政府加大财政直接投资支持力度,拨付679 .96亿元财政资金给地铁集团,是历年来支持力度最大的一年。同时,市轨道办会同市交通运输委、财政委等有关部门,正在综合考虑深圳运营和财政实际情况,研究完善深圳轨道交通运营补贴机制。按照《办理方案》的要求,市政府还将于2016年底向市人大常委会报告该项重点建议的办理情况。',2), ('近日,网友拍摄到了在船厂里的中国第2艘万吨级海警执法船,该船已经完成建造,整装待发,即将加入到中国海上执维权执法的序列中,未来或部署南海。该船编号3901的海警船满载排水量超过万吨,将成为我国海上执法力量的中流砥柱。另据报道,首艘同型万吨海警船2901号在建造完成后,已经进驻舟山。',1), ('长期以来,中国的海上执法力量一直处于劣势地位。海上执法船吨位太小,火力太弱,再加上“九龙闹海”的局面,所以常常遭受一些国家的欺凌。曾几何时,为了维护自己的海洋权益,中国不得不派遣军舰同对方的执法船对峙。这种做法一方面容易授人以口实,另一方面不好把控冲突的烈度。近年来,中国海上执法力量励精图治,不但结束了力量分散的局面,而且建造了一大批优秀的海上执法船,其中就包括本文的主角海警2901船。',1), ('近日,海警2901船已经开始海试。该船有两大特点,一是吨位大,二是火力强。海警2901船在首部安装了76毫米舰炮,同美国现役“汉密尔顿”级巡逻舰安装的火炮属于同一口径。此外,该船的吨位达到了惊人的1.2万吨,取代“敷岛”级成为世界上最大的海警船。',1) ] from snownlp import classification s=classification.bayes.Bayes() s.train (data) print(s.classify ('深圳地铁11号线试运营')) #返回:(所属类别,概率) print(s.classify ('中国最大的海警船'))
WSResult = [] seg(questions[k]) for p in range(0, len(WSResult)): #print(WSResult[p][0]) if WSResult[p][0]!='「' and WSResult[p][0]!='」' and WSResult[p][0]!='?' and WSResult[p][0]!='?'and WSResult[p][0]!=','\ and WSResult[p][0]!='…' and WSResult[p][0]!='/' and WSResult[p][0]!='"' and WSResult[p][0]!='('\ and WSResult[p][0]!=')'and WSResult[p][0]!='╱' and WSResult[p][0]!='】' and WSResult[p][0]!='【': tmp[k].append(WSResult[p][0]) #print(tmp[k]) else: tmp.append([]) WSResult = [] seg(input) parseinput = [] for p in range(0, len(WSResult)): # print(WSResult[p][0]) if WSResult[p][0] != '「' and WSResult[p][0] != '」' and WSResult[p][0] != '?' and WSResult[p][0] != '?' and \ WSResult[p][0] != ',' \ and WSResult[p][0] != '…' and WSResult[p][0] != '/' and WSResult[p][0] != '"' and WSResult[p][0] != '(' \ and WSResult[p][0] != ')' and WSResult[p][0] != '╱' and WSResult[p][0] != '】' and WSResult[p][0] != '【': parseinput.append(WSResult[p][0]) s = SnowNLP(tmp) x = s.sim(parseinput) #print(x) Answer = x.index(max(x)) print(str(answers[Answer])) #print(tmp[0]) #print(tmp[1])
text = u""" 宁波华翔:海外资产拐点显现 并购协同助力国内增长 公司是国内优秀汽车内饰供应商,通过合资与并购实现高速增长。公司与世界知名汽车零部件公司合资,产品质量、市场地位处于国内领先水平;通过并购快速开拓新客户与新产品,营收规模高速提升;下游客户包括南北大众、宝马丰田等主流合资品牌,并通过海外并购进入德国宝马奔驰、美国通用等世界汽车商海外配套体系,成长空间拓展至全球配套市场。 核心资产盈利能力强,随下游客户共同成长。11-12 年由于参股公司调整等非经常因素影响,净利润出现大幅下滑。但公司核心资产盈利能力优异,随整车客户完成全国布局,通过合资并购开拓新客户与新产品,非经常性因素影响消除后,业绩增速将恢复到20%左右。 海外并购拓展公司产品种类和客户资源,为未来发展奠定基础。公司先后收购德国Sellner 和HIB 公司,借海外公司技术实力和客户资源提升内饰产品的品质,并进入德国奔驰宝马、美国通用配套体系。同时,公司参股德国Helbako 30%股权,进军汽车电子领域,并合资在国内设立生产基地,开拓国内汽车电子市场,为未来准备新的增长空间。 欧洲车市向好,海外资产有望迎来拐点。公司通过合资收购成长,整合经验丰富,海外资产整合成功是大概率事件。海外资产在木内饰领域竞争力强,12 年收入近20 亿,亏损4000 多万,恢复正常有望贡献1-2 亿盈利,弹性巨大。近期欧洲车市现向好迹象,海外资产改善将大幅提升业绩。 """ # s = SnowNLP(text) # for each in s.keywords(5): # print each # print "-" * 50 # for each in s.summary(5): # print each # print "-" * 50 # for each in s.sentences: # print each # # print s.tf # print s.idf #=============================================================================== # 相似度模块 #=============================================================================== s = SnowNLP([[u'创业', u'板', u'暴跌', u'4.37%', u'现', u'巨 阴', u'断头铡']] ) print s.sim([u'创业', u'板', u'暴跌', u'4.37%', u'现', u'巨 阴', u'断头铡'])
print(s.keywords(10)); print(s.summary(3)) # print(py) print() exit() # 繁体转为简体 s = SnowNLP(u'「繁體字」「繁體中文」的叫法在臺灣亦很常見。') ss = s.han print(ss) print() # 自动摘要 text = '''自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分。 ''' s = SnowNLP(text) s = s.summary(5) print(s) print() # 计算BM2.5 相似性 s = SnowNLP([['这篇', '文章','非常好'], ['那篇', '文章','一般般'], ['这个']]) #s.tf print(s.idf) print(s.sim(['这篇', '文章','非常好']))
自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。 它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。 自然语言处理是一门融语言学、计算机科学、数学于一体的科学。 因此,这一领域的研究将涉及自然语言,即人们日常使用的语言, 所以它与语言学的研究有着密切的联系,但又有重要的区别。 自然语言处理并不是一般地研究自然语言, 而在于研制能有效地实现自然语言通信的计算机系统, 特别是其中的软件系统。因而它是计算机科学的一部分。 ''' s = SnowNLP(text) s.keywords(3) # [u'语言', u'自然', u'计算机'] s.summary(3) # [u'自然语言处理是一门融语言学、计算机科学、 # 数学于一体的科学', # u'即人们日常使用的语言', # u'自然语言处理是计算机科学领域与人工智能 # 领域中的一个重要方向'] s.sentences s = SnowNLP([[u'这篇', u'文章'], [u'那篇', u'论文'], [u'这个']]) s.tf s.idf s.sim([u'文章'])# [0.3756070762985226, 0, 0]
# for x, w in jieba.analyse.textrank(text, withWeight=True): for x, w in jieba.analyse.extract_tags(text, withWeight=True): word_list.append([x, w]) return word_list # 语料库文档 corpus_text = u''' 使用snownlp进行情感分析。 文本情感分析。 语义分析之情感分析。 聊天机器人 , 中文翻译, 繁简 , 关键词提取 , 主题提取, 摘要提取 , 命名体识别, 分词 , 情感分析。 python的中文文本挖掘库snownlp进行购物评论文本情感分析实例。 ''' # 待预测文档 sent_predict = '中文翻译机器人聊天主题评论' # 准备 sents_list = text_corpus(corpus_text) print(sents_list) sent_predict = pre_process(sent_predict) print(sent_predict) source_corpus = SnowNLP(sents_list) # 相似性分析 print(source_corpus.sim(sent_predict)) # 文本摘要 print(text_summary(corpus_text, 3)) #Tag 提取 text = "此外,公司拟对全资子公司吉林欧亚置业有限公司增资4.3亿元,增资后,吉林欧亚置业注册资本由7000万元增加到5亿元。吉林欧亚置业主要经营范围为房地产开发及百货零售等业务。目前在建吉林欧亚城市商业综合体项目。2013年,实现营业收入0万元,实现净利润-139.13万元。" print(word_extract(text))
import jieba """ 文本句子相似性 """ #两篇文档 text1 = u'''我爱 中国 美国''' text2 = u'''北京 香港 美国''' text3 = u'''河南 河北''' text_words1 = jieba.cut(text1, cut_all=True) text_words2 = jieba.cut(text2, cut_all=True) text_words3 = jieba.cut(text3, cut_all=True) #测试数据 text_test = u'''我爱中国''' test_words1 = jieba.cut(text_test, cut_all=True) test_words = list(test_words1) text_words = [list(text_words1), list(text_words2), list(text_words3)] #print " ".join(text_words) s = SnowNLP(text_words) # 必须是分好词的文档如:[[我爱, 中国, 美国,],[北京,香港,美国],[河南,河北]] #tf=某个词在本文档中出现的次数/本文档的总词数 [{"我": 1, "爱": 1, "中国": 1, "美国": 1, "": 4}, {"": 4, "北京": 1, "美国": 1, "香港": 1}, {"": 2, "河北": 1, "河南": 1}] print json.dumps(s.tf, encoding="UTF-8", ensure_ascii=False) #idf=log(语料库文档总数/(包含该词的文档数+1)) {"": -1.9459101490553135, "我": 0.5108256237659907, "香港": 0.5108256237659907, "河南": 0.5108256237659907, "北京": 0.5108256237659907, "河北": 0.5108256237659907, "爱": 0.5108256237659907, "美国": -0.5108256237659907, "中国": 0.5108256237659907} print json.dumps(s.idf, encoding="UTF-8", ensure_ascii=False) #输出 [1.3702146143370104, 0, 0] 表示与第一类相似 print json.dumps(s.sim(test_words), encoding="UTF-8", ensure_ascii=False)
s.han # u'「繁体字」「繁体中文」的叫法 # 在台湾亦很常见。' text = u''' 自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。 它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。 自然语言处理是一门融语言学、计算机科学、数学于一体的科学。 因此,这一领域的研究将涉及自然语言,即人们日常使用的语言, 所以它与语言学的研究有着密切的联系,但又有重要的区别。 自然语言处理并不是一般地研究自然语言, 而在于研制能有效地实现自然语言通信的计算机系统, 特别是其中的软件系统。因而它是计算机科学的一部分。 ''' s = SnowNLP(text) s.keywords(3) # [u'语言', u'自然', u'计算机'] s.summary(3) # [u'自然语言处理是一门融语言学、计算机科学、 # 数学于一体的科学', # u'即人们日常使用的语言', # u'自然语言处理是计算机科学领域与人工智能 # 领域中的一个重要方向'] s.sentences s = SnowNLP([[u'这篇', u'文章'], [u'那篇', u'论文'], [u'这个']]) s.tf s.idf s.sim([u'文章']) # [0.3756070762985226, 0, 0]
s = SnowNLP(u'「繁體字」「繁體中文」的叫法在臺灣亦很常見。') print(s.han) # u'「繁体字」「繁体中文」的叫法在台湾亦很常见。' text = u''' 自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。 它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。 自然语言处理是一门融语言学、计算机科学、数学于一体的科学。 因此,这一领域的研究将涉及自然语言,即人们日常使用的语言, 所以它与语言学的研究有着密切的联系,但又有重要的区别。 自然语言处理并不是一般地研究自然语言, 而在于研制能有效地实现自然语言通信的计算机系统, 特别是其中的软件系统。因而它是计算机科学的一部分。 ''' s = SnowNLP(text) print(s.keywords(3)) # [u'语言', u'自然', u'计算机'] print(s.summary(3)) # [u'因而它是计算机科学的一部分', # u'自然语言处理是一门融语言学、计算机科学、 # 数学于一体的科学', # u'自然语言处理是计算机科学领域与人工智能 # 领域中的一个重要方向'] print(s.sentences) s = SnowNLP([[u'这篇', u'文章'], [u'那篇', u'论文'], [u'这个']]) print(s.tf) print(s.idf) print(s.sim([u'文章'])) # [0.3756070762985226, 0, 0]
# s = SnowNLP(u'「繁體字」「繁體中文」的叫法在臺灣亦很常見。') # print(s.han) ## Topic Modeling text = u''' 当前课程图谱中所有课程之间的相似度全部基于gensim计算, 自己写的调用代码不到一百行,topic模型采用LSI(Latent semantic indexing, 中文译为浅层语义索引), LSI和LSA(Latent semantic analysis,中文译为浅层语义分析)这两个名词常常混在一起, 事实上,在维基百科上,有建议将这两个名词合二为一。 以下是课程图谱的一个效果图,课程为著名的机器学习专家Andrew Ng教授在Coursera的机器学习公开课, 图片显示的是主题模型计算后排名前10的相关课程,Andrew Ng教授同时也是Coursera的创始人之一 ''' # s = SnowNLP(text) # for k in s.keywords(3): # print(k), # # for sum in s.summary(5): # print(sum), # print # s = SnowNLP([[u'这篇', u'文章'], [u'那篇', u'论文'], [u'这个']]) print(s.tf) print(s.idf) print(s.sim([u'文章']))
缺点是一技能的强化普攻和解除控制的效果会被浪费。\ 连招二:大招+晕眩+二技能+普攻+一技能+普攻。\ 这套连招用于偷袭对手后排很是好用,利用草丛埋伏。\ 大招跳到对面身上。迅速晕眩对手,接着二技能继续减速对手,二技能命中后会提升典韦到极限攻速,这时不断普攻,接下来一般会遇到两种情况,当对手继续逃跑时,我们利用一技能加速追击对手,强化普攻击杀对手。\ 当对手用技能控住我们我们可以利用一技能解除控制,追击并完成击杀。' snow = SnowNLP(text) # 分词 print('分词:\n', snow.words) # 词性标注 tags = [x for x in snow.tags] print('词性标注:\n', tags) # 断句 print('断句结果:\n', snow.sentences) # 情绪判断 print('情绪判断:\n', snow.sentiments) # 拼音 print('拼音:\n', snow.pinyin) # 繁体转简体 print('繁体转换为简体:\n', snow.han) # 关键词抽取 print('打印关键字:\n', snow.keywords(20)) # 概括总结文章[总结概括Wie几句话] print('总结概括文章:\n', snow.summary(4)) # 信息衡量 print('tf值: \n', snow.tf) print('idf值: \n', snow.idf) # 文本相似性 print('文本相似性:\n', snow.sim(['王者']))
# 这样训练好的文件就存储为seg.marshal了,之后修改snownlp/seg/__init__.py里的data_path指向刚训练好的文件即可 text = u''' 自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。 它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。 自然语言处理是一门融语言学、计算机科学、数学于一体的科学。 因此,这一领域的研究将涉及自然语言,即人们日常使用的语言, 所以它与语言学的研究有着密切的联系,但又有重要的区别。 自然语言处理并不是一般地研究自然语言, 而在于研制能有效地实现自然语言通信的计算机系统, 特别是其中的软件系统。因而它是计算机科学的一部分。 ''' s = SnowNLP(text) print '关键词:', print s.keywords(3) # [u'语言', u'自然', u'计算机'] for i in s.keywords(3): print i print '摘要:', print s.summary(3) for i in s.summary(3): print i print '句子:', print s.sentences for i in s.sentences: print i s = SnowNLP([[u'这篇', u'文章'], [u'那篇', u'论文'], [u'这个']]) print s.tf print s.idf print s.sim([u'文章']) print s.sim([u'这个'])
print(s.han) # u'「繁体字」「繁体中文」的叫法在台湾亦很常见。' print("=" * 50) text = u''' 自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。 它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。 自然语言处理是一门融语言学、计算机科学、数学于一体的科学。 因此,这一领域的研究将涉及自然语言,即人们日常使用的语言, 所以它与语言学的研究有着密切的联系,但又有重要的区别。 自然语言处理并不是一般地研究自然语言, 而在于研制能有效地实现自然语言通信的计算机系统, 特别是其中的软件系统。因而它是计算机科学的一部分。 ''' s = SnowNLP(text) print(s.keywords(3)) # [u'语言', u'自然', u'计算机'] print(s.summary(3)) # [u'因而它是计算机科学的一部分', # u'自然语言处理是一门融语言学、计算机科学、数学于一体的科学', # u'自然语言处理是计算机科学领域与人工智能领域中的一个重要方向'] print(s.sentences) print("=" * 50) s = SnowNLP([[u'这篇', u'文章'], [u'那篇', u'论文'], [u'这个']]) print(s.tf) print(s.idf) print(s.sim([u'文章']))
def test(): name_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'] num_list = [33, 44, 53, 16, 11, 17, 17, 10] autolabel( plt.bar(range(len(num_list)), num_list, color='rgb', tick_label=name_list)) plt.show() text = '李达康就是这样的人,她穷哭出声,不攀龙附凤,不结党营私,不同流合污,不贪污受贿,也不伪造政绩,手下贪污出事了他自责用人不当,服装厂出事了他没想过隐瞒,後面這些是繁體字' s = SnowNLP(text) # 一、分词 print(s.words) # ['李', '达康', '就', '是', '这样', '的', '人', ',', '她穷', '哭出', '声', ',', '不', '攀龙', '附', '凤', ',', '不结', '党', '营私', ',', '不同', '流', '合', '污', ',', '不', '贪污', '受贿', ',', '也', '不', '伪造', '政绩', ',', '手下', '贪污', '出事', '了', '他', '自', '责', '用人', '不当', ',', '服装厂', '出事', '了', '他', '没', '想过', '隐瞒', ',', '後面', '這些', '是', '繁', '體字'] # 二、词性标注 tags = [x for x in s.tags] print(tags) # [('李', 'nr'), ('达康', 'nr'), ('就', 'd'), ('是', 'v'), ('这样', 'r'), ('的', 'u'), ('人', 'n'), (',', 'w'), ('她穷', 'Rg'), ('哭出', 'Rg'), ('声', 'q'), (',', 'w'), ('不', 'd'), ('攀龙', 'Vg'), ('附', 'v'), ('凤', 'Ng'), (',', 'w'), ('不结', 'vvn'), ('党', 'n'), ('营私', 'Bg'), (',', 'w'), ('不同', 'a'), ('流', 'Ng'), ('合', 'v'), ('污', 'Ng'), (',', 'w'), ('不', 'd'), ('贪污', 'v'), ('受贿', 'v'), (',', 'w'), ('也', 'd'), ('不', 'd'), ('伪造', 'v'), ('政绩', 'n'), (',', 'w'), ('手下', 'n'), ('贪污', 'v'), ('出事', 'v'), ('了', 'u'), ('他', 'r'), ('自', 'p'), ('责', 'Ng'), ('用人', 'v'), ('不当', 'a'), (',', 'w'), ('服装厂', 'n'), ('出事', 'v'), ('了', 'u'), ('他', 'r'), ('没', 'd'), ('想过', 'ad'), ('隐瞒', 'v'), (',', 'w'), ('後面', 'Rg'), ('這些', 'Rg'), ('是', 'v'), ('繁', 'Rg'), ('體字', 'Rg')] # 三、断句 print( s.sentences ) # ['李达康就是这样的人', '她穷哭出声', '不攀龙附凤', '不结党营私', '不同流合污', '不贪污受贿', '也不伪造政绩', '手下贪污出事了他自责用人不当', '服装厂出事了他没想过隐瞒', '後面這些是繁體字'] # 四、情绪判断,返回值为正面情绪的概率,越接近1表示正面情绪,越接近0表示负面情绪 text1 = '这部电影真心棒,全程无尿点' text2 = '这部电影简直烂到爆' text3 = '我女朋友长得可漂亮了,我贼喜欢' text4 = '这个人真的是太坏了,我好气愤!!!' s1 = SnowNLP(text1) s2 = SnowNLP(text2) s3 = SnowNLP(text3) s4 = SnowNLP(text4) print(text1, s1.sentiments) # 这部电影真心棒,全程无尿点 0.9842572323704297 print(text2, s2.sentiments) # 这部电影简直烂到爆 0.0566960891729531 print(text3, s3.sentiments) # 这部电影简直烂到爆 0.0566960891729531 print(text4, s4.sentiments) # 这部电影简直烂到爆 0.0566960891729531 # 五、拼音 print(s.pinyin) # ['li', 'da', 'kang', 'jiu', 'shi', 'zhe', 'yang', 'de', 'ren', ',', 'ta', 'qiong', 'ku', 'chu', 'sheng', ',', 'bu', 'pan', 'long', 'fu', 'feng', ',', 'bu', 'jie', 'dang', 'ying', 'si', ',', 'bu', 'tong', 'liu', 'he', 'wu', ',', 'bu', 'tan', 'wu', 'shou', 'hui', ',', 'ye', 'bu', 'wei', 'zao', 'zheng', 'ji', ',', 'shou', 'xia', 'tan', 'wu', 'chu', 'shi', 'liao', 'ta', 'zi', 'ze', 'yong', 'ren', 'bu', 'dang', ',', 'fu', 'zhuang', 'chang', 'chu', 'shi', 'liao', 'ta', 'mo', 'xiang', 'guo', 'yin', 'man', ',', '後', 'mian', '這', 'xie', 'shi', 'fan', '體', 'zi'] # 六、繁体转简体 print( s.han ) # 李达康就是这样的人,她穷哭出声,不攀龙附凤,不结党营私,不同流合污,不贪污受贿,也不伪造政绩,手下贪污出事了他自责用人不当,服装厂出事了他没想过隐瞒,后面这些是繁体字 # 七、关键字抽取 text3 = ''' 北京故宫 是 中国 明清两代 的 皇家 宫殿 , 旧 称为 紫禁城 , 位于 北京 中轴线 的 中心 , 是 中国 古代 宫廷 建筑 之 精华 。 北京故宫 以 三 大殿 为 中心 , 占地面积 72 万平方米 , 建筑面积 约 15 万平方米 , 有 大小 宫殿 七十 多座 , 房屋 九千余 间 。 是 世界 上 现存 规模 最大 、 保存 最为 完整 的 木质 结构 古建筑 之一 。 北京故宫 于 明成祖 永乐 四年 ( 1406 年 ) 开始 建设 , 以 南京 故宫 为 蓝本 营建 , 到 永乐 十八年 ( 1420 年 ) 建成 。 它 是 一座 长方形 城池 , 南北 长 961 米 , 东西 宽 753 米 , 四面 围有 高 10 米 的 城墙 , 城外 有 宽 52 米 的 护城河 。 紫禁城 内 的 建筑 分为 外朝 和内廷 两 部分 。 外朝 的 中心 为 太和殿 、 中和殿 、 保和殿 , 统称 三 大殿 , 是 国家 举行 大 典礼 的 地方 。 内廷 的 中心 是 乾清宫 、 交泰 殿 、 坤宁宫 , 统称 后 三宫 , 是 皇帝 和 皇后 居住 的 正宫 。 [ 1 ] 北京故宫 被誉为 世界 五大 宫之首 ( 法国 凡尔赛宫 、 英国 白金汉宫 、 美国白宫 、 俄罗斯 克里姆林宫 ) , 是 国家 AAAAA 级 旅游 景区 , [ 2 - 3 ] 1961 年 被 列为 第一批 全国 重点 文物保护 单位 ; [ 4 ] 1987 年 被 列为 世界 文化遗产 。 [ 5 ] 2012 年 1 月 至 2018 年 6 月 , 故宫 累计 接待 观众 达到 1 亿人次 。 2019 年 起 , 故宫 将 试行 分 时段 售票 [ 6 ] 。 2018 年 9 月 3 日 , 故宫 养心殿 正式 进入 古建筑 研究性 保护 修缮 工作 的 实施 阶段 。 [ 7 ] 2019 年 3 月 4 日 , 故宫 公布 了 2019 年 下半年 展览 计划 。 [ 8 ] ''' s = SnowNLP(text3) print(s.keywords( limit=10)) # ['故宫', '年', '米', '外', '中心', '世界', '建筑', '北京', '宫', '保护'] # 八、概括总结文章 print( s.summary(limit=4) ) # ['北京故宫 以 三 大殿 为 中心', '2012 年 1 月 至 2018 年 6 月', '[ 7 ] 2019 年 3 月 4 日', '北京故宫 于 明成祖 永乐 四年 ( 1406 年 ) 开始 建设'] # 九、信息衡量 ''' TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。 TF词频越大越重要,但是文中会的“的”,“你”等无意义词频很大,却信息量几乎为0,这种情况导致单纯看词频评价词语重要性是不准确的。因此加入了idf IDF的主要思想是:如果包含词条t的文档越少,也就是n越小,IDF越大,则说明词条t越重要 TF-IDF综合起来,才能准确的综合的评价一词对文本的重要性。 ''' s = SnowNLP([ ['性格', '善良'], ['温柔', '善良', '善良'], ['温柔', '善良'], ['好人'], ['性格', '善良'], ]) print( s.tf ) # [{'性格': 1, '善良': 1}, {'温柔': 1, '善良': 2}, {'温柔': 1, '善良': 1}, {'好人': 1}, {'性格': 1, '善良': 1}] print( s.idf ) # {'性格': 0.33647223662121295, '善良': -1.0986122886681098, '温柔': 0.33647223662121295, '好人': 1.0986122886681098} # 十、文本相似性 print(s.sim(['温柔'])) # [0, 0.2746712135683371, 0.33647223662121295, 0, 0] print( s.sim(['善良']) ) # [-1.0986122886681098, -1.3521382014376737, -1.0986122886681098, 0, -1.0986122886681098] print(s.sim(['好人'])) # [0, 0, 0, 1.4175642434427222, 0]
def nlp(Question): text = "" #file extract from CTBC.json with codecs.open('OP (Simple).json', 'r', 'utf-8') as file: file = file.read() fileDictionary = json.loads(file) with codecs.open('OP (Traditional).json', 'r', 'utf-8') as file2: file1 = file2.read() oqfileDictionary = json.loads(file1) if ('!問題' in Question or '!問題' in Question): t1 = '' for i in range(0, 5): j = random.randint(0, len(oqfileDictionary)) tmp = oqfileDictionary[j]['question'] ttmp = '' for k in range(0, len(tmp)): ttmp = ttmp + tmp[k] t1 = t1 + str(i+1) + '. ' + ttmp + '\n' return t1 if ('?' not in Question and '?' not in Question): return '請輸入問句!(記得加上問號)' #type in the question segQuestion = seg(Question) #段詞系統 extractQuestion = [] for i in range(0, len(segQuestion)): extractQuestion.append(HanziConv.toSimplified(segQuestion[i][0])) #get targetList oqlist = [] targetList=[] targetQuestionList=[] targetAnswerList=[] f = open('pause.txt', 'r') stopword = f.read() stopwordlist = stopword.split('\n') for i in range(0, len(fileDictionary)): tmp = fileDictionary[i]['question'] oq = oqfileDictionary[i]['question'] ttmp = fileDictionary[i]['answer'] for j in range(0, len(stopwordlist)): n = len(tmp) k = 0 for kk in range(0, n): if (k > n): break if (stopwordlist[j] in tmp): tmp.remove(stopwordlist[j]) k = k - 1 n = n - 1 k = k + 1 if (stopwordlist[j] in extractQuestion): extractQuestion.remove(stopwordlist[j]) oqlist.append(oq) targetList.append(tmp) targetAnswerList.append(ttmp) for i in range(0, len(targetList)): optmp = '' for j in range(0, len(oqlist[i])): optmp = optmp + oqlist[i][j] targetQuestionList.append(optmp) targetSnowNLP = SnowNLP(targetList) TargetSim = targetSnowNLP.sim(extractQuestion) if (max(TargetSim) > 5): score = max(TargetSim) text = '本次搜尋分數: ' + str(score) + '\n' + '\n' + '搜尋對應問題: \n' + targetQuestionList[TargetSim.index(max(TargetSim))] + '\n' + '\n' + '搜尋對應回答: \n' + targetAnswerList[TargetSim.index(max(TargetSim))] else: text = '本次搜尋分數: ' + str(max(TargetSim)) + '\n' + '\n' + '本問題不在資料庫中! 請重新輸入問題!' return text
# coding: utf-8 from snownlp import SnowNLP a = SnowNLP(u'墨头号毒枭逃亡期间密会zhong国老牌影帝') print(len(u'人民币对美元汇率中间价继续下跌10个基点(2014-12-23 10:23:06)_...')) b = a.sim(u'人社部要求停发美甲师职业资格证|美甲师|人社部_新浪财经_新浪网') print(b)
特别是其中的软件系统。因而它是计算机科学的一部分。 ''' s = SnowNLP(text) print(s.keywords(3)) # [u'语言', u'自然', u'计算机'] print(s.summary(5)) # [u'因而它是计算机科学的一部分', # u'自然语言处理是一门融语言学、计算机科学、数学于一体的科学', # u'自然语言处理是计算机科学领域与人工智能领域中的一个重要方向'] print(s.sentences) # 输出所有的句子 ################################################################## ## 处理 str list; tf-idf s = SnowNLP([[u'这篇', u'文章'], [u'那篇', u'论文'], [u'这个']]) print(s.tf) # [{'这篇': 1, '文章': 1}, {'那篇': 1, '论文': 1}, {'这个': 1}] print( s.idf ) # {'这篇': 0.5108256237659907, '文章': 0.5108256237659907, '那篇': 0.5108256237659907, '论文': 0.5108256237659907, '这个': 0.5108256237659907} print(s.sim([u'文章'])) # [0.4686473612532025, 0, 0] ################################################################## ## 实战 text = u"我今天很快乐。我今天很愤怒。" s = SnowNLP(text) print(s.sentiments) for sentence in s.sentences: print(sentence) # 没有标点 sent = SnowNLP(sentence) print(sent.keywords()) print(sent.sentiments) # 我今天很快乐 # 0.971889316039116 # 我今天很愤怒 # 0.07763913772213482 # 表达正面情感的概率
print(tags) print(s.sentences) # 断句 print(s.sentiments) # 情绪判断(1为正面情绪,0为负面情绪) print(s.pinyin) # 拼音 print(s.han) # 繁体转简体 print(s.keywords(limit=10)) # 关键词抽取 print(s.summary(limit=4)) # 概括总结文意 # 信息量衡量:TF-IDF(评价词对文本的重要性) s1 = SnowNLP([['性格', '善良'], ['善良', '温柔', '温柔'], ['温柔', '善良'], ['好人'], ['性格', '善良']]) print(s1.tf) print(s1.idf) print(s1.sim(['温柔'])) # 文本相似性 print(s1.sim(['善良'])) # 分析文件评论情绪 def get_stms(): p = [] with open('file1/jd_100.csv', 'r', encoding='gbk') as f: i = 0 for fline in f.readlines(): textjd = SnowNLP(fline) print(textjd.sentences, textjd.sentiments) p.append(textjd.sentiments) # i += 1 # if i > 10: