词典去重数据

来源:互联网 发布:知乎高考参考书 编辑:程序博客网 时间:2024/04/20 20:43

1:字符相似判断

     比如:  "百度公司"   "中国百度网络公司" 很明显这就是一条相同的数据,这样才能将他们合并

   a、 方法一
最简单的比较方法就是单字判断法:即把字符串拆成单字,计算相同的字在整个串中的比重。假设字符串1长度为m1,字符串2长度为m2,他们中有n个相同的字,那么他们的相似度是:
x=50%*(n/m1)+ 50%*(n/m2)

 实现代码如下:

/****
  * 比较两字符的相似度  最简单的比较方法就是单字判断法:即把字符串拆成单字,计算相同的字在整个串中的比重。假设字符串1长度为m1
     * 字符串2长度为m2,他们中有n个相同的字,那么他们的相似度是:x=50%*(n/m1)+ 50%*(n/m2)
  * @param fld_1
  * @param fld_2
  * @return double
  */
 public static double charsetEquals(String fld_1,String fld_2)
 {
  double fld_1_len = fld_1.length(), fld_2_len = fld_2.length();  //字段长度
  double nLen = charsetEqualsLen(fld_1,fld_2);
  double totalResult = (0.5*(nLen/fld_1_len)+ 0.5*(nLen/fld_2_len));
  return totalResult;
 }
 /****
  * 比较字符的相同个数
  * @param fld_1
  * @param fld_2
  * @return int
  */
 public static int charsetEqualsLen(String fld_1,String fld_2)
 {
  int countTotal = 0;
  char[] chars_fld_1 = fld_1.toCharArray();
  char[] chars_fld_2 = fld_2.toCharArray();
  for (int i = 0, Len = chars_fld_1.length; i < Len; i++) {
   String CnverkeString = chars_fld_1[i]+"";
   for (int j = 0, Lenj = chars_fld_2.length; j < Lenj; j++)
   {
    String CnverkeString0 = chars_fld_2[j]+"";
    if(CnverkeString.equals(CnverkeString0))
    {
     countTotal++;
    }
   }
  }
  return countTotal;
 }

public static void main(String[] args)
 {
  System.out.println("conform for.........."+charsetEquals("北京图行天下公司","北京图行天下有限公司"));
 }

 


用这个公式可以进行简单的相似度计算,但对下面这种类型的串就无能为力了:“物美大卖场分店(志新)物美大卖场分店(北太)”这个例子的得分是82%。但稍微考虑下就觉得这肯定是两个不同的对象,相似度应该很低。所以单字判断法有很大的局限性。从这个例子看出,判断两个串的相似,关键词很重要,有再多相同的修饰词,只要关键词不同,也不能认为相似。如果我们能去掉“大卖场”、“分店”这些常用修饰词,那就只剩下“物美志新”和“物美北太”,这样重新计算得分就变成了50%。

b、 方法二

本文为了形式化机构名的结构,便于计算机处理,把机构名的构成成分划分为如下几个关键词类:RegionName,Unknown,IndustryType,OrgType,用R,U,I,O来简称。RegionName是所属地名称,如“北京”,“上海”等;Unknown是固有名称,如“广州美的”中的“美的”,“四川长虹”中的“长虹”,IndustryType是行业性质,如“石化”,“银行”等;OrgType指的是组织形式,如“

公司”,“股份公司”,“大学”等。关键词类可以扩展,以解决更复杂的组织结构名或者其他领域的问题。

规则代号          规则       举例说明
Rule0   <R> <U> <I> <O>   北京斗牛士贸易公司
Rule1   <R> <I> <O>       中国移动有限公司
Rule2   <R> <I> <I> <O>    中国石油化工股份有限公司
Rule3   <U> <I> <O>       东风汽车股份有限公司
Rule4   <U> <O>          葛洲坝股份有限公司
Rule5   <U> <I> <R> <O>   海尔集团北京分公司
Rule6   <R> <I> <R> <U> <I> <O>  中国石化北京燕山石化有限公司
Rule7   <U> <I> <R> <I> <O>      中建国际北京装饰有限公司
Rule8   <R> <I> <R> <O>         中国银行北京分行
Rule9   <R> <I> <U> <I> <I> <O>  中国石化齐鲁石油化工有限公司
…… …… ……
匹配度计算根据各个部分匹配时,U部分最重要,该部分匹配上权值相对较高,用该方法计算出来的匹配度为:R * a1 + U * a2 + I * a3  + O * a4;  a1,a2,a3,a4分别为权值系数。该方法需要专用的词库:包括地理词库、行业词库、组织机构词库。

给一个字符串你,咱们才能知道他们是属于那个关键词,这就涉及到了 分词中的机械分词. 

建立几个自己需要的关键词库(文本 xml  数据库)