词典去重数据

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  数据库)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在机器翻译的数据处理中,我们通常需要将源语言和目标语言中出现的词汇构建成词典。这个过程通常涉及到对原始文本的分词、去重和统计词频等操作。 假设我们已经将源语言和目标语言的数据分别存储在两个列表 `src_sentences` 和 `tgt_sentences` 中,可以通过以下步骤将它们构建成词典: 1. 将源语言和目标语言的所有句子合并成两个长字符串,分别保存到 `src_text` 和 `tgt_text` 变量中。 ```python src_text = ' '.join(src_sentences) tgt_text = ' '.join(tgt_sentences) ``` 2. 对源语言和目标语言的文本进行分词,得到两个包含所有单词的列表 `src_words` 和 `tgt_words`。 ```python import jieba # 中文分词工具,需要安装 src_words = jieba.lcut(src_text) tgt_words = tgt_text.split() ``` 3. 对源语言和目标语言的单词列表进行去重,得到两个无重复单词的列表 `src_vocab` 和 `tgt_vocab`。 ```python src_vocab = list(set(src_words)) tgt_vocab = list(set(tgt_words)) ``` 4. 分别统计源语言和目标语言中每个单词出现的次数,得到两个字典 `src_word2count` 和 `tgt_word2count`,其中键为单词,值为出现的次数。 ```python src_word2count = {word: src_words.count(word) for word in src_vocab} tgt_word2count = {word: tgt_words.count(word) for word in tgt_vocab} ``` 5. 最后,将源语言和目标语言的词典以及它们之间的映射关系保存到文件中,以备后续使用。 ```python with open('src_vocab.txt', 'w', encoding='utf-8') as f: f.write('\n'.join(src_vocab)) with open('tgt_vocab.txt', 'w', encoding='utf-8') as f: f.write('\n'.join(tgt_vocab)) with open('src2tgt.txt', 'w', encoding='utf-8') as f: for src_word in src_vocab: f.write('{}\t{}\n'.format(src_word, tgt_vocab[src_vocab.index(src_word)])) ``` 注意,这里假设源语言和目标语言的词汇表是一一对应的。如果存在一些源语言单词在目标语言中没有对应的情况,可以将它们映射到一个特殊的单词(如 `<unk>`)上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值