Author: haoransun
Wechat: SHR—97
1 判断一个点是否在不规则多边形内部
用途:
用于判断企业是否落在指定区域内
以一个点做射线,计算它与多边形边界的交点个数
奇数个:在多边形内部
偶数个:在多边形外部
推论:
如果点在多边形内部,射线第一次穿越边界一定是穿出多边形。
如果点在多边形外部,射线第一次穿越边界一定是进入多边形。
当射线穿越多边形边界的次数为偶数时,所有第偶数次(包括最后一次)穿越都是穿出,
因此所有第奇数次(包括第一次)穿越为穿入,由此可推断点在多边形外部。
当射线穿越多边形边界的次数为奇数时,所有第奇数次(包括第一次和最后一次)穿越都是穿出
由此可推断点在多边形内部。
判断难点:
点在多边形边上: 点在线上,计算点与两个多边形顶点的连线斜率是否相等。
点和多边形的顶点重合: 比较坐标。
射线经过多边形顶点: 射线经过的点都属于射线以上的一侧
射线经过多边形的一条边: 射线连续经过多边形的两个相邻顶点。
需要客户提前给出待落区域的经纬度。
射线法: (java)
代码位置:com.aliyun.fin.rebengine.manager.job.task.AnalysisRegionOfEntDataTask
1 | /** |
/**
方法2 判断某一个点(经纬度)是否在一个多边形内 点在线内、线外、线上、面内、面外 来进行多层判断
@param longitude
@param latitude
@param points
@return
/
1 | public boolean judgeDom2(Double longitude,Double latitude,List<AreaPoint> points) { |
2 聚类经纬度
聚类经纬度数据(全景洞察-全景概览 五角星、实心圆)
从reb_ent_location中取出经纬度、企业信息等数据。
企业经纬度各分10等份(汇总各个区域的最大最小值)。
分别统计出 企业经纬度的最大最小值。
等分公式:对经纬度的 最大最小值分别计算
Quadrant: (minLongitude,minLatitude)—à (maxLongitude,maxLatitude)
在逻辑上勾画出一个象限经纬系。
勾画出10等份区域:[(max-min)/10]*i+min i: 0-10
投射每一个企业对应的经纬度落在所画区域上
min + |(当前企业经度-min)/(max-min)/10|(max-min)/10
min + |(当前企业维度-min)/(max-min)/10)|(max-min)/10
| | :是对其中的数据向下取整
返回100个左右的点,每一个点所对应的坐标是它周围点的坐标均值。
即:每一个点都可以想象成是一个 “黑洞”,吸收它附近的相近点
页面上:每一个点 都有它所对应的企业列表集合。
代码位置:com.aliyun.fin.rebengine.manager.job.task.ClusterEntLocationDataTask
3 NLP分词。文章相似度
NLP分词、政策相似度判断
(依托于 hanlp jar包,具体用法靠参考官网 https://github.com/hankcs/HanLP)
A:政策关键词 + 政策重合度(onecompany提供政策数据)
B:热词云 + 舆情数据[公司品牌+企业高管…](onecompany提供舆情数据)
C:自建停分词词典(需要积累)+ 客户自定义词词典。
D:舆情数据需要进行:公司品牌+企业高管+产品品质+服务质量+其他风险 的 摘选。
舆情分词分模块难点:
停分词词典需要积累数据,每天都会有新的舆情数据进来,会有新的热词产生,同时也需要追加新的停分词到词典中。(目前是每次对新舆情数据分词,人工过滤掉无意义词)
如何分辨当条舆情数据是当前所属公司的哪一类的舆情:(高管、品牌、产品、质量)(产品品质与服务质量没有明显的区分度)
特征词数据表:
reb_data_db-àpublic_custom (舆情分类特征词样本太少,目标区分度不明显)
读取舆情正文+标题,只要正文中出现特征词,就将当前舆情分类。
政策相似度判断:(即:政策分词后的词列表A 与 词列表B 相似度分值)
相似度算法位置: com.aliyun.fin.rebengine.nlp.util.algorithm
两两地区的政策进行相似度判断。需要自己进行阈值的调参。
4 文章分类
政策分类、扶持对象
临港项目: onecompany 对政策进行分类+扶持对象的判别。
非临港项目:可能需要自己训练一个政策分类器。此处写自己的思路:
利用分布式爬虫框架 从网上抓取各省市县以往的各项政策,需要抓取的内容包含:
政策标题+政策正文+该项政策的分类(金融、农业、工业..等)+政策扶持对象。
利用已有的这些数据 “喂养” 自己的 分类器,(我个人觉得这不是一个线性问题,不是二分逻辑[0/1的问题],是一个多分类问题,可能需要算法同学在隐藏层的激活函数设置的极好。[说的话都会说,关键在实现] )
训练好分类器之后,就可以对现有的政策进行判别。
或者像 舆情分模块一样:生硬的将政策分类的特征词、政策扶持对象的特征词提取到表中:只要待判别的政策正文中出现了这些特征词,就给当前政策打上分类标记、扶持对象标记。
5 Python脚本(参考)
python脚本(只是用来作为参考)
1 |
|
6 SQL语句-拼接SQL
1 | select TABLE_NAME, |
7 MySql导出表结构
1 | SELECT |
8 多数据源(只是用来作为参考)
1 |
|
1 | spring: |
9 JWTUtil(只是用来作为参考)
1 | public class JwtUtil { |
10 JWTFilterConfig(只是用来作为参考)
1 | @SuppressWarnings("all") |
11 Login(只是用来作为参考)
1 | @RequestMapping("user") |
12 Pom配置(只是用来作为参考)
1 | <?xml version="1.0" encoding="UTF-8"?> |