精华内容
下载资源
问答
  • XML流上的关键字查询算法XML流上的关键字查询算法XML流上的关键字查询算法XML流上的关键字查询算法XML流上的关键字查询算法XML流上的关键字查询算法
  • 该策略同时涉及了查询结果的结构信息和内容信息,计算了信息特征的重要性,且能利用信息特征的重要性衡量不同信息特征下关键字的语义相关度,进而设计并实现了关键字查询算法XRIU .实验结果表明XRIU在查询质量上优于...
  • 算法依据主题索引和输入的关键字判断用户的查询主题,再根据主题执行获取最终查询的结果。在查询过程中不仅排除了查询主题不相关的关键字节点,同时也避免生成不相关的查询结果,提高了查询效率和质量。实验结果...
  • 现有的XML关键字查询方法包括两步:确定满足特定语义的节点; 构建满足特定条件的子树。...该算法仅需扫描一次关键字倒排表就能构建满足特定条件的子树, 从而提高了查询效率。最后通过实验验证了该方法的高效性。
  • 针对XML文档关键字搜索问题,从元素标签内容等价和元素结构相似性等价两个方面考虑无效的查询结果。介绍了有效最低公共祖先(FLCA)的概念,在此基础上提出紧致的有效最低公共祖先(CFLCA)的概念。根据定义的查询结果集...
  • 查询Q = { k1, k2, k3 } stack算法求SLCA 基本思想:先序遍历后序(自底向上)处理所有包含关键字的结点 从小到大遍历k1,k2两个关键字倒排表中的编码,依次入栈,比较相邻编码,编码中不同部分出栈,出栈时判断其...


              XML文档树                       树中每个结点对应唯一ID号

     

    概念:

    (1)SLCA结点:最小的包含所有关键字的结点

         对于查询Q = { a,b}来说SCLA结点有:x1, x4

    (2)ELCA结点:在排除以它的后代结点为根的子树中所有关键字之后以它为根的子树仍然包含所有查询关键字

         对于查询Q = { a,b}来说, ELCA结点有:x1, x2, x4

     

    一、求解所有的SLCA(最小最低公共祖先)结点

    (1)stack算法

            基本思想:先序遍历、后序(自底向上)处理所有包含关键字的结点

             1. 从小到大遍历a, b两个关键字倒排表中的编码,依次入栈,比较相邻编码,编码中不同部分出栈,出栈时判断其

                是否为真正的SLCA;

             2. 判断一个结点是否为SLCA结点,需要知道其包含查询关键字的情况。若其没有包含所有关键字,则将包含关键

                 字的信息传递给其父亲;若其包含所有关键字,则其是一个候选的SLCA(事实上第一个候选SLCA就是一个真

                 正的SLCA),其包含关键字的信息不传递给其父亲; 

             3. 按照上面的过程求出下一个候选的SLCA,判断其与前一个SLCA之间的祖先后代关系,若不是祖先后代关系,则

                 说明其是一个真正的SLCA.


    (2)IL算法

            基本思想

            1. 比较a,b两个关键字倒排表的长度,依次取最短倒排表中的一个编码到次短倒排表中求左右匹配;

                左匹配:比该编码小的最大的编码,右匹配:比该编码大的最小的编码

            2. 该编码分别和左右匹配得到两个LCA结点,其中编码较长的LCA结点为候选的SLCA结点;

              (若还有第三个关键字,则拿该LCA结点到最长倒排表中求左右匹配,同理得到两个LCA结点,其中编码较长

                的LCA 结点为候选的SLCA结点)

            3. 处理最短倒排中的第二个编码,同理得到一个候选的SLCA结点,根据它们的祖先后代关系判断前一个候选SLCA

                结点是否为真正的SLCA结点。

     

    IL算法Stack算法的不同点:

               IL算法从左到右遍历最短倒排表,用一个候选SLCA判断前一个候选SLCA是否为真正的SLCA结点;

               Stack算法自底向上进行求解,一个候选SLCA判断后一个候选SLCA是否为真正的SLCA结点。

     

    二、求解所有的ELCA(排他的最低公共祖先)结点

    HashCount算法

           基本思想

            1. 建立关键字的hashcount索引,记录某个结点包含关键字的个数;

            2. 比较a,b两个关键字倒排表的长度,依次取最短倒排表中的一个编码入栈,比较相邻编码,编码中不同部分出栈

                ,出栈时根据其包含关键字个数情况判断其是否为真正的ELCA;

            3. 若是ELCA结点,则需要将其包含关键字个数信息传递给父亲结点;若不是ELCA结点,说明其父亲结点是一个潜

               在的ELCA结点;

            4. 直至最短倒排表被遍历完为止。

    展开全文
  • 文本中关键字匹配算法的实现 文本中关键字匹配算法的实现 文本中关键字匹配算法的实现 文本中关键字匹配算法的实现
  • python关键字提取算法

    2018-12-28 16:35:41
    python中分词和提取关键字算法。以及词云代码部分,可以更好帮助需求者。
  • 关键字查询AC算法(java)+报告
  • 关键字过滤算法

    2013-08-27 17:34:38
    文档描写的是一个关于关键字过滤的算法,跟其他过滤算法不同的是该算法是中英文混合过滤算法
  • 关键字查找算法

    2017-11-28 11:02:12
    用多叉树实现的查找算法,速度达到 80~90Mb/s。详见博客 http://blog.csdn.net/W_SX12553/article/details/78652736
  • 关系模式全部候选关键字算法,数据库的表与表之间关系模式等应用
  • 求关系模式候选关键字算法,对于数据库的表与表之间关系很有用
  • 文本关键字提取算法归纳

    千次阅读 2018-12-21 17:46:52
    关键字提取算法1、基于统计特征的关键词提取算法TF-IDF2、基于词图模型的关键词抽取算法PageRankTextRank算法 1、基于统计特征的关键词提取算法 基于于统计特征的关键词抽取算法的思想是利用文档中词语的统计信息...

    1、基于统计特征的关键词提取算法

    基于于统计特征的关键词抽取算法的思想是利用文档中词语的统计信息抽取文档的关键词。通常将文本经过预处理得到候选词语的集合,然后采用特征值量化的方式从候选集合中得到关键词。基于统计特征的关键词抽取方法的关键是采用什么样的特征值量化指标的方式。

    1.1 TF-IDF

    详参TF-IDF与余弦相似性的应用(一):自动提取关键词。

    1.2 PKEA (Patent Keyword Extraction Algorithm)

    具体实施步骤:
    (1)将所有专利的摘要提取出来进行skip-gram词向量训练。min wordcount:3,window_size:5,dim:200
    (2)利用预先定义的与类有关的单词,使用k-means计算各个类的形心词向量 s i s_i si
    (3)对每一份专利的摘要中存在于skip-gram词库的词计算 c o s ( w i j , s i ) cos(w_{ij},s_i) cos(wij,si)
    (4)按 c o s cos cos的值从高到低排序即可得到提取的关键字

    1.3 文档位置信息

    1.4 词跨度

    词跨度是指一个词或者短语字文中首次出现和末次出现之间的距离,词跨度越大说明这个词对文本越重要,可以反映文本的主题。一个词的跨度计算公式如下:
    在这里插入图片描述
    其中, l a s t i last_i lasti表示词 i i i在文本中最后出现的位置, f i r s t i first_i firsti表示词 i i i 在文本中第一次出现的位置, s u m sum sum表示文本中词的总数。

    词跨度被作为提取关键词的方法是因为在现实中,文本中总是有很多噪声(指不是关键词的那些词),使用词跨度可以减少这些噪声。

    1.5 互信息

    详参基于统计特征的关键词提取算法

    2、基于词图模型的关键词抽取算法

    PageRank算法是整个google搜索的核心算法,是一种通过网页之间的超链接来计算网页重要性的技术,其关键的思想是重要性传递。在关键词提取领域, Mihalcea 等人所提出的TextRank算法就是在文本关键词提取领域借鉴了这种思想。

    2.1 PageRank

    PageRank是一种网页排名算法,网页质量的评估是遵循以下两个假设的:

    1. 数量假设:一个节点(网页)的入度(被链接数)越大,页面质量越高
    2. 质量假设:一个节点(网页)的入度的来源(哪些网页在链接它)质量越高,页面质量越高

    详参PageRank算法简介及Map-Reduce实现

    2.2 TextRank算法

    当TextRank应用到关键字抽取时,每个词不是与文档中所有词都有链接。那么如何界定链接关系?学者们提出了一个窗口的概念。在窗口中的词相互间都有链接关系。得到了链接关系,就可以套用TextRank的公式,对每个词的得分进行计算。最后选择得分最高的n个词作为文档的关键词。
    在这里插入图片描述
    节点 i 的权重取决于节点 i 的邻居节点中 i-j 这条边的权重 / j 的所有出度的边的权重 * 节点 j 的权重,将这些邻居节点计算的权重相加,再乘上一定的阻尼系数,就是节点 i 的权重,阻尼系数 d 一般取 0.85。

    TextRank 用于关键词提取的算法如下:

    (1)把给定的文本 T 按照完整句子进行分割,即:
    在这里插入图片描述
    (2)对于每个句子,进行分词和词性标注处理,并过滤掉停用词,只保留指定词性的单词,如名词、动词、形容词,其中 ti,j 是保留后的候选关键词。
    在这里插入图片描述
    (3)构建候选关键词图 G = (V,E),其中 V 为节点集,由(2)生成的候选关键词组成,然后采用共现关系(Co-Occurrence)构造任两点之间的边,两个节点之间存在边仅当它们对应的词汇在长度为 K 的窗口中共现,K 表示窗口大小,即最多共现 K 个单词。

    (4)根据 TextRank 的公式,迭代传播各节点的权重,直至收敛。

    (5)对节点权重进行倒序排序,从而得到最重要的 T 个单词,作为候选关键词。

    (6)由(5)得到最重要的 T 个单词,在原始文本中进行标记,若形成相邻词组,则组合成多词关键词。

    2.3 Rake

    Rake算法的实现,请点击:https://github.com/zelandiya/RAKE-tutorial

    3、基于主题模型的关键词抽取

    3.1 LDA

    基于主题关键词提取算法主要利用的是主题模型中关于主题的分布的性质进行关键词提取。

    参考文献:
    技术干货 | 如何做好文本关键词提取?从三种算法说起
    关键词提取算法

    展开全文
  • rake-nltk:Python实现使用NLTK的快速自动关键字提取算法
  • 为提高中文关键字的提取准确率,提出一种基于竞争学习网络的中文关键字提取算法。对文章进行分词,得到单个词组或短语,视其为单个神经元,将神经元输入竞争学习网络的输入层,通过竞争层上神经元的相互竞争,获得一...
  • 实现关键字提取,可识别中文、英文,用C++实现方法齐全。用到数据挖掘中的技术构造。
  • 文本中关键字匹配算法

    万次阅读 2016-06-16 09:33:38
    这个文本处理需要一个算法, 普通的文本处理直接去遍历所有的关键字,但是这种算法太复杂,时间复杂度太高。 之前的文章中有说过,实际用到的算法,为了加快执行速度,都是在时间和空间上做的兑换。这里同样可以,...


    给定一定数量的关键字,对任一篇文本,寻找文本中包含哪些关键字

    例如关键字集合如下:


    而待检测的文本如下:


    当前算法的目的就是从test.txt中快速的检索有没有给定的keyWord.txt中的关键字

    具体的代码下载地址是:http://download.csdn.net/detail/sinat_22013331/9551006,这部分代码是用C#写的,如果要java或者其他语言的版本,可以对照着改动一些。



    这个文本处理需要一个算法, 普通的文本处理直接去遍历所有的关键字,但是这种算法太复杂,时间复杂度太高。

    之前的文章中有说过,实际用到的算法,为了加快执行速度,都是在时间和空间上做的兑换,用存储空间的增加来换取执行时间的减小。

    这里同样可以,通过增加存储空间来减少程序执行时间。


    可以选择开一个数组,数组的长度是char类型的最大长度加一。

    数组的相应字符对应位置上的数值用二进制表示。假设关键字的长度最长为15,则可以用两个字节的数字来表示,也就是一个short类型。

    假设数字为 0000 0000 0010 0110, 也就是38。则表示当前这个字符,可能出现在关键字的第2,3,6位上。由此做倒排索引,可以更方便的得到答案。

    //对应位上的值存放的是每个字符在对应位数上是否存在敏感词,
    //比如fastPositionCheck[7] = 38, 也就是0010 0110  表示某个ascll码为7的字符可能出现在关键字的第2,3,6位上
    private short[] fastPositionCheck = new short[char.MaxValue + 1];

    这个实现方案可以变成:首先创建一个关键字字典,在这个字典中包含所有的关键字。同时在这个字典中提供针对某个字符的快速检验方法,比如说查看当前关键字是否出现在第一位。


    创建的字典如下:

    //存放所有关键词
    private HashSet<string>[] words = new HashSet<string>[ char.MaxValue + 1 ];


    字典中的快速检验方法,这里提供两种,分别是验证某字符是否会出现在关键字的第几位上,以及当前字符时候是某关键字的第一位,如下:

            //对应位上的值存放的是每个字符在对应位数上是否存在敏感词,
            //比如fastPositionCheck[7] = 35, 也就是0010 0011  表示某个ascll码为7的字符可能出现在关键字的第1,2,6位上
            private short[] fastPositionCheck = new short[char.MaxValue + 1];
            
            //存放以某个字符为第一位的关键词的长度
            private short[] fastLengthCheck = new short[char.MaxValue + 1];



    于是字典建立完成之后,就要将所有的关键字添加到字典中,在添加的时候,对各种存储空间赋值。操作如下:

            /// <summary>
            /// 向字典中添加关键词
            /// </summary>
            /// <param name="word"></param>
            /// <returns></returns>
            public bool AddWord( string word )
            {
                bool result = false;
                try
                {
                    maxStoreWordLength = Math.Max(maxStoreWordLength, word.Length);
                    minStoreWordLength = Math.Min(minStoreWordLength, word.Length);
    
                    //这些运算符的运用简直了,神来之笔
                    for (int i = 0; i < word.Length; i++)
                    {
                        fastPositionCheck[word[i]] |= (short)(1 << i);
                    }
    
                    //记录以某个字开头的关键字的长度信息,左移位数长度为该字符串长度减一
                    fastLengthCheck[word[0]] |= (short)(1 << (word.Length - 1));
    
                    if (words[word[0]] == null)
                    {
                        words[word[0]] = new HashSet<string>();
                    }
    
                    if (!words[word[0]].Contains(word))
                    {
                        words[word[0]].Add(word);
                    }
                    result = true;
    
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
    
                return result;
            }
        }


    到这里,一个完整的字典就建立完成了,下面来说字典的使用。


    在字典的使用中,前面已经讲过KMP算法了,这里的思路有点像,还是从string的第一个字符开始,逐渐向后遍历,直到最后一个字符。遍历的时候作快速判定,此时的判定依据就是前面提到的几个数组。具体代码如下:

            public void CheckNormalWord(string text )
            {
                
                int index = 0;
                while (index < text.Length)
                {
    
                    //首先判断当前字符是否是某关键字的第一个字符,不是时就继续向下遍历
                    if ((keywordDict.FastCheck[text[index]] & 1) == 0)
                    {
                        do
                        {
                            index++;
                        }
                        while ( (index < text.Length) && ((keywordDict.FastCheck[text[index]] & 1) == 0) );
    
                        if (index >= text.Length)
                        {
                            break;
                        }
                    }
    
                    //此时已经判定,当前的这个字符会出现在关键词的第一位上
                    //在判断
                    char begin = text[index];
                    int jump = 1;
                    for (int j = 0; j <= Math.Min(keywordDict.MaxWordLength, text.Length - index - 1); j++)
                    {
                        char current = text[index + j];
                        
                        //判断当前字符是否会出现在关键字的对应位上,实现快速判断
                        if ((keywordDict.FastCheck[current] & (1 << Math.Min(j, keywordDict.MaxWordLength))) == 0)
                        {
                            break;
                        }
                        
                        //当判决的长度大于关键字的最小长度时,当前的截取字符串有可能会是关键字,要做详细判定
                        if (j + 1 >= keywordDict.MinWordLength)
                        {
                            if ((keywordDict.FastLength[begin] & (1 << Math.Min(j, keywordDict.MaxWordLength))) > 0)
                            {
                                string sub = text.Substring(index, j + 1);
    
                                //在字典中搜索判断,得出结论。同时给出跳转位数,供下一次跳转用
                                if (keywordDict.Words[begin] != null && keywordDict.Words[begin].ContainsKey(sub))
                                {
                                    jump = sub.Length;
                                    Console.WriteLine(sub);
                                }
                            }
                        }
                    }
    
                    index += jump;
                }
            }

    这样就实现了整个文本中搜索指定关键字的算法。具体的代码详见 https://github.com/BLYang7/HighlightKeyword









    展开全文
  • :基于多关键字匹配的Sun wu算法进行的分析,结合Qs算法的思想,设计了一种改进的多关
  • RAKE是快速自动关键字提取算法的缩写,它是一种与域无关的关键字提取算法,它通过分析单词出现的频率及其与文本中其他单词的共现程度来尝试确定文本主体中的关键短语。 建立 使用点子 pip install rake-nltk 直接从...
  • 关键字匹配算法

    千次阅读 2015-05-11 10:20:02
    http://en.wikipedia.org/wiki/Aho–Corasick_string_matching_algorithm Aho–Corasick算法 http://multifast.sourceforge.net/ 开源实现

    http://en.wikipedia.org/wiki/Aho–Corasick_string_matching_algorithm
    Aho–Corasick算法

    http://multifast.sourceforge.net/
    开源实现 
    展开全文
  • 下面是C语言字符串关键字的匹配算法讲解笔记 一、主函数 这段代码块定义了一个全局变量pattern作为目标关键词,其中'\0'是字符串的结束标志。charline是从getline获取到的被匹配句子,while循环条件会一直进行字符...
  • 作为一种经典的文本关键字提取和摘要自动生成算法,TextRank将文本看做若干单词组成的集合,并通过对单词节点图的节点权值进行迭代计算,挖掘单词之间的潜在语义关系。在TextRank节点图模型的基础上,将马尔可夫状态...
  • 下面是基于KWIC 的关键字匹配算法(管道+过滤器模式下实现) 关键部分的管道+过滤器 软件体系下的实现, 在很多的关键字搜索平台都使用了这一 循环移位+排序输出的 关键字匹配算法: 具体需求如下: 1、使用管道-过滤...
  • 最后,使用Enron电子邮件数据集作为实验数据库,分别在索引时间成本、暗门生成时间成本和查询时间方面评估了该算法的检索和保密性能。实验结果表明,该算法可在云计算中进行高效的加密多关键字排列检索。
  • 关键字算法

    2012-12-04 09:22:39
    用于文本类聚是想关键字的提取,使用IDF算法实现分词等技术
  • 中文文本关键字分割算法

    千次阅读 2012-04-27 13:47:17
    这几天为Gimi Talk研究中文的分词,主要问题是要消除歧义的关键字,如何分割的问题。 参看了几篇文章,例句:长春市长春药店 1.查找所有有效词(起始位置和词长): 长春(0,2),长春市(0,3),市长...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 291,011
精华内容 116,404
关键字:

关键字查询算法