菜单

依据内容的文书相似性总结注册免费送38元体验金

2019年3月18日 - 注册免费送38元体验金

http://yshjava.iteye.com/blog/1560661

缘何要总计文书档案相似性

      在当年新春的时候,作者起来尝试做文本的活动聚类,当时是从网上,找到的2个K-Means算法,稍作了改动。从测试结果来看,分类作用不太好,究其原因,笔者觉得有八个,一个是词库的难题,停用词词库太小,没有噪音词库,也尚未近义词词库,最首要的是切出来的词,总括的TFIDF权重不准
确,第三个原因则是一个钱打二拾陆个结某文书档案与对象项指标相似度的算法不够客观。第①个难题经过两日多的品尝,于明日消除了,剩下了首个难题,真是令人脑瓜疼。
当然笔者已打算放一阵子的,但就在前天Merry跟自家讲了她文本去重的原理和局地细节难点,让作者又再次燃起了梦想。同时本人也以为,计算文档相似度,不仅能够为去重提供首要遵照,稍后也足以在文书分类/聚类上奋发有为,于是,作者打算抽一小点年华,去尝尝一下。 

 

 

 

算法模型

 算法的模型,能够总结描述为:

一 、加载与即将分析的文书档案非亲非故的TFIDF词库、停用词库;
贰 、假如我们得到的是两篇符合规律的文书档案,首先切词,去除停用词;
③ 、抽取两篇文书档案中的公共词汇,总计它们的TFIDF权重和;
④ 、分别总括两篇文书档案的TFIDF权重,即每篇文书档案中颇具词汇的TFIDF和;
伍 、使用公共词汇的权重分别对两篇文书档案的权重求模,并盘算它们的乘积;
六 、乘积即为两篇文书档案的相似度;

 

算法的理论根据是,TFIDF权重越高的词,其在篇章中意味意义就越大,因而,尽管我们有着了三个标准的TFIDF词库,那么大家就能够在将小说分
词后,将其向量化,并加权后虚拟成三个面积,两篇文章公共的一些,也足以虚拟成2个面积值,遵照可能率论的概率分布理论,公共部分在七个面积中现身的概率的
乘积,即为二者的貌似程度。

 

 

算法代码

 

 

Java代码  注册免费送38元体验金 1

  1. /* 
  2.  * To change this template, choose Tools | Templates 
  3.  * and open the template in the editor. 
  4.  */  
  5. package cn.ysh.studio.text.cluster.main;  
  6.   
  7. import cn.ysh.studio.text.cluster.TFIDFHelper;  
  8. import cn.ysh.studio.text.cluster.core.Dictionary;  
  9. import cn.ysh.studio.text.cluster.core.Document;  
  10. import cn.ysh.studio.text.cluster.utils.FileHelper;  
  11. import java.io.File;  
  12. import java.io.FileNotFoundException;  
  13. import java.io.IOException;  
  14.   
  15. /** 
  16.  * 总括两篇文书档案的一般度 
  17.  * 
  18.  * @author 杨胜寒 
  19.  */  
  20. public class SimpleComputeSimilarity {  
  21.   
  22.     public static float repeatValue(Document doc1, Document doc2) {  
  23.         float keywordTFIDF = 0.0f;  
  24. 注册免费送38元体验金,        float doc1TFIDF = 0.0f;  
  25.         float doc2TFIDF = 0.0f;  
  26.         for (String word : doc1.getContentTerms().keySet()) {  
  27.             if (doc2.getContentTerms().containsKey(word)) {  
  28.                 keywordTFIDF += doc1.getContentTerms().get(word);  
  29.             }  
  30.             doc1TFIDF += doc1.getContentTerms().get(word);  
  31.         }  
  32.         for (String word : doc2.getContentTerms().keySet()) {  
  33.             doc2TFIDF += doc2.getContentTerms().get(word);  
  34.         }  
  35.         return (keywordTFIDF / doc1TFIDF) * (keywordTFIDF / doc2TFIDF);  
  36.     }  
  37.   
  38.     public static void main(String[] s) throws FileNotFoundException, IOException {  
  39. //        String docPath1 = “F:\\Workspaces\\NetBeansTest\\TextCluster\\txt\\常德空气质量差环境保护部门被批 环境保护局向市民道歉.txt”;  
  40. //        String docPath2 = “F:\\Workspaces\\NetBeansTest\\TextCluster\\txt\\德阳上和空中气质量差环境保护局公开道歉 细说原因对策.txt”;  
  41.         String docPath1 = “F:\\Workspaces\\NetBeansTest\\TextCluster\\txt\\英法媒体:美利坚联邦合众国一时对阿曼湾纠纷避而远之.txt”;  
  42.         String docPath2 = “F:\\Workspaces\\NetBeansTest\\TextCluster\\txt\\英媒:黄岩岛争端停止中夏族民共和国民代表大会捷 美只求自由中国通用航空公司.txt”;  
  43.         Document doc1 = FileHelper.loadDocument(new File(docPath1));  
  44.         Document doc2 = FileHelper.loadDocument(new File(docPath2));  
  45.         Dictionary.getInstance().loadDictionary(“F:\\Workspaces\\NetBeansTest\\TextCluster\\自由自在词典.dic”);  
  46.         Dictionary.getInstance().loadStopDictionary(“F:\\Workspaces\\NetBeansTest\\TextCluster\\txt\\stopwords.txt”);  
  47.         long start = System.currentTimeMillis();  
  48.         TFIDFHelper.tfidf(new Document[]{doc1, doc2});  
  49.         float repeatValue = SimpleComputeSimilarity.repeatValue(doc1, doc2);  
  50.         long end = System.currentTimeMillis();  
  51.         System.out.println(“相似值:” + repeatValue + “,用时[” + (end – start) + “]毫秒!”);  
  52.     }  
  53. }  

 

 

测试结果截图:

 

 

注册免费送38元体验金 2

 

 

测试中利用到两篇文档来自百度消息,在附属类小部件中有,感兴趣的同学能够看一下内容,然后评定上述结果是不是确切。

 

使用上述算法,对数据库中的18609篇信息资源音讯举行相似度总括,输出相似度大于0.5的音信的消息。截图如下:

 

 注册免费送38元体验金 3

 

注册免费送38元体验金 4

 

算法优劣

 


似度总结的算法极为简略,不过对借助的词典须要很高,算法中运用的”自由自在词典.dic”是作者的其余一个工具依照爬虫收集的雅量情报新闻抽取好计算出
来的,包罗了词汇及其TF、IDF权重值,意在为分析器提供贰在那之中立的、与被分析文书档案非亲非故的TF/IDF权重词库。附属类小部件中附带提供了一份小的词典样例,随
着分析工具分析情报音讯的数目标频频追加,词库也将不断扩充。

 

 

民用总括

 

即便日前来看,效果还足以,但是笔者以为还有以下多少个方面应该改良:
一 、扩充停用词库,扩张噪音词库,降低无用词汇的纷扰;
二 、扩展TFIDF词库,同时标注词性,小编以为新鲜词性的词汇在不一样场馆应该分外处理,如名词、动词和专用词汇在相似性总括中应当被加权;
叁 、扩大近义词库和转移词库(比如美方=U.S.A.,华盛顿=美利哥,东京(Tokyo)=中中原人民共和国,叙=叙尼斯等等),据自个儿预测,在大部分场面中,合并近义词、转换词能够增加总计结果的精确度;

好啊,就先计算这么多吗,希望能够进行试探,为大家提供一些思路。

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图