经过hanlp中文分词库,能够对输入分词获得分词结果集,例如对“深圳市南山区软件产业基地”,会获得如下结果html
[深圳市/ns, 南山区/ns, 软件/n, 产业/n, 基地/n]
复制代码
天然其余输入也会有对应的分词结果集git
在针对地址识别这个需求下,因为地址文本的不规范,github
假如能够像看到阴天,就能预测下雨那样子,看到一个ns或者以关键词结尾的词,就提高地址的几率,看到“的、了、咱们、大家”等和地址基本不相关的词就下降地址的几率,根据不一样的词性加权平均,最后判断哪个结果。理论上会减小误判的可能性bash
想起大学里学的贝叶斯公式,正好能够用于上述场景。阮一峰的一篇文章贝叶斯推断及其互联网应用(一):定理简介已经做出了很好的介绍测试
假设网站
进而spa
根据贝叶斯公式,就能够计算出P(A|B)设计
计算出每一个词性的P(A|B)以后,再预测某个输入是否为地址时,就能够根据分词后的词性得出几率之和,取平均值再与阈值比较就能判断输入是否为地址code
由于先验几率的计算须要样本数据,而样本数据的质量会直接影响贝叶斯推断的效果,所以样本数据最好可以反映出真实的状况cdn
准备22000条真实地址数据
重新闻网站提取正文,按照","和“。”将文章切割成简单句,筛选一下长度,得出10000条负样本
从数据准备中就能够计算出P(A)的几率了:正样本条数/总样本条数
提取出全部出现的词性,对每个词性计算:出现该词性的样本条数/总样本条数
对每个词性,计算:出现该词性的样本条数/正样本条数
依据上述三个值以及贝叶斯公式,就能够得出:出现某个词性时,输入是地址的几率了
因为分词的局限性,有时以关键字(省|市|区|县|路|街|座|号|楼|栋|梯|室|巷|大道|花园|苑|幢|弄|单元|乡)结尾的词并不会识别成"ns"词性,而出现上述词时是地址的几率又会提高。
因而,人为地将符合上述特征的词的几率调整为:出现ns词性时,输入是地址的几率。
根据正负测试数据集的计算状况设置几率阈值,将误判率控制在1%之内