前言:21年广州荔湾区成了疫情灾区,很多人都没有工作,被居家隔离,感染病毒概率死亡率是0.005%,没有工作死亡率是100%,因此作为普通老百姓,自己开发了一个数据分析工具,叫yandas。
命名实体识别是NLP中一项非常基础的任务,是信息提取、问答系统、句法分析、机器翻译等众多NLP任务的重要基础工具。命名实体识别的准确度,决定了下游任务的效果,是NLP中的一个基础问题。在NER任务提供了两种解决方案,一类LSTM/GRU + CRF,通过RNN类的模型来抽取底层文本的信息,而CRF(条件随机场)模型来学习底层Token之间的联系;另外一类是通过预训练模型,例如ERNIE,BERT模型,直接来预测Token的标签信息。
本项目将演示如何使用java完成从快递单中抽取姓名、电话、省、市、区、详细地址等内容,形成结构化信息。辅助物流行业从业者进行有效信息的提取,从而降低客户填单的成本。
近年来随着深度学习的发展,模型参数的数量飞速增长。为了训练这些参数,需要更大的数据集来避免过拟合。然而,对于大部分NLP任务来说,构建大规模的标注数据集非常困难(成本过高),特别是对于句法和语义相关的任务。相比之下,大规模的未标注语料库的构建则相对容易。为了利用这些数据,我们可以先从其中学习到一个好的表示,再将这些表示应用到其他任务中。最近的研究表明,基于大规模未标注语料库的预训练模型(Pretrained Models, PTM) 在NLP任务上取得了很好的表现。
近年来,大量的研究表明基于大型语料库的预训练模型(Pretrained Models, PTM)可以学习通用的语言表示,有利于下游NLP任务,同时能够避免从零开始训练模型。随着计算能力的不断提高,深度模型的出现(即 Transformer)和训练技巧的增强使得 PTM 不断发展,由浅变深。
喻晓刚云南省楚雄彝族自治州南华县东街古城路37号18513386163
[0:2]=喻晓 nr 1
[3:6]=云南省 ns 10
[6:13]=楚雄彝族自治州 ns 10
[10:13]=自治州 ns 10
[14:16]=华县 ns 15
[喻晓刚/nr, 云南省/ns, 楚雄彝族自治州/ns, 南华/nz, 县/n, 东街/ns, 古城/n, 路/n, 37/m, 号/q, 18513386163/m, /w]
18513386163 喻晓刚 云南省楚雄彝族自治州南华县东街古城路37号 云南省 楚雄彝族自治州
13426338135寇铭哲黑龙江省七台河市桃山区风采路朝阳广场
[11:13]=寇铭 nr 1
[14:18]=黑龙江省 ns 10
[19:22]=台河市 ns 10
[27:29]=路朝 nr 1
[27:30]=路朝阳 nr 1
[14:16]=黑龙 nz 33
[22:24]=桃山 nz 1
[13426338135/m, 寇铭哲/nr, 黑龙江省/ns, 七台河/n, 市/n, 桃/n, 山区/n, 风采/n, 路朝阳/nr, 广场/n]
13426338135 寇铭哲 黑龙江省七台河市桃山区风采路朝阳广场 黑龙江省 黑龙江省
湖南省长沙市岳麓区银杉路31号绿地中央广场7栋21楼须平盛13601269538
[0:3]=湖南省 ns 10
[3:6]=长沙市 ns 10
[6:9]=岳麓区 ns 10
[9:11]=银杉 nr 1
[26:28]=须平 nr 1
[26:29]=须平盛 nr 1
[27:29]=平盛 nr 1
[6:8]=岳麓 nr 1
[湖南省/ns, 长沙市/ns, 岳麓区/ns, 银杉路/nr, 31/m, 号/q, 绿地/n, 中央/n, 广场/n, 7/m, 栋/q, 21/m, 楼/n, 须平盛/nr, 13601269538/m, /w]
13601269538 须平盛 湖南省长沙市岳麓区银杉路31号绿地中央广场7栋21楼 湖南省 长沙市 岳麓区
19880996524葛成重庆重庆市忠县忠县乐天支路13号附5号
[11:13]=葛成 nr 1
[15:18]=重庆市 ns 10
[19880996524/m, 葛成/nr, 重庆/ns, 重庆市/ns, 忠县/ns, 忠县/ns, 乐天/nr, 支路/n, 13/m, 号/q, 附/v, 5/m, 号/q]
19880996524 葛成 重庆重庆市忠县忠县乐天支路13号附5号 重庆 重庆市 忠县
吴松15811119126陕西省安康市旬阳县祝尔康大道35号
[0:2]=吴松 nr 1
[13:16]=陕西省 ns 10
[16:19]=安康市 ns 10
[22:25]=祝尔康 nr 1
[19:21]=旬阳 nz 18
[吴松/nr, 15811119126/m, 陕西省/ns, 安康市/ns, 旬阳县/ns, 祝尔康/nr, 大道/n, 35/m, 号/q]
15811119126 吴松 陕西省安康市旬阳县祝尔康大道35号 陕西省 安康市 旬阳县
台湾台南市东区东区崇德六街61号18600271358申屠天乐
[5:7]=东区 ns 10
[7:9]=东区 ns 10
[27:31]=申屠天乐 nr 1
[2:5]=台南市 ns 30
[9:11]=崇德 nz 27
[11:13]=六街 nz 2
[27:29]=申屠 n 1
[29:31]=天乐 nz 10
[台湾/ns, 台南市/ns, 东区/ns, 东区/ns, 崇德/nz, 六街/nz, 61/m, 号/q, 18600271358/m, 申屠天乐/nr]
18600271358 申屠天乐 台湾台南市东区东区崇德六街61号 台湾 台南市 东区
安徽省黄山市歙县印象徽州商业广场39号15201684651伏纲
[0:3]=安徽省 ns 10
[3:6]=黄山市 ns 10
[30:32]=伏纲 nr 1
[安徽省/ns, 黄山市/ns, 歙县/ns, 印象/n, 徽州/n, 商业/n, 广场/n, 39/m, 号/q, 15201684651/m, 伏纲/nr]
15201684651 伏纲 安徽省黄山市歙县印象徽州商业广场39号 安徽省 黄山市 歙县
河南省三门峡市渑池县会盟路体育场斜对面18518628819国晟普
[0:3]=河南省 ns 10
[4:7]=门峡市 ns 10
[30:33]=国晟普 nr 1
[10:12]=会盟 nz 22
[河南省/ns, 三门峡市/ns, 渑池县/ns, 会盟/nz, 路/n, 体育场/n, 斜对面/f, 18518628819/m, 国晟普/nr]
18518628819 国晟普 河南省三门峡市渑池县会盟路体育场斜对面 河南省 三门峡市 渑池县
酆洪羽18600272259广东省东莞市东城区东纵大道208号
[0:3]=酆洪羽 nr 1
[1:3]=洪羽 nr 1
[14:17]=广东省 ns 10
[17:20]=东莞市 ns 10
[20:23]=东城区 ns 10
[21:23]=城区 ns 10
[酆洪羽/nr, 18600272259/m, 广东省/ns, 东莞市/ns, 东城区/ns, 东纵/nr, 大道/n, 208/m, 号/q]
18600272259 酆洪羽 广东省东莞市东城区东纵大道208号 广东省 东莞市 东城区
云南省怒江傈僳族自治州贡山独龙族怒族自治县丙中洛乡卫生院禹华哲18514721447
[0:3]=云南省 ns 10
[3:11]=怒江傈僳族自治州 ns 10
[8:11]=自治州 ns 10
[18:21]=自治县 ns 10
[28:30]=禹华 nr 1
[29:31]=华哲 nr 1
[13:15]=独龙 nz 6
[14:16]=龙族 n 3
[云南省/ns, 怒江傈僳族自治州/ns, 贡山/ns, 独龙族/nz, 怒族/nz, 自治县/ns, 丙/mq, 中/f, 洛乡/nr, 卫生院/n, 禹华哲/nr, 18514721447/m]
Disconnected from the target VM, address: '127.0.0.1:51222', transport: 'socket'
18514721447 禹华哲 云南省怒江傈僳族自治州贡山独龙族怒族自治县丙中洛乡卫生院 云南省 怒江傈僳族自治州 贡山
Process finished with exit code 0
String phone = "",name="",address="",province="",city="",area="";
int n = 0;
//获取人名的数量
for(int x = 0 ; x < list1.size(); x++){
Term term = list1.get(x);
String termNature = term.nature.toString();
if(termNature.equals("nr")){
n++;
}
}
for(int j = 0 ; j < list1.size(); j++){
Term term = list1.get(j);
String termWord = term.word;
String termNature = term.nature.toString();
//获取手机信息
if(termNature.equals("m") && (termWord.length() == 11)){
phone = termWord;
}
//获取姓名信息
if(termNature.equals("nr") && (n == 1)){
name=termWord;
}
if(termNature.equals("nr") && (n > 1)){
Term term1 = list1.get(j+1);
if(term1.nature.toString().equals("m")){
name=termWord;
}
if ((j-1) < 0) continue;
Term term2 = list1.get(j-1);
if(term2.nature.toString().equals("m")){
name=termWord;
}
}
//获取地址信息
String add_ = str.replace(phone,"").replace(name,"");
address = add_;
List<Term> list2 = HanLP.segment(address);
for(int y= 0; y < list2.size();y++){
Term term2 = list2.get(y);
String termWord2 = term2.word;
String termNature2 = term2.nature.toString();
if(termNature2.equals("ns") && (y ==0)){
province = termWord2;
}
if(termNature2.equals("ns") && (y ==1)){
city = termWord2;
}
if(termNature2.equals("ns") && (y ==2)){
area = termWord2;
}
}
}
System.out.println(phone +" "+name+" "+address+" "+" "+province+" "+city+" "+area);
System.out.println("");