提取文档关键词
(文章为本人原创,转载请注明出处)
做团队项目的过程中,有一个工作就是要从文本中提取关键词。
我们接收到的文档的样子可能就是一个html的文档,对于这个html文档,有什么样的提取其关键词的策略呢?
因为初期做的是一个alpha版本,也就没有足够的时间实现一个好的方法,大概说一下这个版本中我的基本解决方案是:
1)、文档中已经存在关键词
对于一个html网页,有些网页实际上是已经提供了关键词了的。但是通常情况下还是存在一些问题的,要么是关键词不是很准确,要么就是关键词数量不够,不能完全概括文章内容。但是话又说回来,提取关键词这一步,谁又能够保证自己的算法做到完全的准确呢?所以,我还是决定将提供了关键词的界面提供的关键词加入到我要提取的关键词的结果中。
当然不同的网站列出关键词的方式是不同的,比如有的网站是以","分隔,有的网站是以" "分隔。这个就需要自己做一个简单的处理,得到最后的一个一个的关键词。
2)、关键词提取算法
对于关键词提取,已经存在了一些算法,比如tf-idf算法,tf-iwf算法等等算法。这些算法的大致思想都是一个词语出现的次数越多,并且它尽可能少地出现在其它的文档中,那么它可能成为关键词 的可能性就越大。也就是考虑关键词在一个文本中出现的次数和整个数据集的文档数量与关键词出现的文档数量的一个比例的关系,通过一定权重衡量处理,得到一个词语的权重,最终取权重较大的词语作为关键词。
比如tf-idf算法,其经典计算公式就是:
其中tfij表示的是词语tj在文档di中出现的次数,N表示数据集中的文档总数,nj表示出现了词语tj的的文档的数量。
tf-idf模型是一种比较经典的模型,很多人都在基于这个模型做研究,主要的策略还是改变tf和idf所占的权重,比如提高idf所占的权重,后面那一块变成平方。在他们的实验中取得了较好的成果。
这个模型我考虑过,但是考虑到我们现在面对的情况的文档数不是一个固定的。而是在不断增大的一种情况,也就是说idf实际上的情况是不准确的。所以我换了另外一种思路,因为我们这次的项目是面向计算机领域的问题的。由于这个特征,我采用了下面的这个方法:
(1)、将文档切词,去除其中的助词,形容词等没有意义的词语
(2)、统计每个词的词频,并且按降序排列
(3)、从频数最大的词语开始,与领域词典进行比较,如果出现在领域词典中,那么就作为关键词放入到关键词中,根据人们认知的“7加减2”原则(这个是从一篇论文看来的,大概意思说:人的认知规律决定了人一次能够记住见到的7加减2个词语)。选取如果选取了9个词语,那么算法停止。否则继续,直到所有的词语都比较完。
当然,这个算法最重要,也是最决定效率的地方就是领域词典的构建。词典中的词语数量以及词语分布的广度决定了最后结果的准确性。在这个项目中,我选择了搜狗细胞词库中计算机相关的几个词库,包括计算机词汇大全、Linux少量术语、MATLAB、SEO搜索引擎优化、电脑词汇等。总的词汇数量在10000至11000之间。由于是alpha版本,我也决定就这么多个词语了,不再增加了。
以上就是我的一个提取关键词的思路。