要提取文本中的国家名,我的思路是:

1. 先分词,提取出地区名

2. 将国家名通过外部文件的形式读入HASHSET

3. 对第1步中提取的地区名到2中的HASESET进行查询,如果有,则返回

当UDF需要读取外部文件时,一种方法是在注册函数时用add file 先将文件上传,但这条路我尝试之后没有走通; 第二种方法就是把外部文件先上传到HDFS的一个路径上,再在UDF逻辑中直接读取HDFS上的文件,该方法尝试通过了。源代码记录如下:

import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.seg.Segment;
import com.hankcs.hanlp.seg.common.Term;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;import java.io.*;
import java.util.HashSet;
import java.util.List;
import java.util.regex.Pattern;public class extractCountryName extends UDF {public Text evaluate(Text inputStr){if(inputStr == null) return null;Text result = new Text();HashSet<String> names = new HashSet<String>();try{
//            从集群HDFS上读国家列表文件FileSystem fs = FileSystem.get(new Configuration());FSDataInputStream in = fs.open(new Path("你的集群路径/country_list.txt"));BufferedReader br = new BufferedReader(new InputStreamReader(in));String line;while((line = br.readLine()) != null){names.add(line);}br.close();}catch (IOException e){e.printStackTrace();}Segment segment = HanLP.newSegment().enablePlaceRecognize(true);List<Term> termList = segment.seg(inputStr.toString());
//        注意可能会匹配到多个国家名StringBuilder matchNames = new StringBuilder();for(Term t: termList){if(Pattern.matches(".*/ns$",t.toString())){String matchStr = t.toString().replace("/ns","");if(names.contains(matchStr)){matchNames.append(matchStr);matchNames.append(" ");}}}result.set(matchNames.toString());return result;}public  static void main(String[] args){String inputStr = "测试中国日本";HashSet<String> names = new HashSet<String>();try{FileReader is = new FileReader("本地文件路径/country_list.txt");BufferedReader br = new BufferedReader(is);String line;while((line = br.readLine()) != null){names.add(line);}is.close();}catch (IOException e){e.printStackTrace();}Segment segment = HanLP.newSegment().enablePlaceRecognize(true);List<Term> termList = segment.seg(inputStr);
//        注意可能会匹配到多个国家名StringBuilder matchNames = new StringBuilder();for(Term t: termList){if(Pattern.matches(".*/ns$",t.toString())){String matchStr = t.toString().replace("/ns","");if(names.contains(matchStr)){matchNames.append(matchStr);matchNames.append(" ");}}}System.out.println(matchNames);}}

hive UDF 提取文本中的国家名相关推荐

  1. shell 批量提取文本中字符

    shell 批量提取文本中字符 利用awk提取文本中的字符串,亲测有效 1.创建txt文件的方法 (1)利用vim编辑 vi系列编辑器有两种分别是vi 和vim ,建议使用vim ,vim编辑器更方便 ...

  2. SparkSQL 自定义UDF提取json中的字段

    数据格式:      自定义UDF提取json中的字段 95002|{"name":"刘能","url":"www.runoob. ...

  3. Excel VBA: 提取文本中的数字

    在处理Excel表格时,经常会碰到文字中掺杂数字而且需要对这些数字进行处理的情况.写一个简单的VBA函数,即可轻松提取文本中的数字. 先看效果: 再上代码: Function GetNum&( ...

  4. 提取文本中的汉字字符串

    java 编程点滴 提取文本中的汉字字符串 提取文本中的汉字字符串 代码中含有中文字符,希望将代码中的中文字符提取出来,输出到数据库表格,然后补充对应的英文翻译. 继续处理代码,将文中的中文字符,通过 ...

  5. C#正则表达式提取文本中以逗号间隔的数据

    使用正则表达式提取文本数据到内存是很方便的技术,下面通过一个例子介绍一下如何使用正则表达式提取文本 文本中内容格式 1,2,3,4,5 2,2,2,2,2 3,3,3,3,3 C#代码如下 publi ...

  6. python提取文本中的字符串到新的txt_Python实现jieba对文本分词并写入新的文本文件,然后提取出文本中的关键词...

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. Python实现jieba对文本分词并写入新的文本文件,然后提取出文本中的关键词思想 先对文本进行 ...

  7. Python使用正则表达式提取文本中ABAC和AABB形式的成语

    问题描述:编写程序,使用正则表达式从一段文本中提取所有ABAC和AABB形式的四字成语,例如我行我素.无忧无虑.一生一世.高高兴兴. 技术要点:正则表达式中子模式编号.在正则表达式中,使用圆括号表示子 ...

  8. 提取文本中的金额,提取货币,Python实现与在线使用

    给定一篇文本,提取出文本中涉及到的所有的货币和金额.例如: '张三赔偿李四人民币车费601,293.11元,工厂费一万二千三百四十五元,利息9佰日元,打印费十块钱.' 从中提取出 '601,293.1 ...

  9. 使用Excel 提取文本中的数字

    目标:提取A列单元格中的年份放入目标位置 因为数据量比较大,而且有些国家和年份之间没有分隔符号,所以我的方法是先提取数字,然后插入年份过渡符号"-". 提取数字 提取A2单元格数字 ...

最新文章

  1. final关键字细节
  2. shardingsphere启动的时候报错Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required
  3. 学习笔记--------分布式事务产生的场景
  4. 深入探究ASP.NET Core异常处理中间件
  5. 邮箱通知php,PHPMailer 发送邮件(含详细介绍及使用方法说明)
  6. linux+apache+mysql+php
  7. dictionary在python中什么意思_Python 字典(Dictionary)操作详解
  8. http://longshuai2007.blog.163.com/blog/static/1420
  9. sqoop job入门 与sqoop增量导入
  10. 企业计算机仿真技术应用,基于计算机仿真技术的企业生产物流系统优化研究
  11. 防火墙转发流量的原理
  12. 配对算法(Gale-Shapley)实现
  13. 论文写作:如何写论文
  14. 东北旅行第一天流水账
  15. 2022软件测试校招笔试题-软件测试基本理论
  16. python 词云生成
  17. mybatis 标准输出日志报错: The setting logImpl is not known. Make sure you spelled it correctly (case sensit
  18. 家用计算机cpu,家用电脑低功耗CPU推荐
  19. 人工智能框架实战精讲:Keras项目-英文语料的DNN、Word2Vec、CNN、LSTM文本分类实战与调参优化
  20. Xilinx 的FFT IP核使用方法(配置为FFT 、IFFT两种模式)

热门文章

  1. cad渐开线画法lisp程序_CAD插件——绘制圆的渐开线
  2. Python实现天猫精灵OAuth2.0和语音技能配置
  3. 计算机应用基础windows xp操作系统课件,计算机应用基础教学课件作者曹淑艳 第3章 Windows XP 操作系统.ppt...
  4. 关于“泛仪器接口-网络接口”的讨论
  5. 做微信开发 “人脉圈的” 总结
  6. 云南大学信息学院c语言实验七,云南大学软件学院C语言所有实验代码.docx
  7. Hadoop大数据处理流程
  8. 关于LED电视机视频编码H.264,MPEG4,MPEG2能支持哪些格式的视频文件
  9. $.ajax #fm,【图片】95范加尔Ajax的荣光,95Ajax战术在FM的复刻。战术以及思想讨论【fm2017吧】_百度贴吧...
  10. vivo手机连接到电脑