数学之路(3)-机器学习(3)-机器学习算法-余弦相似度(2)

来源:互联网 发布:sql主键和外键 编辑:程序博客网 时间:2024/06/04 15:43

从上一节可以看到,分词效果虽然不错,但是结果中仍有很多标点符号,也有一些词,比如说:应该、如果、所有等词这些词并不能代表文章的主题,我们不应把它们做为文本的特征项之一,而文本所有特征项组织一个向量,通过余弦相似度对文本类似性进行检测,所以要保证每个特征项有它的作用,这些无用的词称为停用词,我们建立一个停用词表文件,将里面所有的停用词读取后做为下一步对文本分词结果进行清理的依据

    f_stop = open('stopwords.txt')      try:          f_stop_text = f_stop.read( )      finally:          f_stop.close( )     f_stop_seg_list = jieba.cut(f_stop_text)

我们准备了4个文本文档 ,这4个文本均来源于新浪网新闻,所有权归新浪网所有

内容分别如下:

war1.txt:据英国《简氏防务周刊》网站8月2日报道,靠近上海的江南造船集团长兴岛造船厂内的一艘舰船分段,很可能是中国首艘本土建造的航母的一部分。外媒对于中国装备的猜测很大程度上只是一种参考意义,其信息来源也是良莠不齐。但对于很多网民来说,军用舰艇乃至航母的建造是十分神秘的。所谓的“分段”和航母建造又有着怎样的联系?  从古代到近代造船,安放龙骨一般是船舶开始建造的标志。由于龙骨是船、汽艇或是小舟最重要的承重结构,位于船的底部,因此在过去的造船业中,安放龙骨一般都是造船过程中非常重要的事件,意味着一艘新船建造的开始。建造者必须将龙骨钢板在船坞或船台中铺好并精确定位,这样才能够从底层船壳开始,一点一点完成整个造船过程。但从上世纪40年代开始现代造船业,包括军用舰艇的建造,已经采用模块式分段建造方法。而过去的所谓舰艇龙骨,也变成了龙骨分段。以美国为例,现在标志航母建设的开始,是从切割第一块钢板开始算起。美国在航母开建仪式中,会专门邀请航母命名者的亲属、配偶来,把这些人的签名都焊接在龙骨钢板上。然后再把有签名的钢板和其他钢板一起焊接成巨大的分段。以美国最新一艘“杰拉德福特”号航母为例,福特总统的女儿签名的钢板也就是50厘米见方的钢板。但这艘航母真正的第一个龙骨分段,是一块至少40米见方、重达数百吨的庞然大物。从技术上来说,这个分段属于航母底层建筑,也是航母建造的中心点。后来所有的其他分段,都是以此为中心向四周和上下延展开来的。有些专家将之称为“塔式建造法”。
war2.txt:中新网8月31日电 据“中央社”报道,美国国防部官员30日表示,第6艘军舰现已抵达地中海,该军舰部署地点靠近先前美国已派遣的5艘驱逐舰。这些驱逐舰的巡航导弹可以快速锁定叙利亚,发动“有限、精准”的攻击。  美国军方强调,“圣安东尼奥号”(USS San Antonio)为两栖战舰,任务与其他军舰不同,若对叙利亚发动军事行动,“圣安东尼奥”号舰上数百名陆战队员不会参与作战。  美军一名官员表示,先前就规划派遣“圣安东尼奥”号至地中海,不过官员认为,根据目前情势,将军舰部署在东地中海,靠近其他驱逐舰,是谨慎之举。  官员说:“‘圣安东尼奥’号留驻当地,是为以防万一。”  奥巴马政府30日公布4页长的情报报告,宣布美国“高度确信”叙利亚阿萨德政权上周在大马士革郊区使用了化学武器,导致超过1400人死亡,美国将惩罚阿萨德政权。  此前媒体援引五角大楼知情官员的话说,美国海军通常只在地中海部署3艘导弹驱逐舰,但鉴于高层正在考虑对叙利亚发动军事打击,军方下令其中两艘执行完任务的军舰暂不返航,令美军部署在地中海的导弹驱逐舰增至5艘。  同时,美军部署在海湾地区的航母增至两艘。其中执行完任务的“尼米兹”号航母暂不返航,留在印度洋待命,与已经抵达阿拉伯海换防的“杜鲁门”号航母一道驻守海湾地区。  根据国防部官员,以上这5艘驱逐舰各配备约至少36枚战斧巡航导弹,总数约为200枚。  目前奥巴马尚未对是否攻打叙利亚做出最终决定,不过白宫一名发言人厄内斯特(Josh Earnest)表示:“总统强烈认为,为了保护我们最重要的国家安全利益,他必须做出必要决定和采取必要行动,而我们都承认此项利益在目前情况下面临危险。”

mobile1.txt:中新网9月1日电(IT频道 姜莹)今日起,所有新入网、转入网用户必须在办理通信业务时登记真实用户信息,未登记的老用户在办理新套餐业务时将重新登记真实用户信息。工信部规定,如果运营商不配合登记,将被强制处以1万元以上3万元以下的罚款。  工信部“动真格”:运营商不登记就罚款  其实早在2010年,工信部就提出实行手机实名制的规定。但截止到今年3月,根据工信部统计,仍有约2.8亿的用户没有进行实名登记。由于部分用户担心隐私泄露不愿意登记,而书报亭、小卖部、网络上等社会代理商也存在不规范现象,致使有相当数量的预付费手机卡的老用户尚游离于实名制之外,手机实名制并未彻底落实。  手机不实名背后却有着巨大隐患。据工信部相关负责人介绍,一些不法分子利用未登记真实身份信息的电话传播淫秽电子信息、发送垃圾短信息、散布有害信息、实施诈骗等问题突出,影响了用户的合法权益,扰乱了社会秩序,甚至威胁国家安全。  至此,7月16日,工信部公布了《电话用户真实身份信息登记规定》(中华人民共和国工业和信息化部令第25号)。《规定》要求,电信业务经营者为用户办理入网手续时,应当要求用户或委托人出示相应有效证件、提供真实身份信息;用户拒绝出示有效证件,拒绝提供其证件上所记载的身份信息,冒用他人的证件,或者使用伪造、变造的证件的,电信业务经营者不得为其办理入网手续。  不仅将手机实名制升级为电话实名制,《规定》还首次提出对不实施、不配合的电信经营者进行行政处罚的说法。《规定》要求,电信运营商要主动实施新用户入网实名登记,并每年组织一次对电话实名制实施的自我检查,不配合电信管理机构检查的,将处一万元以上三万元以下罚款。如此“强硬”姿态,无疑为此次实施实名制的效果提供了有力的保障。

mobile2.txt:电信流量可转存下月的消息昨日流传于互联网上,中国电信(50.55, -0.63, -1.23%)广州公司被认为在三大运营商中率先实现“流量转存”。此前,很多3G用户都有一种呼声,就是当月流量倘若用不完的话,希望可以留到下个月再用,甚至在不久前,长沙消费者还因对流量不能转存不满,将移动运营商告上法庭。不过,广州电信有关负责人昨日对本报记者表示,目前,这是中国电信广州分公司针对3G用户的促销活动,不涉及资费政策调整和业务规则改变。  本月,长沙消费者刘某认为,自己购买的每月150M的手机流量,若当月没有用完,下月就会被服务商清零的情况太不公平,并因此诉诸法律。记者发现,持同样意见的消费者不乏少数,  广州电信是否率先在全国实现“流量转存”呢?记者随后进行了验证,按该促销活动规则,参加“流量捐赠”促销活动,就能实现“闲置流量”的利用,比如当月使用300M手机流量,即可获得300M省内额外流量(分两个月赠送,每月150M省内流量,赠送流量当月有效),用户可选择在下月和下下月赠送给自己或朋友(类似于“买一送一”,但不能累积)。  这种做法意味着用户富余的“包月流量”间接实现了转存。但是,广州电信相关负责人表示:“这是一种赠送,不是转存,也不能累积”。  记者发现,该促销活动有不少限制条件,未来有没有可能放开限制,直接让用户享受包月流量自动转存呢?广州电信表示,活动只在今年内有效,但会根据促销情况,继续进行活动优化和升级。

我们以这4个文本中的任一个文本做为样本,计算另2个文本与它的相似度,相似度以什么为标准呢,就是前面说的将文本中的所有词映射为n维空间中的一个向量,计算这2个向量内积空间的夹角的余弦值来度量它们之间的相似性。1表示它们的指向是完全相同的,0通常表示它们之间是独立的,而在这之间的值则表示中度的相似性或相异性

部分python代码如下:

   #读取待测试文本    mytest1_words=copy.deepcopy(test_words)    for  myword in ftest1_seg_list:        print ".",        if not(myword.strip() in f_stop_seg_list):            if mytest1_words.has_key(myword):                mytest1_words[myword]+=1        mytest2_words=copy.deepcopy(test_words)    for  myword in ftest2_seg_list:        print ".",        if not(myword.strip() in f_stop_seg_list):            if mytest2_words.has_key(myword):                mytest2_words[myword]+=1                    #计算样本与待测试文本的余弦相似度    sampdata=[]    test1data=[]    test2data=[]    for key in all_words.keys():        sampdata.append(all_words[key])        test1data.append(mytest1_words[key])        test2data.append(mytest2_words[key])    test1simi=get_cossimi(sampdata,test1data)    test2simi=get_cossimi(sampdata,test2data)        print "\nhttp://blog.csdn.net/myhaspl"       print u"%s与样本[%s]的余弦相似度:%f"%(ftest1fn,sampfn,test1simi)    print u"%s与样本[%s]的余弦相似度:%f"%(ftest2fn,sampfn,test2simi)                           


运行结果如下:

>>> runfile(r'I:\book_prog\text_fl.py', wdir=r'I:\book_prog')
http://blog.csdn.net/myhaspl
myhaspl@qq.com


loading  ...
working . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
http://blog.csdn.net/myhaspl
mobile2.txt与样本[war2.txt]的余弦相似度:0.160806
war1.txt与样本[war2.txt]的余弦相似度:0.264215
>>> 

余弦相似度越大,说明越相似,从上面结果可以看出war1与war2更相似,事实也是如此,2个文本都关于军事题材的


原创粉丝点击