短信关键字过滤算法都有哪些?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了短信关键字过滤算法都有哪些?相关的知识,希望对你有一定的参考价值。
最好是适合ASP的代码
首先要解决的是关键字库问题,我们这里指的不是如何去收集这些关键字,而是假设关键字库已经存在,我们如何存放这些关键字的问题,给我们的选择不多,要么是hash表,要么是二叉树,其他数据结构要么不便于维护要么搜索复杂度太高,这里我们用C++语言来实现,首先来定义一个管理关键字库的类class CKeyWordManager
public:
// load 关键字到内存
bool load ();
// 查找data中有没有包含指定的关键字
bool find (const string & data);
private:
set <string> m_keyWordList;
int m_keyWordMaxLength; //最长关键字的长度
;
我们用一个set来存放所有的关键字列表,set是一种红黑树,是一种高效的搜索二叉树,当然这里也可以使用hash_set来实现
这程序的关键是在于find方法,data内容可能很大,而且可能调用频率很高,我们有必要采用一种高效的方法来实现这一功能,基本思路是这样的:首先从data的0字符查找,检查第0个字符有没有在m_keyWordList中出现,如果有,返回真,如果没有,继续检查第0个和第1个字符有没有在m_keyWordList中出现过,……一直检查到0~n(n=m_keyWordMaxLength)数据,请看源码:
bool CKeyWordManager::find(const std::string &key)
for (int n = 0; n < key.length (); ++n)
for (int i = 1; i < m_keyWordMaxLength && i + n < key.length (); ++i)
set <string>::iterator it = m_keWordList.find (key.substr (n, i));
if (it != m_keyWordList.end ())
return true;
return false;
在这个解决方案中,如果m_keyWordList中的key大小分布比较小的话效率会很好,但是如果m_keyWordMaxLength非常大,那这种算法的效率也非常低,关于m_keyWordMaxLength特别大的情况(一般超过了20)的解决方式
这是我自己找的,呵呵.大概就这样吧?看看吧? 参考技术A bool CKeyWordManager::find(const std::string &key) for (int n = 0; n < key.length (); ++n) for (int i = 1; i < m_keyWordMaxLength && i + n < key.length (); ++i) set <string>::iterator it = m_keWordList.find (key.substr (n, i)); if (it != m_keyWordList.end ()) return true; return false;
常见的场景分类算法都有哪些
参考技术A 【嵌牛导读】:本文主要介绍一些常见的基于深度学习的场景分类【嵌牛鼻子】:深度学习,场景分类
【嵌牛提问】:基于深度学习的常见分类算法有哪些?
【嵌牛正文】:
目前出现的相对流行的场景分类方法主要有以下三类:
这种分类方法以对象为识别单位,根据场景中出现的特定对象来区分不同的场景;
基于视觉的场景分类方法大部分都是以对象为单位的,也就是说,通过识别一些有
代表性的对象来确定自然界的位置。典型的基于对象的场景分类方法有以下的中间步骤:
特征提取、重组和对象识别。
缺点:底层的错误会随着处理的深入而被放大。例如,上位层中小对象的识别往往会受到下属层
相机传感器的原始噪声或者光照变化条件的影响。尤其是在宽敞的环境下,目标往往会非常分散,
这种方法的应用也受到了限制。需要指出的是,该方法需要选择特定环境中的一些固定对
象,一般使用深度网络提取对象特征,并进行分类。
除了传统的卷积层、pooling层、全连接层。AlexNet加入了
(1)非线性激活函数:ReLU;
(2)防止过拟合的方法:Dropout,Dataaugmentation。同时,使用多个GPU,LRN归一化层。
不同于AlexNet的地方是:VGG-Net使用更多的层,通常有16-19层,而AlexNet只有8层。
同时,VGG-Net的所有 convolutional layer 使用同样大小的 convolutional filter,大小为 3 x 3。
提出的Inception结构是主要的创新点,这是(Network In Network)的结构,即原来的结点也是一个网络。
在单层卷积层上使用不同尺度的卷积核就可以提取不同尺寸的特征,单层的特征提取能力增强了。其使用之后整个网络结构的宽度和深度都可扩大,能够带来2-3倍的性能提升。
ResNet引入了残差网络结构(residual network),通过在输出与输入之间引入一个shortcut connection,而不是简单的堆叠网络,这样可以解决网络由于很深出现梯度消失的问题,从而可可以把网络做的很深。这种方法目前也是业界最高水准了。
首先通过目标候选候选区域选择算法,生成一系列候选目标区域,
然后通过深度神经网络提取候选目标区域特征,并用这些特征进行分类。
技术路线:selective search + CNN + SVMs
算法:Fast-R-CNN
步骤:输入一幅图像和Selective Search方法生成的一系列Proposals,通过一系列卷积层
和Pooling层生成feature map,然后用RoI(region ofineterst)层处理最后一个卷积层
得到的feature map为每一个proposal生成一个定长的特征向量roi_pool5。
RoI层的输出roi_pool5接着输入到全连接层, 产生最终用于多任务学习的特征并用于
计算多任务Loss。
全连接输出包括两个分支:
1.SoftMax Loss:计算K+1类的分类Loss函数,其中K表示K个目标类别。
2.RegressionLoss:即K+1的分类结果相应的Proposal的Bounding Box四个角点坐标值。
最终将所有结果通过非极大抑制处理产生最终的目标检测和识别结果。
Faster-R-CNN算法由两大模块组成:1.PRN候选框提取模块 2.Fast R-CNN检测模块。
其中,RPN是全卷积神经网络,通过共享卷积层特征可以实现proposal的提取;
FastR-CNN基于RPN提取的proposal检测并识别proposal中的目标。
这类方法不同于前面两种算法,而将场景图像看作全局对象而非图像中的某一对象或细节,
这样可以降低局部噪声对场景分类的影响。
将输入图片作为一个特征,并提取可以概括图像统计或语义的低维特征。该类方法的目的
即为提高场景分类的鲁棒性。因为自然图片中很容易掺杂一些随机噪声,这类噪声会对
局部处理造成灾难性的影响,而对于全局图像却可以通过平均数来降低这种影响。
基于上下文的方法,通过识别全局对象,而非场景中的小对象集合或者准确的区域边界,
因此不需要处理小的孤立区域的噪声和低级图片的变化,其解决了分割和目标识别分类方法遇到的问题。
步骤:通过 Gist 特征提取场景图像的全局特征。Gist 特征是一种生物启发式特征,
该特征模拟人的视觉,形成对外部世界的一种空间表
示,捕获图像中的上下文信息。Gist 特征通过多尺度
多方向 Gabor 滤波器组对场景图像进行滤波,将滤波后
的图像划分为 4 × 4 的网格,然后各个网格采用离散傅
里叶变换和窗口傅里叶变换提取图像的全局特征信息。
以上是关于短信关键字过滤算法都有哪些?的主要内容,如果未能解决你的问题,请参考以下文章