数据分词及相似度的比对

一、分词及相似度的比对
近期的工作内容涉及到了关于数据相似度比对的处理。现针对一些重点内容做以总结。
主要目的是根据本地库中的商家信息和从大众点评等网站抓取到的商家信息,找出不在本地库中包含的商家。现主要根据商家名称和商家地址两个属性来确定是否是同一个商家。因数据来源不同,所以商家名称和地址等信息在数据完整性、准确性、规范性等方面都存在误差。因此,需要将两组数据的商家名称和地址进行分词,划分为粒度较小的词,之后再按照相似度比对的算法进行处理。
1.分词
将两组数据中的商家名称和商家地址进行分词。分词工具我们采用开源的IKAnalyzer2012,将分词后的结果保存在一张数据表中,表的基本结构如下所示:

idbigint主键
item_idbigint对应项的ID
item_attrvarchar对应项的属性名称
item_valuevarchar对应项的分词结果
lengthint分词后的长度

对于IKAnalyzer2012的具体使用,可以参考其文档。
以下代码将sourceStr进行分词后返回一个分词列表。
   public List<String> segmentWord(String sourceStr) {
        List<String> returnList = new ArrayList();
        if (null != sourceStr) {
            StringReader reader = new StringReader(sourceStr);
            IKAnalyzer ss = new IKAnalyzer(true);
            TokenStream tokenStream = ss.tokenStream("", reader);

            try {
                while (tokenStream.incrementToken()) {
                    TermAttribute termAttribute = tokenStream.getAttribute(TermAttribute.class);
                    returnList.add(termAttribute.toString());
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return returnList;
    }

2.相似度比对
经过分词,原来的商家名称和地址就会被分为一系列粒度较小的词,之后将要比对的分词的列表依次循环,逐个做比对,判断分词后的结构是否匹配,可以根据匹配成功的词的个数和每个词的长度,设定合理的计分规则,计算出一个得分,最后取得分最高的便是相似程度较高的记录。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值