(文章為本人原創,轉載請注明出處)
做團隊項目的過程中,有一個工作就是要從文本中提取關鍵詞。
我們接收到的文檔的樣子可能就是一個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版本,我也決定就這么多個詞語了,不再增加了。
以上就是我的一個提取關鍵詞的思路。
