simhash类的使用

来源:互联网 发布:擎天科技java面试 编辑:程序博客网 时间:2024/06/16 18:31

   首先感谢作者yanyiwu贡献的开源项目https://github.com/yanyiwu/simhash。

在做项目过程中,翻了一遍《这就是搜索引擎  核心技术详解》这本书的查重算法,在众多的算法中,我选择了simhash。这个算法的魅力在于,它把文本内容的相似性,转换为哈希值的相似性,很好理解,效率也高,再说,谷歌也用着。关于本算法的一些介绍,在yanyiwu大神的博客http://yanyiwu.com/work/2014/01/30/simhash-shi-xian-xiang-jie.html中也有介绍。

对这个算法的实现逻辑之后,开始来对这个算法的使用。既然大神已经贡献出了源码,那我们首先要去学会如何使用这个宝贵的东西。因此,我对大神yanyiwu封装的Simhasher类的成员函数的功能及其参数阐述自己的理解,学会如何使用这些接口。关于这些接口的实现,请参见github上的源码  /simhash/src/Simhasher.hpp.

以下是函数使用说明:

<span style="font-size:18px;">#ifndef SIMHASH_SIMHASHER_HPP#define SIMHASH_SIMHASHER_HPP#include "CppJieba/KeywordExtractor.hpp"//使用结巴分词库下的"关键字提取头文件"#include "hashes/jenkins.h"//使用jenkins.h进行特征到哈希值的转换namespace Simhash{    using namespace CppJieba;    class Simhasher: public NonCopyable    {        private:            enum{BITS_LENGTH = 64};            jenkins _hasher;//对象成员,用于获取哈希值,组合关系            KeywordExtractor _extractor;//jieba分词库中的类作为Simhash的类成员,组合关系        public:/****************构造函数*****************//*传入: *1)词典路径 *2)模式路径 *3)idf路径 *4)停用词路径 *///赋值 _extractor 的构造与析构            Simhasher(const string& dictPath, const string& modelPath, const string& idfPath, const string& stopWords): _extractor(dictPath, modelPath, idfPath, stopWords)            {}//析构函数            ~Simhasher(){};/********以下是Simhash的类成员函数*********/        public:            /* 1 */ bool extract(const string& text, vector<pair<string,double> > & res, size_t topN) const;/*功能: *抽取关键字,内部调用了_extractor.extract(); *参数: *(1)text是传入的将要进行抽取关键字的字符串 *(2)res装“关键字/权重”的数组 *(3)topN词频最高的前N个单词 */            /* 2 */bool make(const string& text, size_t topN, vector<pair<uint64_t, double> >& res) const;/*功能:     *返回能代表text这篇文章内容的topN个关键字的<二进制hash值,权重>对的数组。 *参数: *(1)text是传入的将要进行抽取关键字的字符串 *(2)topN词频最高的前N个单词 *(3)restopN个关键字对应的64bit hash值组成的数组 */            /* 3 */bool make(const string& text, size_t topN, uint64_t& v64) const /*功能:     *返回能代表text这篇文章内容的topN个关键字映射成的simhash值 *参数: *(1)text是传入的将要进行抽取关键字的字符串 *(2)topN词频最高的前N个单词 *(3)v64topN个关键字对应的64bit simhash值 */            /* 4 */static bool isEqual(uint64_t lhs, uint64_t rhs, unsigned short n = 3);/*功能:     *计算并判断 lhs 与 rhs 的海明距离是否小于n(默认为3) *参数: *(1)lhs ,rhs左右(不分左右)的64bit simhash值 *(2)n海明距离的上限值 */            /* 5 */static void toBinaryString(uint64_t req, string& res);/*功能:     *将uint64_t的hash值转变成64bit二进制,便于进行海明距离计算 *参数: *(1)requint64_t型的哈希值 *(2)res二进制字符串 */            /* 6 */static uint64_t binaryStringToUint64(const string& bin);/*功能:     *将64bit二进制转变成uint64_t的hash值 *参数: *(1)bin二进制字符串 */    };}#endif</span>


1 0
原创粉丝点击