采用高级语言开发FPGA的探索

背景简介

 

近年来,由于人工智能和金融数据分析等计算密集型领域的日益兴起,异构计算越来越受到大家的重视。异构计算是指使用不同类型指令集和体系架构的计算单元组成系统的计算方式,目前主流的异构并行计算平台是X86+GPU(Graphics Processing Unit,图形处理器)和X86+FPGA(Field-Programmable Gate Array,现场可编程门阵列)。本文主要探索CPU协同FPGA的异构计算方式。

传统的FPGA开发方式是采用硬件描述语言Verilog/VHDL,开发难度高,为了在FPGA上实现类似CPU/GPU的开发运行体验, FPGA两大厂商Xilinx和Altera分别推出了各自的面向高级语言进行架构优化的编译器SDAccel和Altera SDK。本文中课题是在Xilinx的官方合作厂商Nimbix提供的云SDAccel环境下采用OpenCL(Open Computing Language,开放计算语言)开发实现的。

 

研究内容

 

本课题是在FPGA上采用OpenCL实现二叉树期权定价算法。

实现框架如下:

实验过程中发现,虽然OpenCL支持double pown(double,int),但是该函数在FPGA上计算结果与CPU上的计算结果有误差,当步数STEP=512时,FPGA的期权定价结果仅能与CPU计算结果保持三位有效数字的精度。因此,本次实验中二叉树的第STEP步的所有节点期货价格计算由CPU和FPGA共同完成。

开发环境如下:

研究成果

 

本次课题验证了二叉树期权定价算法中步数分别为32,64,128,256,512和1024时,CPU计算结果和FPGA软件仿真计算结果相同。由于硬件仿真和板级测试耗时很长,只验证步数为32,期货价格为406.3,期权执行价格为330,波动率为0.3705583,剩余到期日为22,利率为0.0531时,单个期权在FPGA上的计算结果为76.176249。

实验过程中发现,基于FPGA采用高级语言开发有如下优点:

1) Xilinx提供OpenCL开发库,调用简单;

2) 运行在FPGA上的Kernel函数,支持OpenCL开发,也支持C/C++开发,对于软件开发人员而言,学习成本很低;

3) SDAccel支持gdb调试,支持printf()打印调试(仅适用于基于OpenCL的kernel函数);

4) 将工作组大小设置为reqd_work_group_size(1, 1, 1),编写OpenCL kernel有C/C++的体验,可直接应用Xilinx提供的优化措施对kernel进行性能优化;

5) SDAccel的优势在于,屏蔽硬件底层驱动,让开发人员在FPGA上获得软件开发的体验,这也是SDAccel与Vivado HLS最大的区别,因为运行在FPGA上的kernel函数还是通过Vivado HLS进行编译的。

本文仅验证了采用高级语言开发FPGA的可行性,还有很多优化工作待完善,仅以此文为大家提供一个新的视角,为软件开发人员利用FPGA进行算法加速做前期调研,欢迎感兴趣的同事共同交流。

 

参考文献

 

1)ug1023-sdaccel-user-guide.pdf

2)ug1164-sdaccel-platform-development.pdf

3)ug1207-sdaccel-performance-optimization.pdf

4)ug1240-sdaccel-nimbix-getting-started.pdf

基于in-memory database cache技术的快速数据同步技术

前言

十五年内存数据库的历史,成熟稳定的产品。
TimesTen 源于1992年HP试验室,当时主要目的是针对电信网络应用,使用内存数据库技术进行一些深入研究,于1996年,由该团队核心人员成立独立运作公司,并在1996年发布TimesTen第一个商用版本(TimesTen2.0),2001年,产品中增加Cache Connect组件,以至产品可以和Oracle无缝集成,2005年由Oracle收购,到今天为止,该产品已经有15年历史,有多达11个主要的发布版本产生,全球已经有1500+的企业用户。
Cache Connect to Oracle 是In- Memory Database 的一个选项,它为位于应用程序层中的 Oracle 数据创建实时、可更新的高速缓存。它免除了后端系统的计算负担,并支持反应灵敏且可伸缩的实时应用程序。Cache Connect to Oracle 能够将 Oracle 数据的子集(可以选择您需要装载的表或者指定表的某些列)加载到 TimesTen 中,无需任何编码就能够实现双向数据同步更新,从而实现和Oracle无缝集成。

 

技术介绍

In-Memory Database Cache 使用“ 缓存组”的概念,来描述一组映射到 Oracle 数据库中的所有表或部分表的缓存表。缓存组可以包含这些表的所有或部分行和列。可以使用多个缓存组来缓存 Oracle 数据库中不同的相关表集合。在内存数据库 TimesTen 中管理内存缓存表的方式与管理普通的关系型数据库表类似。因此,Oracle In-Memory Database Cache 为应用程序提供了关系数据库的所有共性和功能、缓存和 Oracle 数据库的一致性透明维护以及内存数据库的实时性能。内存缓存表是持久保存且可恢复的。通过事务日志记录与数据库检查点相结合实现了磁盘的持久性。
大多数缓存产品都是只读的,因此只限于一组很少的功能。由于 In-Memory Database Cache 支持完全的 SQL 读/写操作,因此可以用于众多不同种类的应用程序。对 In-Memory Database Cache 中缓存表的更新可以同步或异步方式直写到 Oracle 数据库中,这取决于性能和一致性之间的折衷。 对于只读缓存组,Oracle 数据库的增量更新只能按照用户指定的时间间隔异步刷新到内存缓存中的缓存表。
对于缓存数据集不能预先确定的应用程序,其数据可以按需加载到内存缓存中。例如,呼叫中心应用程序在将呼叫路由至限定的呼叫代理时,可能选择加载呼叫方的当前结算单,而不是将所有客户的整套计费信息预先加载到内存缓存中。自动数据老化特性对动态数据加载进行了补充,可以将旧数据或最近最少使用的 (LRU) 数据从缓存中删除。数据老化使应用程序可以在保持内存中“热”数据可用的同时,为新数据释放空间。
n-Memory Database Cache 的设计为即使在 Oracle 数据库服务器或网络连接丢失的情况下也能继续运行。 系统可以跟踪向缓存表提交的事务,并在连接恢复时立即将其传送回 Oracle 数据库。 同样,系统还可以跟踪向 Oracle 数据库中的缓存表提交的事务,并在与 Oracle 数据库的连接重新建立时立即将其刷新到内存数据库 TimesTen。

对比测试

分析结果主要包括以下内容:
通过测试C++程序导入导出与n-Memory Database Cache 技术抽取效率进行对比。n-Memory Database Cache效率为C++程序的5~6倍。

DIY一个代码质量管理平台


这不是一篇技术文章,所以请不要把她当成技术文章来读。只是想表达一个开发人员对美好生活的憧憬。

01 背景

代码质量,衡量开发人员成果物的重要标准。那么,作为开发人员如何能交付高质量代码呢?不好意思,我也不知道正确答案。不过,我们代码要经过,”静态扫描、动态扫描、单元测试、集成测试、系统测试、性能测试……”,一系列的流程,我想这点大家应该是认同的。
我们再具体一点,一个开发人员从编码到交付集成测试至少需要经过,静态扫描、单元测试、动态扫描,并提供各阶段的成果物。各阶段成果物包括:静态检查结果、动态检查结果、单元测试代码、单元测试结果、单元测试覆盖率等等。
如此多的交付内容,是否有统一的规范、格式以及审核流程呢?根据各个项目具体要求这部分流程一定会有,但形式可能会有所不同,大多可能是以文本或表格的形式存在。但不管以哪种形式都不够直观(如果是直接看各种检查工具的命令行输出,我想一定会有头晕、眼花等不同程度的生理反应:(),我们总是期待我们世界会变得更加美好。
那么……,好吧……,让我们回到主题,《DIY一个代码质量管理平台》。

02 原材料

—— 君子生非异也,善假于物也。
人类社会的飞速发展主要仰仗于对已有资源、工具,经验的利用和改造,不断创造新的资源、新的工具并积累更多的宝贵经验,并把她们不断的传承下去。
所谓原材料本质上也是一系列的工具,把它们定位成原材料是因为要对它们的输出结果进行再加工。
开始动手前,让我们先了解一下原材料需要哪些,当然,所有的原材料都是免费的,所以不用太多考虑成本。
原材料清单如下:
静态检查(Cppcheck)
先看看市面上C/C静态检查的原材料都有哪些?PC-Lint/FlexeLint、Splint、Cppcheck。
1.PC-Lint/FlexeLint:功能很强大。但是是商用的,要钱。
2.Splint:不要钱,但只适用于C。
3.Cppcheck:不要钱,C可以用,而且可以和 jenkins集成,也可以和许多IDE进行集成(Eclipse,Codeblock,VS)。
·Cppcheck放进购物车`。
动态检查(valgrind)
动态检查材料选择起来就比较简单了,个人认为valgrind是功能最强大的,开源的动态检查工具,没有之一。有不同见解的小伙伴可以交流一下(其实我是想说,不服来辩)。
valgrind不是一个工具,它是一个工具集,包括以下工具包:
Callgrind:它主要用来检查程序中函数调用过程中出现的问题。
Cachegrind:它主要用来检查程序中缓存使用出现的问题。
Helgrind:它主要用来检查多线程程序中出现的竞争问题。
Massif:它主要用来检查程序中堆栈使用中出现的问题。
Extension:可以利用core提供的功能,自己编写特定的内存调试工具
valgrind添加到购物车。
PS. kachegrind这货不错,感兴趣的可以试试。
单元测试(cppunit)
选单元测试材料就有点郁闷了,我的首选是gtest,但由于要传承之前项目积累的成果,所以,退而求其次,cppunit进入了购物车,gtest暂时收藏。
本质上没有太大差别,但setup()/teardown(),选择性执行用例,包括打桩,gtest的优势还是比较明显的。
代码覆盖率(gcovr/lcov)
这个也没有必要多说,可选择的不多。我们主要是用lcov,没有别的原因,界面友好,几乎不需要做加工。
再推荐一个gcovr,是python写的C/C++的覆盖率统计工具,效果和lcov差不多,可以考虑用gcovr来代替lcov,原因是lcov对so的支持不好,恰巧,我们项目使用了大量的so。必要时更换原材料。
lcov加入购物车,gcovr添加收藏。

03 工具

—— 工欲善其事必先利其器。
原材料准备好了,找几个能加工这些材料的工具。这块不多说,工具太多,找几个顺手来用就可以了。
先选两瓶胶水(语言);shell,python
再来一个能放在口袋里的数据库:sqlite
找个盒子把我们作品装起来:Django/Beego
最后弄个漂亮点的包装:bootstrap,jQuery,jqplot

开始动手
东北有句话,“能动手的,就尽量少说话。”
我们的目标是用最短的时间,最简单的方法,实现一个实用的界面友好日常工具。
好吧……,尽量少说话!开工!!!

第一步 初加工
所谓初加工就是利用原材料自带的属性,通过参数,命令行选项得到我们想好的半成品。
导出cppcheck检查结果
cppcheck –enable=all –xml you_code_dir 2 > check.xml
以xml格式保存静态检查结果。
导出valgrind检查结果
valgrind –tool=memcheck –leak-check-full –xml=yes –xml-file=valgrind.xml
以xml格式保存动态检查结果。
导出单元测试结果
上面说了,cppunit没有gtest那么好用了。需要改代码才能输出我们想要的结果。
std::ofstream xmlFileOut(“unit.xml”);
CppUnit::XmlOutputter xmlOut(&result, xmlFileOut);
统计代码覆盖率
# 先要加两个编译选项
-fprofile-arcs -ftest-coverage

# 再链一个库
-lgcov
编译执行后导出结果,直接用lcov
lcov -c -o cov.info -d ${.gcno .gcda目录} -b ${源代码目录}

# 生成html
genhtml cov.info -o cov_html
至此,我们需要的静态扫描,动态扫描,单元测试,测试覆盖率的半成品结果都有了。
第二步 深加工
—— 言治骨角者,既切之而复磋之;治玉石者,既琢之而复磨之;治之已精,而益求其精也。
那么,我们对上面的半成品再切磋琢磨一番。
数据入库
个人习惯是把有规律的数据放到数据库里面,一是归类保存方便,二是用sql查找要比grep更实用。如果有相应的客户端,那么你还会有个友好的操作界面。
处了代码覆盖率是html,先不管它。其它都是xml。
拿出一瓶标签是python胶水,把xml粘到sqlite上。

很容易,去掉注释也就50~60行。这个是将cppcheck结果导入sqlite的代码。另外两个xml的导入,如法炮制。稍微调整一下表结构,分分钟就可以搞定。
但有人会问,为啥分开写呢?一个脚本把3个xml都读到sqlite不行吗?分开写,可以分开用。拿出来也是个单独的工具。
那么,问题来了,分开写调用的时候就需要调用3次,多麻烦!好吧,拿出另一瓶标签是shell的胶水。

粘上了,一个脚本搞定。
展示结果
把各种检查结果写到sqlite不是最终目的,要把它展示出来。
既简单又快的方式,B/S结构是首选。做这种小东西其实php是最佳选择,因为*“php是世界上最好的编程语言”*,-这个段子大家应该听过。用php的一个小问题就是部署稍稍有一点点麻烦(其实已经很简单了,但有更简单的,我们一定不用简单的,这个是大原则!),虽然httpd服务linux默认安装了,但还免不了一些配置。
好吧……,再见php!那用啥呢? Django,nodejs还是beego,部署简单,不需要服务器,你想要的脚手架功能它们都有。
我先选了了Django,必要时还可以把sqlite这层去掉,直接python解析xml然后展示,看上去不错!
说干就干。
pip install django -g
看似简单的命令,但在向内网迁移的时候……,一万头XXX在我胸口奔腾而过。 (XXX这玩意儿学名叫羊驼),各种包依赖,各种包版本问题,一个一个下载,一个一个手动安装。本来是一根网线加一条pip命令可以解决的问题,结果鼓捣了一个多小时。
好吧……,不带你玩了!有这时间都搞完了~~
稳妥点,不需要迁移,外网搞完了直接可以拿到内网用,妥妥的用Go,直接发布二进制可执行文件总行了吧。
说干就干。

 

代码覆盖率展示方面,lcov做了我们想要的一切,不做任何修改,直接拿来用。在Beego里面直接设置其静态目录为lcov导出html的文件夹目录。
beego.SetStaticPath(“/datas/cov_html”,”lcov”)

和Django,nodejs一样Beego做这上面的事情简单得令人发指。只需以下步骤:
写个router指定跳转的url与controler的关联
利用自带的orm,将表映射为Go的struct,并写一些简单的查询,完成model
通过controler调用model,处理数据,并在view中展示。
编写view,静态html加上template,将数据进行展示。
典型的MVC架构(这里不讲技术,况且我现在是个C++程序员)。
至此,数据展示部分完成。“太low了吧,这玩意儿用你做?弄个sqlite客户端就完了呗。”
好吧……,你说的对。但我们总是向往更加美好的世界……。
包装
上面工序完成后几乎和Excel没啥区别,那就让它更像一个工具吧。对它进行包装。
可能看到这大家会有个疑问,如果只是展示,那为什么要把数据存到sqlite里面,直接用xml一样可以实现web展示功能。没错,但我并不想只是单纯的展示,对这些数据指标进行分析是终极目标之一。
先来几个我们关心的指标吧:
静态检查问题数
静态检查问题分布情况
测试用例失败数
测试通过率
代码覆盖率
动态检查问题数
这些东西很容易搞定,因为有sql:)。
数据方面利用数据库能够很方便的进行统计分析。如果有新的指标要统计,只要sqlite里面有数据源,也是很容易实现的。
另一个层面的包装就是美工了,这个我不专业,但js还是略知一二。其实不知道也没关系,现成的东西一抓一大把,拿来就用,我们的原则是有现成的就对不去造轮子。
bootstrap,jqplot……,拿来就用。

 

至此,产品功能基本完成。
装箱
收工前还有一个重要的事情,装箱发布。前面一直在提“拿来就用”这个词,别人的东西我们拿来直接用,同样,我们的东西要让别人也能够方便的“拿去就用”。那么我们完成最后一道工序,装箱发布。
了解Beego的同学一定都知道Bee这个工具,她提供了一些非常方便的工具,其中一个就是打包。
在你的工程目录下执行
bee pack

她会打包生成一个压缩包,包括可执行文件、配置文件、静态文件和自定义文件/文件夹,解压后直接可以运行。
另外,bee bale命令可以将所有的静态文件变成一个变量申明文件,全部编译到二进制文件里面,用户发布的时候携带静态文件(该命令尚未正式发布)。
你会发现,世界真的是很美好,有如此多的工具可供我们是用,一条命令,分分钟搞定。
另外一件事就是写个一键脚本。看看脚本内容包括啥(这里不贴代码了,因为所有命令,上文已经提到,剩下的就是写上你的目录)?
静态检查,指定生成xml到指定目录
编译程序(确定把上面说的两个选项和lgcov库链上)
valgrind 执行测试用例,指定单元测试结果xml的目录,指定valgrind结果文件目录。
执行xml导入sqlite的脚本,指定sqlite输出目录。
执行ut_frame。
休息一下,泡杯茶。
打开浏览器,看看我们这次提交的质量吧。
至此,里程。
演进路线
v0.1 完成基本功能。
v0.2 兼容gcovr,以便支持对so覆盖率的统计。
v0.3 点击静态/动态检查问题记录,可以定位到源代码文件。
v0.5 支持更多的统计指标。
v0.7 支持多次检查的数据结果对比,分析质量提升项。
v1.0 目标是以插件形式接入ITAS系统(作为ITAS前期开发人员,再贡献一点余热)
谁用谁拿,随用随拿。

04
尾声

“更加美好的世界”是我们的向往。“拿来主义”是我们的原则。花几个小时会让你的世界变得更加美好。
最后以一段鲁迅先生的话作为结束吧,先生说:“总之,我们要拿来。我们要或使用,或存放,或毁灭。那么,主人是新主人,宅子也就会成为新宅子。然而首先要这人沉着,勇猛,有辨别,不自私。没有拿来的,人不能自成为新人,没有拿来的,文艺不能自成为新文艺”。

05
参考文献

1、《荀子·劝学》
2、《论语·卫灵公》
3、《拿来主义》

使用python实现nexus服务器特定依赖包每日检测更新

作者:玉树【林】风

转自:http://techlin.cn

欢迎转载,也请保留这段声明。

 

这段时间,公司希望将现有Maven仓库的依赖包进行整理。一些核心依赖包定期从中央仓库拉取最新版本到Nexus服务器。

基本思路如下。

1、Nexus自带中央仓库索引更新功能,可以将中央仓库的索引增量更新到本地。

2、建立一个核心依赖的对应表,将Nexus已存在的所有核心依赖的版本、groupId、artifactId维护起来。

3、定时将对应表与中央仓库索引进行比对,一旦发现有新的版本出现在中央仓库索引中,本地构建一个依赖此版本并指向Nexus代理服务器的pom.xml文件。

4、调用mvn compile命令从中央仓库拉取对应版本依赖。

 

开发过程如下。

第1步 配置Nexus索引更新

1.使用管理员账号登陆Nexus。

2.在左侧菜单中选择Repositories菜单。

3.按照下图顺序操作,Nexus就会每天定时从中央仓库增量更新索引。

第2步比较简单,写一段简单的python就能够实现,而且只需要运行一次即可。因此这部分内容就忽略过去吧。

文件的内容如下。

 

第3步是这个功能的核心。

1.首先我们需要将第2步的对应关系表导入。

这里的第8行至第13行是为了提升性能而做的操作。

2.然后解析关系表并在中央仓库索引中查找对应的依赖包,并进行版本比对。

爬取的步骤比较简单。

3.不存在的版本需要构建pom文件。

这里构建pom文件,我们用到了tenjin包。他可以帮助我们构建一套模板,而内容可以动态填充。

模板内容如下。

 

第4步 最后需要调用控制台运行mvn compile。

 

总结

python拥有众多的功能库和第三方库,使我们不必再过多关注于底层实现原理,重复造轮子。从而有更多的精力去做我们想做的事情。人的一生非常短暂,用有限的时间做更有意义的事。这就是python!

python自然语言分析SnowNLP库

作者:玉树【林】风

转自:http://techlin.cn

欢迎转载,也请保留这段声明。

 

SnowNLP是由国人开发的一款针对中文文本内容进行处理的python库。目前为止在python自然语言处理的大家族中,绝大都是针对英文解析而开发的类库。SnowNLP没有使用NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。

 

官方例子代码

训练代码

官网:https://pypi.python.org/pypi/snownlp/0.11.1

使用python爬虫爬取nexus服务器依赖包pom文件信息

作者:玉树【林】风

转自:http://techlin.cn

欢迎转载,也请保留这段声明。

 

今天领导要求将公司正在试用的Nexus代理服务器中依赖包进行整理并导出一份依赖版本信息列表。得到这个需求后,首先找了一下Nexus的文档,可惜没有找到相关导出信息的功能。于是决定写个爬虫来爬取nexus服务器依赖包pom文件的信息。

首先我们先来看一下Nexus服务器上我们能够获取的信息有哪些。上图中点击左侧菜单Repositories即可查看本地仓库。

下图中显示了Nexus服务器上的几个仓库,我们的主要依赖包在Central M1 shadow中。我们点击这条记录进行查看。

点击后操作台下方出现仓库依赖包路径。在每层目录的叶子节点可以查看我们需要的pom文件信息(如图红框标记位置)。这就是我们需要的内容。

我们打开chrome浏览器的开发者工具,点击Network。来看一下我们能够得到什么样的内容。

可以看到,当点击叶子节点后,会触发一次与Nexus服务器的Ajax交互。交互的请求类型为Get请求,Url请求路径为Restful风格。报文头中还包含了一个accept参数,表明前台接收类型为json。

总的来看,请求还是比较简单。剩下的工作就是如何获得所有请求的Url了。点击仓库后面的url,可以打开一个文件浏览器。

文件浏览器的结构与Ajax请求的Url很相似,深入到依赖包文件夹内部,我们看到pom内容是无法查看的。

好在我们我们可以利用一下这个文件的路径来转换成Ajax请求的Url路径。

首先,我们需要爬取Nexus文件浏览的站点地图,并且只保留pom文件的Url路径。

这段代码可以将文件目录中第一层的所有a标签找到,我们需要的地址在a标签的href属性中。对于目录节点,我们只进入下级而不需要返回到上级,而文件我们只采集pom后缀的文件。

遍历目录常规方法是采用迭代的调用方式。

这样我们就将Nexus文件浏览器中所有的pom文件路径输出出来了。

由于文件浏览器的Url和我们Ajax请求的Url有些不同,我们需要先修改Url再进行Ajax请求。

这里如果不设置header的accept属性,获得的响应为xml格式。获得响应后我们就能够读取pom文件信息了。

这里使用try…except…结构为了防止异常出现。

最后将文件整体导出为csv格式,就完成了整个爬取工作。

完整代码如下

舆情API调查3

之前的舆情模块调查方向主要是市场上比较成熟的、及数据采集和舆情功能展示为一体的,由行业先驱的公司开发的舆情系统。这些舆情系统有丰富的数据积累,并且和完善的功能体系。但是数据导出费用高昂,功能展现不能够定制。由于这些方面的不足,我们暂时放弃产品级的舆情系统,转而调查一些开放式的公共API。

 

1、玻森NLP http://bosonnlp.com

玻森中文语义开放平台专注于中文语义分析技术,拥有丰富的经验积累。自主研发千万级中文语料库,为精准和深度的中文语义分析提供坚实基础。

主要功能包括词性分析、情感分析、命名实体识别、典型意见、文本聚类、关键词提取、新闻分类、依存文法分析、语义联想、时间转换、新闻摘要。

可以说玻森中文语义开放平台是目前国内最强大的中文语义开放平台之一。并且该平台提供的文档非常清晰,很容易上手。

我也上手试用了一下,除了词性分析之外,其他功能都写着试用,暂时不清楚试用期多久。

总的来说收费还是可以接受的(个人观点)

2、Emokit http://www.emokit.com

Emokit是做情感分析的一个免费平台,不过针对的信息载体并不是文字,而是图片和语音。这个平台虽然和我们的舆情有些偏差,不过免费提供API必须要在这里提一嘴。Emokit平台主要应用的场景是分析人的情绪,例如客服的情绪、学生的情绪、消费者的情绪等等。

 

3、腾讯文智 https://console.qcloud.com/nlp/manage_app.cgi

腾讯文智中文语义开放平台是基于并行计算系统和分布式爬虫平台,结合独特的语义分析技术, 一站式满足用户NLP、转码、抽取、全网数据抓取等中文语义分析需求的开放平台,用户能够基于平台对外提供的OpenAPI实现搜索、推荐、舆情、挖掘等语义分析应用。

主要功能包括分词/命名实体识别、情感分析、主题分类、关键词提取、敏感信息识别、句法分析、同义词、纠错、转码。

试用提供5万次API调用。

试用过后可以包月或购买调用次数,费用如下。

功能略逊于玻森,不过收费会低一些。

 

 

舆情API调查2

今天主要针对期货行业第一频道的和讯网进行调查。

地址:http://yuqing.hexun.com/2013-05-09/153932174.html

和讯网提供的解决方案如下:

1、信息采集方面,和讯舆情建立了国内目前最大的期货业新闻数据库,每天24小时对期货业新闻与社区数据做全媒体监测,涵盖与期货业相关的传统媒体报道、网络媒体转载、网络社区帖子、微博实时讨论、券商研究报告、监管政策动态、期货业同业情报等多个领域。同时还提供国内最大的海外中文媒体及英文媒体监测库。对于有境外业务或者有海外资本控股的期货公司,可提供96家海外媒体中文新闻监测服务和2000多家全球英文媒体监测服务,还可根据需求,对所有的国外期货公司和交易所官网内容进行专门抓取,供期货商或交易所用于战略和情报研究。
2、期货细分行业动态监控。精选期货细分行业的重要新闻,如贵金属动态、农产品动态、金融产品动态、工业品动态等,每天2次编辑更新。
3、独家提供期货业公告库。拥有期货公司及交易所的全部历史公告,基础资本档案实时数据对接交易所,简洁导航页面筛选出了董秘日常办公所需的公告热词,同时提供检索功能,方便董秘和证代撰写和查询公告。
4、和讯的专业财经编辑每天在后台提供早晚班新闻编辑服务,实时监测甄选期货业重要舆情动态,实时为期货公司发送预警短信、预警邮件及舆情客户端的弹出式预警。

 

地址:http://yuqing.hexun.com

期货舆情信息展示分为以下几类:

1、周报

主要章节包括

舆情概要:一周内期货业最重要事件概述。

舆情要闻:一周内期货业前5的重要事件描述。

2、月报

主要章节包括

期货业舆情总体情况:交易所及期货公司舆情热度情况、舆情分布情况、重要事件概述。

交易所舆情:月度交易所舆情重要事件描述。

期货公司舆情:月度期货公司舆情重要事件描述。

3、年鉴

年鉴舆情报告主要是针对上市公司和基金业的重大事件描述。

舆情API调查1

最近针对舆情需求进行一些调研工作,主要了解了几家大公司的舆情系统的功能。

1、百度天算

地址:https://cloud.baidu.com/solution/opinion.html

百度天算的舆情功能主要针对政府机关、大型企业、传媒机构设计。提供了舆情相关服务、自然语言处理、数据订阅等功能。

针对政府机关主要提供智慧城市、应急管理、社会管理、信息惠民相关的舆情信息。

针对大型企业主要提供竞争分析、传播效果评估、口碑监测、危机公关相关的舆情信息。

针对传媒机构主要提供行业研究、客户洞察、市场研究、影响力分析相关的舆情信息。

百度对于舆情提供的主要服务包括情感分析、观点分析、事件脉络、趋势分析、相关性分析、地域识别、传播路径、舆情预警。

百度数据订阅覆盖全网超过8000万家网站,支持多种自定义数据源。

缺点是必须使用百度云服务才可以使用百度天算提供的。

2、新浪微舆情

地址:http://wyq.sina.com

其实新浪还提供一套新浪舆情功能,但是这个功能暂时不支持个人注册。

新浪微舆情没有主要针对的使用群体,而是采用用户自定义关键字来采集舆情信息。

新浪对于舆情提供的主要服务包括情感分析、敏感度分析、事件脉络、趋势分析、传播路径、地域识别、舆情预警。

新浪微舆情可以免费试用30天。购买后可以享受500字关键字采集、并且支持200次修改关键字。

缺点是不能永久免费使用,新浪微舆情提供的导出功能价格偏高。

3、腾讯WeTest舆情

地址:https://market.qcloud.com/products/139?productId=139

传说腾讯推出了WeTest舆情平台,但实际打开主页缺报500错误。宣传页里介绍了收藏百万网站的信息,合作伙伴全部是游戏公司。

地址

腾讯开放平台也推出了一款简单的舆情API,不过功能过于简单。

地址:http://wiki.open.qq.com/wiki/舆情监控能力

 

接下来的时间,还会针对一些专门的舆情平台进行调研。

2017-09-11 博客未来发展方向

最近公司在研发一款大数据分析平台,主要业务是针对一些行业规则进行监督管理,其中包含了很多有趣的方向。

之前的文章基本都是围绕着python基础功能进行讲解,就连作者自己都觉得写的有点枯燥乏味了。索性借着这次项目的机会,结合工作中的内容,一起来项目实战一下吧。

这次项目,我主要负责舆情信息方面的业务开发。主要的技术方向大概是爬虫和语义分析。

python的出现使得爬虫开发变得非常简单,作者使用python写过很多类型的爬虫小程序,包括静态表单信息爬取、站点地图绘制、滚动加载站点爬取、动态表单信息爬取等。在接下来的一段时间,我会带着大家去认识、了解、学习、掌握爬虫。

语义分析应当属于机器学习算法领域的一门技术。作者在过去也只是学习过相关的理论,这次有机会将其应用到实际工作中,也是一件非常开心的事情。

今天就啰嗦到这里,明天开始爬虫之旅!