提取關鍵詞演算法
A. 用Py做文本分析5:關鍵詞提取
關鍵詞指的是原始文檔的和核心信息,關鍵詞提取在文本聚類、分類、自動摘要等領域中有著重要的作用。
針對一篇語段,在不加人工干預的情況下提取出其關鍵詞
無監督學習——基於詞頻
思路1:按照詞頻高低進行提取
思路2:按照詞條在文檔中的重要性進行提取
IF-IDF是信息檢索中最常用的一種文本關鍵信息表示法,其基本的思想是如果某個詞在一篇文檔中出現的頻率高,並且在語料庫中其他文檔中很少出現,則認為這個詞具有很好的類別區分能力。
TF:Term Frequency,衡量一個term在文檔中出現得有多頻繁。平均而言出現越頻繁的詞,其重要信姿賀性可能就越高。考慮到文章長度的差異,需要對冊帶詞頻做標准化:
IDF:Inverse Document Frequency,逆文檔概率,用於模擬在該語料的實際使用環境中,目標term的重要性。
TF-IDF:TF*IDF
優點:
(1)jieba
(2)sklearn
(3)gensim
前面介紹的TF-IDF屬於無監督中基於詞頻的演算法,TextRank演算法是基於圖形的演算法。
TextRank演算法的思想來源於PageRank演算法:
和基於詞頻的演算法相比,TextRank進一步考滑派慮了文檔內詞條間的語義關系。
參考資料:
python數據分析--玩轉文本挖掘
B. 關鍵詞提取算不算自然語言處理的任務
算
⾃然語⾔處理(⼀)--關鍵詞提取
最近學習使⽤了傳統的⾃然語⾔處理技術進⾏關鍵詞的提取,接下來我介紹⼀下兩種常⽤的演算法:TFIDF和TextRank。⽬前BiLSTM 也可以⽤於提取⽂本關鍵詞,有空再學。
1.TF-IDF
TF-IDF(term frequency-inverse document frequency)是⼀種⽤於信息檢索與數據挖掘的常⽤加權技術。TF-IDF是⼀種統計⽅法,⽤來評估⼀個字詞對於⼀個⽂件集或語料庫中的⼀份⽂件的重要程度。
⾸先解釋⼀下TF-IDF的意思:
TF(term frequency):詞語在⼀篇⽂章中出現的頻率
IDF(inverse document frequency):反⽂檔頻率,與詞語在其他⽂檔中出現的頻率負相關
TF-IDF的主要思想是:如果某個詞或短語在⼀篇⽂章中出現的頻率⾼,即TF值⾼;並且在其他⽂章中很少出現,即IDF值⾼,那麼認為這個詞或短語具有很好的類別區分能⼒,適合作為該⽂章的關鍵詞。
TF-IDF的具體計算公式為:
⽂檔中詞的tfidf值越⾼,便認為該詞越可以代表該⽂檔的主題。TF-IDF演算法的python實現如下,同時jieba庫中也實現了TF-IDF,有興趣的話也可以去了解⼀下。
# TF-IDf演算法python實現
import re
import math
# 獲取⼀個⽂檔中每個詞的TF值,doc參數保存⽂檔中的句⼦列表,返回單詞與其tf值的字典
# ⾸先對⽂檔中的單詞進⾏切分,然後統計每個詞的詞頻
def GetWordTF(doc):
words_count =0# 單詞總數
words_map ={}# 單詞與單詞數的映射
tf_map ={}# tf值映射詞典,格式: tf_map[word] = tf_word
for sentence in doc:# 遍歷⽂檔中的每個句⼦
# 單詞的切分⽅式可以根據所給的數據格式進⾏修改
# 我將提取英⽂句⼦中的每個單詞,使⽤正則表達式提取並去除空字元串
words_arr =[word for word in re.split(r'\W+',sentence)if word]
words_count +=len(words_arr)# 統計有效詞的總長度
for word in words_arr:# 遍歷每⼀個詞並進⾏統計單詞數
words_map[word]= words_map.get(word,0)+1
for key,val in words_map.items():# 計算每個單詞的tf值
tf_map[key]= val / words_count
return tf_map
# 獲取⽂檔每個單詞在⽂檔集docSet中的IDF值映射
def GetWordIDF(tfMap,docSet):
docs_num =len(docSet)# ⽂檔集中⽂檔的總數
word_doc_num ={}# 包含word的⽂檔數,格式為word_doc_num[word] = num of doc that contains word
idf_map ={}# idf值映射字典,格式idf_map[word] = idf_word
for key,val in tfMap.items():# 遍歷⽂檔中出現的單詞
for doc in docSet:# 遍歷每個⽂檔,檢查該⽂檔中是否出現了單詞key
for sentence in doc:# 遍歷⽂檔中的每個句⼦
words_arr =[word for word in re.split(r'\W+', sentence)if word]# 提取句⼦中的每個單詞
if key in words_arr:# 如果該⽂檔中有該詞,則統計
word_doc_num[key]= word_doc_num.get(key,0)+1
break
for key,val in word_doc_num.items():# 計算每個單詞的idf值
idf_map[key]= math.log(docs_num / val)
return idf_map
# 使⽤TFIDF演算法獲取⽂檔的前topNum個關鍵詞,其中每個⽂檔是以列表表⽰的,列表項為⽂檔的⼀個句⼦
def GetKeywordsByTFIDF(entityDescriptionList,docSet,topNum):
tf_map = GetWordTF(entityDescriptionList)# 獲取每個單詞的tf值
idf_map = GetWordIDF(tf_map,docSet)# 獲取每個單詞的idf值
tfidf_map ={}
for key,val in tf_map.items():# 計算每個詞的tfidf值
tfidf_map[key]= tf_map[key]* idf_map[key]
tfidf_sorted_list =sorted(tfidf_map.items(),key =lambda x:x[1],reverse=True)# 將字典按值從⼤到⼩排序
if topNum >len(tfidf_sorted_list):# 保證topNum不⼤於⽂檔中詞的總數
topNum =len(tfidf_sorted_list)
keywords =[]# 保存⽂檔的前topNum個關鍵字
for i in range(topNum):
keywords.append(tfidf_sorted_list[i][0])# 關鍵字保存在元組的第0個元素中
return keywords
2.TextRank
TF-IDF演算法對於有多段⽂本的關鍵詞提取⾮常有效,但是對於單篇或⽂檔集較少的⽂本則表現得不很好。對於單篇⽂檔,可以使⽤TextRank演算法實現關鍵詞提取。
TextRank是⼀種基於圖排序的演算法,思想源於⾕歌的PageRank演算法,通過把⽂本分割為若⼲組成單元(單詞、句⼦)並建⽴圖模型,利⽤投票機制對⽂本中的重要成分進⾏排序,僅利⽤單篇⽂檔本⾝的信息即可實現關鍵詞提取。
TextRank利⽤投票的原理,讓每⼀個單詞給它的鄰居投贊成票,票的權重取決於⾃⼰的票數。假設每⼀個詞是⼀個頂點(Vertex),那麼所有的詞就構成了⼀個⽹絡,這個⽹絡⾥⾯每個頂點會有指向其他頂點的邊,也會有其他頂點指向⾃⼰的邊。通過計算每個頂點所連接的指向⾃⼰的頂點的權重和,最終得到該頂點的權重值。
TextRank存在的主要問題是初始值的確定,為了後續計算的簡便性,這⾥會給初值賦為⼀個⾮0值。同時,引⼊了⼀個阻尼系數的概念,該參數表⽰從某⼀個指定的頂點,到任意⼀個其他頂點的概率。TextRank的具體公式如下:
於是,使⽤TextRank演算法提取關鍵詞時,⾸先需要把圖構建出來。圖的節點就是單詞,⾄於邊可以利⽤n-gram的思路,認為某個單詞只與它附近的n個單詞有關,即與它附近的n個詞對應的節點連⼀條⽆向邊。也可以做⼀些其他操作,⽐如把某類詞性的詞刪掉,⼀些⾃定義詞刪掉,只保留⼀部分單詞等。我的代碼實現中,假設每個長為k的滑動窗⼝中的任意兩個單詞對應的節點之間存在⼀條⽆向⽆權邊。當構圖成功後,就可以使⽤上述公式進⾏迭代求解了。Python實現的代碼如下:
# 使⽤TextRank演算法實現關鍵詞提取,返回關鍵詞列表,參數含義如下:
# sentence 保存待提取關鍵字的句⼦
# windowLength 保存滑動窗⼝的⼤⼩
# topNum 表⽰需要返回排名前topNum的關鍵詞
# d 表⽰textrank演算法的阻尼系數,默認為0.85
# maxIter 表⽰演算法最⼤迭代次數
# minDiff 迭代後變化值⼩於minDiff時也停⽌迭代
def GetKeywordsByTextRank(sentence,windowLength,topNum=3,d=0.85,maxIter=10000,minDiff=0.0001):
# 單詞的切分⽅式可以根據所給的數據格式進⾏修改
# 我將提取英⽂句⼦中的每個單詞,使⽤正則表達式提取並去除空字元串
words_arr =[word for word in re.split(r'\W+', sentence)if word]
words_num =len(words_arr)# 句⼦的長度
word_graph ={}# 保存每個單詞的連接狀態,格式為word_graph[word] = [與該詞存在邊的單詞的集合]
textrank_map ={}# 保存每個textrank值的字典,格式為textrank_map[word] = textrank value of the word
textrank_map_t ={}# ⽤於保存前⼀次迭代的tankrank結果
for words_index in range(words_num):# 遍歷句⼦中的每個單詞,開始根據給定的窗⼝值構圖
textrank_map[words_arr[words_index]]=1- d # 為每個詞初始化⼀個textrank值
window_lower =max(0, words_index - windowLength)# 滑動窗⼝的下邊界
window_upper =min(words_num, words_index + windowLength)# 滑動窗⼝的上邊界
for window_index in range(window_lower,window_upper):# 遍歷窗⼝中的單詞,構建單詞的連接關系
if window_index == words_index:# ⾃⼰與⾃⼰認為沒有邊
continue
if not words_arr[window_index]in word_graph.get(words_arr[words_index],[]):# 檢查兩詞節點之間是否有邊
if word_graph.get(words_arr[words_index],0)==0:# 檢查該詞的邊集是否為空
word_graph[words_arr[words_index]]=[words_arr[window_index]]# 為空則⽣成包含該點的邊集
else:
word_graph[words_arr[words_index]].append(words_arr[window_index])# 將該邊添加到邊集中
for iter_i in range(maxIter):# 利⽤textrank計算公式迭代計算
max_diff =0# 表⽰迭代前後兩次的變化
for word,neibor_list in word_graph.items():# 遍歷每個單詞
for con_word in neibor_list:# 遍歷與每個單詞存在相鄰關系的單詞
con_word_out_len =len(word_graph[con_word])# 計算當前節點連接的節點個數
if word == con_word or con_word_out_len ==0:
continue# 如果是該節點本⾝或⽆連出節點則不更新
# 使⽤公式對textrank值進⾏更新
textrank_map[word]=1- d + d * textrank_map_t.get(con_word,0)/con_word_out_len
max_diff =max(max_diff,abs(textrank_map[word]-textrank_map_t.get(word,0)))
for word,val in textrank_map.items():
textrank_map_t[word]= val
if(max_diff < minDiff):# 各個單詞節點的textrank值如果均⽆明顯變化,則可結束迭代
break
textrank_sorted_list =sorted(textrank_map.items(),key=lambda x:x[1],reverse=True)# 按照textrank值從⼤到⼩排序
if topNum >len(textrank_sorted_list):# 保證topNum不⼤於⽂檔中詞的總數
topNum =len(textrank_sorted_list)
if topNum <1:# 保證topNum⼤於0
topNum =1
keywords =[]# 保存將要返回的關鍵詞
for i in range(topNum):
keywords.append(textrank_sorted_list[i][0])
return keywords
可以看出TextRank演算法對於⼀段⽂本中多次出現的詞,會賦予更⼤的權重,因為它連出的節點更多,所以當各個節點初始權重⼀致時,則最終出現次數最多的詞權重就會更⼤。這也會使該演算法對類似於「的」、「你、我、他」等常⽤詞,會出現⽐較⼤的誤差。對於這種情況,可以在最開始構建邊時進⾏處理,去掉⼀些停⽤詞或者選擇⾃⼰需要的詞性的詞,從⽽得出實際有⽤的詞語。
後記:前端暫時不⽀持Latex,公式我只能貼圖了。深度學習最近⽐較流⾏,還有很多需要學的呀!
網路文庫VIP已幫您省69元現在恢復最低僅需0.3元/天
立即續費
自然語言處理(一)--關鍵詞提取
⾃然語⾔處理(⼀)--關鍵詞提取
最近學習使⽤了傳統的⾃然語⾔處理技術進⾏關鍵詞的提取,接下來我介紹⼀下兩種常⽤的演算法:TFIDF和TextRank。⽬前BiLSTM 也可以⽤於提取⽂本關鍵詞,有空再學。
1.TF-IDF
TF-IDF(term frequency-inverse document frequency)是⼀種⽤於信息檢索與數據挖掘的常⽤加權技術。TF-IDF是⼀種統計⽅法,⽤來評估⼀個字詞對於⼀個⽂件集或語料庫中的⼀份⽂件的重要程度。
C. TFIDF演算法實現關鍵詞抽取
其實這是一個很簡單的演算法。
先來學習一下概念:
在實際的使用過程中,實際上先使用歷史存量數據計算出每個詞的IDF值,作為一個原始信息,在對新內容進行處理時,只需要計算出TF值就可以了,然後對這篇內容的所有詞計算出TFIDF值,然後進行排序就ok了。
TFIDF是一種十分簡單的關鍵詞提取方案,在實際的應用中,還可以進行多種演算法的融合,之後我再慢慢介紹。
當然了,該演算法還有一些變種,基本上基於下面幾種方法,有興趣的可以了解一下。
D. 大數據演算法:分類演算法
KNN演算法,即K近鄰(K Nearest Neighbour)演算法,是一種基本的分類演算法。其主要原理是:對於一個需要分類的數據,將其和一組已經分類標注好的樣本集合進行比較,得到距離最近的K個樣本,K個樣本最多歸屬的類別,就是這個需要分類數據的類別。下面我給你畫了一個KNN演算法的原理圖。
圖中,紅藍綠三種顏色的點為樣本數據,分屬三種類別 、 、 。對於待分類點 ,計算和它距離最近的5個點(即K為5),這5個點最多歸屬的類別為 (4個點歸屬 ,1個點歸屬 ),那麼 的類別被分類為 。
KNN的演算法流程也非常簡單,請看下面的流程圖。
KNN演算法是一種非常簡單實用的分類演算法,可用於各種分類的場景,比如新聞分類、商品分類等,甚至可用於簡單的文字識別。對於新聞分類,可以提前對若干新聞進行人工標注,標好新聞類別,計算好特徵向量。對於一篇未分類的新聞,計算其特徵向量後,跟所有已標注新聞進行距離計算,然後進一步利用KNN演算法進行自動分類。
讀到這你肯定會問,如何計算數據的距離呢?如何獲得新聞的特徵向量呢?
KNN演算法的關鍵是要比較需要分類的數據與樣本數據之間的距離,這在機器學習中通常的做法是:提取數據的特徵值,根據特徵值組成一個n維實數向量空間(這個空間也被稱作特徵空間),然後計算向量之間的空間距離。空間之間的距離計算方法有很多種,常用的有歐氏距離、餘弦距離等。
對於數據 和 ,若其特徵空間為n維實數向量空間 ,即 , ,則其歐氏距離計算公式為
這個歐式距離公式其實我們在初中的時候就學過,平面幾何和立體幾何里兩個點之間的距離,也是用這個公式計算出來的,只是平面幾何(二維幾何)里的n=2,立體幾何(三維幾何)里的n=3,而機器學習需要面對的每個數據都可能有n維的維度,即每個數據有n個特徵值。但是不管特徵值n是多少,兩個數據之間的空間距離的計算公式還是這個歐氏計算公式。大多數機器學習演算法都需要計算數據之間的距離,因此掌握數據的距離計算公式是掌握機器學習演算法的基礎。
歐氏距離是最常用的數據計算公式,但是在文本數據以及用戶評價數據的機器學習中,更常用的距離計算方法是餘弦相似度。
餘弦相似度的值越接近1表示其越相似,越接近0表示其差異越大,使用餘弦相似度可以消除數據的某些冗餘信息,某些情況下更貼近數據的本質。我舉個簡單的例子,比如兩篇文章的特徵值都是:「大數據」「機器學習」和「極客時間」,A文章的特徵向量為(3, 3, 3),即這三個詞出現次數都是3;B文章的特徵向量為(6, 6, 6),即這三個詞出現次數都是6。如果光看特徵向量,這兩個向量差別很大,如果用歐氏距離計算確實也很大,但是這兩篇文章其實非常相似,只是篇幅不同而已,它們的餘弦相似度為1,表示非常相似。
餘弦相似度其實是計算向量的夾角,而歐氏距離公式是計算空間距離。餘弦相似度更關注數據的相似性,比如兩個用戶給兩件商品的打分分別是(3, 3)和(4, 4),那麼兩個用戶對兩件商品的喜好是相似的,這種情況下,餘弦相似度比歐氏距離更合理。
我們知道了機器學習的演算法需要計算距離,而計算距離需要還知道數據的特徵向量,因此提取數據的特徵向量是機器學習工程師們的重要工作,有時候甚至是最重要的工作。不同的數據以及不同的應用場景需要提取不同的特徵值,我們以比較常見的文本數據為例,看看如何提取文本特徵向量。
文本數據的特徵值就是提取文本關鍵詞,TF-IDF演算法是比較常用且直觀的一種文本關鍵詞提取演算法。這種演算法是由TF和IDF兩部分構成。
TF是詞頻(Term Frequency),表示某個單詞在文檔中出現的頻率,一個單詞在一個文檔中出現的越頻繁,TF值越高。
詞頻:
IDF是逆文檔頻率(Inverse Document Frequency),表示這個單詞在所有文檔中的稀缺程度,越少文檔出現這個詞,IDF值越高。
逆文檔頻率:
TF與IDF的乘積就是TF-IDF。
所以如果一個詞在某一個文檔中頻繁出現,但在所有文檔中卻很少出現,那麼這個詞很可能就是這個文檔的關鍵詞。比如一篇關於原子能的技術文章,「核裂變」「放射性」「半衰期」等詞彙會在這篇文檔中頻繁出現,即TF很高;但是在所有文檔中出現的頻率卻比較低,即IDF也比較高。因此這幾個詞的TF-IDF值就會很高,就可能是這篇文檔的關鍵詞。如果這是一篇關於中國原子能的文章,也許「中國」這個詞也會頻繁出現,即TF也很高,但是「中國」也在很多文檔中出現,那麼IDF就會比較低,最後「中國」這個詞的TF-IDF就很低,不會成為這個文檔的關鍵詞。
提取出關鍵詞以後,就可以利用關鍵詞的詞頻構造特徵向量,比如上面例子關於原子能的文章,「核裂變」「放射性」「半衰期」這三個詞是特徵值,分別出現次數為12、9、4。那麼這篇文章的特徵向量就是(12, 9, 4),再利用前面提到的空間距離計算公式計算與其他文檔的距離,結合KNN演算法就可以實現文檔的自動分類。
貝葉斯公式是一種基於條件概率的分類演算法,如果我們已經知道A和B的發生概率,並且知道了B發生情況下A發生的概率,可以用貝葉斯公式計算A發生的情況下B發生的概率。事實上,我們可以根據A的情況,即輸入數據,判斷B的概率,即B的可能性,進而進行分類。
舉個例子:假設一所學校里男生佔60%,女生佔40%。男生總是穿長褲,女生則一半穿長褲一半穿裙子。假設你走在校園中,迎面走來一個穿長褲的學生,你能夠推斷出這個穿長褲學生是男生的概率是多少嗎?
答案是75%,具體演算法是:
這個演算法就利用了貝葉斯公式,貝葉斯公式的寫法是:
意思是A發生的條件下B發生的概率,等於B發生的條件下A發生的概率,乘以B發生的概率,除以A發生的概率。還是上面這個例子,如果我問你迎面走來穿裙子的學生是女生的概率是多少。同樣帶入貝葉斯公式,可以計算出是女生的概率為100%。其實這個結果我們根據常識也能推斷出來,但是很多時候,常識受各種因素的干擾,會出現偏差。比如有人看到一篇博士生給初中學歷老闆打工的新聞,就感嘆讀書無用。事實上,只是少見多怪,樣本量太少而已。而大量數據的統計規律則能准確反映事物的分類概率。
貝葉斯分類的一個典型的應用場合是垃圾郵件分類,通過對樣本郵件的統計,我們知道每個詞在郵件中出現的概率 ,我們也知道正常郵件概率 和垃圾郵件的概率 ,還可以統計出垃圾郵件中各個詞的出現概率 ,那麼現在一封新郵件到來,我們就可以根據郵件中出現的詞,計算 ,即得到這些詞出現情況下,郵件為垃圾郵件的概率,進而判斷郵件是否為垃圾郵件。
現實中,貝葉斯公式等號右邊的概率,我們可以通過對大數據的統計獲得,當有新的數據到來的時候,我們就可以帶入上面的貝葉斯公式計算其概率。而如果我們設定概率超過某個值就認為其會發生,那麼我們就對這個數據進行了分類和預測,具體過程如下圖所示。
訓練樣本就是我們的原始數據,有時候原始數據並不包含我們想要計算的維度數據,比如我們想用貝葉斯公式自動分類垃圾郵件,那麼首先要對原始郵件進行標注,需要標注哪些郵件是正常郵件、哪些郵件是垃圾郵件。這一類需要對數據進行標注才能進行的機器學習訓練也叫作有監督的機器學習。
E. 尋找找關鍵詞
尋找關鍵詞,主要可以通過以下幾種方法:
1. 查看詞頻統計。可以利用詞頻統計工具,查看相關詞出現的頻率,高頻詞往往就是關鍵詞。如jieba,TextRank等工具可以對文本進行詞頻統計分析。
2. 關鍵詞提取演算法。使用TextRank, TF-IDF等關鍵詞提取演算法,提取文檔中的關鍵詞。這些演算法可以綜合考慮詞頻、詞處在文本中的位置以及與其他詞的關系等,准確提取關鍵詞。
3. 查看標題、摘要、開頭與結尾。文章的標題、摘要及開頭結尾處的詞,往往都是作者想要表達的核心主題或關鍵詞。梳理這些部分中的詞,可以找到關鍵詞。
4. 人工分析文檔主題。人工瀏覽和分析文檔的主要內容與主題,理解作者想要表達的核心觀點,確定文檔覆蓋的關鍵話題與詞彙,這也是找到關鍵詞的有效方法。
5. 專家知識補充。在某個領域內,專家對關鍵詞和話題有獨到認知。可以咨詢相關領域的專家學者,尋求他們的意見建議,補充找到的關鍵詞,提高准確性。
6. 同義詞和相關詞擴充。對找到的關鍵詞,利用同義詞表、詞林表等擴充同義詞和相關詞。同義詞和相關詞也可被視為關鍵詞,擴充關鍵詞列表。
7. 查看其他語言版雹鉛猜本。如果存激鍵在文章的其他語言版本,那麼關鍵詞很可能在不同語言版本中重復出現。比對不同語言版本,可以找到文檔的關鍵詞。
綜上,關鍵詞的尋找需要全面考慮詞頻、演算法檢測、人工分析與專家知識等方法。區分文檔標題、摘要、正文詞彙,理解作者想表達的主旨觀點。擴充同義詞與相關詞,藉助其他語言版本進行比較。才可以准確全面地找到文檔的關鍵詞。
關鍵詞的尋找是一個迭代優化的過程。可以從一種方法入手,然後逐步結合其他方法,在精確與全面之間取得平衡,找到最能源型概括文檔主題與內容的關鍵詞。這需要語言知識,理解能力與文檔分析的綜合運用。
F. TextRank——關鍵詞提取
TextRank 演算法可以脫離語料庫的背景,僅對單篇文檔進行分析就可以提取該文檔談握山的關鍵詞。
TextRank 演算法基於 PageRank 演算法的。 PageRank 演算法是一種網頁排名演算法,其基本思想有兩條:
d 表示阻尼系數,為了解決沒有入鏈網頁的得分。 在 0.85 的阻尼系數下,大約 100 多次迭代 PR 值就能收斂到一個穩定的值,而當阻尼系數接近 1 時,需要的迭代次數會陡然增加很多,且排序不穩定。
鏈接網頁的初始分數如何確定: 演算法開始時會將所有網頁的得分初始化為 1,然後通過多次迭代來對每個網頁的分數進行收斂。收斂時的得分就是網頁最終得分。若不能收斂,也可以通過設定最大迭代次數來對計算進行控制,計算停止時的分數就含中是網頁皮羨的得分。
https://www.zybuluo.com/evilking/note/902585
G. 如何挖掘關鍵詞
挖掘關鍵詞、長尾關鍵詞、常用關鍵詞,作為網站站長、做SEO、宣傳客、淘寶客、其他一般用戶使用等都是必備工具,那麼最好、最方便快捷的方法都有哪些?小編和大家分享更多挖掘關鍵詞方法的工具。
工具/原料
可以上網電腦一台
方法/步驟
1
打開網路搜索「飛達魯長」關鍵詞點擊第一項即可下載。特點:1、自動保管結果系統查詢
2、多詞查詢、斷點查詢。
3、點擊滑鼠右鍵即可追尋到所要搜索的關鍵詞4、過濾功用。過濾可以更加清楚知道哪些詞語是自己想要的詞語。
5、過濾功NEW用法:可以修正過濾的詞。查找到相同關鍵詞會自動刪除,有效保證搜索到寬櫻廳准確並有效能的詞
長尾主要詞又叫長尾詞: 長尾詞就是市場占據份額大,但不人看重,未來可能存在很多搜索量的詞。
名風seo關鍵詞工具,特點:
1.可以設置在同一段時間操作搜索關鍵詞
2.人性化提取關鍵詞,其他關頌隱鍵詞工具稍微一改,網路及搜索量很少
3. 兩次搜索功能,獨立運行文件搜索
站長工具關鍵詞挖掘 --特點,能夠有效查閱多的長尾關鍵詞,容易優化
愛站關鍵詞挖掘工具--特點:簡單,迅捷 ,網頁定位準確慎隱
注意事項
只要用好這幾個關鍵詞工具,做好SEO優化,相信你一定很厲害,加油
H. 把測試集里的文本用tfidf演算法提取出關鍵詞,求個java代碼
//直接粘貼就行。
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.border.EtchedBorder;
import javax.swing.filechooser.FileFilter;
public class Application2 extends JFrame implements Cloneable{
public Application2(){
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setSize(800,700);
this.setLayout(new BorderLayout());
keyWords1=new String[]{"那麼","還是","sdf"};
keyWords2=new String[]{"所以","而且",};
input=new JTextArea();
JPanel ip=new JPanel();
ip.setLayout(new BorderLayout());
ip.add(input,BorderLayout.CENTER);
ip.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "輸入文本"));
output1=new JTextArea();
JPanel o1p=new JPanel();
o1p.setLayout(new BorderLayout());
o1p.add(output1,BorderLayout.CENTER);
o1p.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "以下為"));
output2=new JTextArea();
JPanel o2p=new JPanel();
o2p.setLayout(new BorderLayout());
o2p.add(output2,BorderLayout.CENTER);
o2p.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "以下為"));
JSplitPane split1=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,o1p,o2p);
split1.setDividerLocation(350);
JSplitPane split2=new JSplitPane(JSplitPane.VERTICAL_SPLIT,ip,split1);
split2.setDividerLocation(300);
this.add(split2,BorderLayout.CENTER);
open=new JButton("導入");
open.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JFileChooser chooser=new JFileChooser(".");
chooser.setMultiSelectionEnabled(false);
chooser.addChoosableFileFilter(new FileFilter(){
@Override
public boolean accept(File file) {
if(file.isDirectory())
return true;
int length=file.getName().length();
if(length<5)
return false;
if(file.getName().substring(length-4).equals(".txt"))
return true;
return false;
}
@Override
public String getDescription() {
return "文本文件";
}
});
chooser.showOpenDialog(Application2.this);
File file=chooser.getSelectedFile();
if(file==null)
return;
try {
Scanner sc=new Scanner(file);
String text="";
while(sc.hasNextLine())
text+=sc.nextLine()+"\n";
input.setText(text);
String[] array=getSentences();
output1.setText(getKeySentences(keyWords1,array));
output2.setText(getKeySentences(keyWords2,array));
}catch (IOException e1) {
e1.printStackTrace();
}
}
});
save=new JButton("導出");
save.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JFileChooser chooser=new JFileChooser(".");
chooser.setMultiSelectionEnabled(false);
chooser.addChoosableFileFilter(new FileFilter(){
@Override
public boolean accept(File file) {
if(file.isDirectory())
return true;
int length=file.getName().length();
if(length<5)
return false;
if(file.getName().substring(length-4).equals(".txt"))
return true;
return false;
}
@Override
public String getDescription() {
return "文本文件";
}
});
chooser.showSaveDialog(Application2.this);
File file=chooser.getSelectedFile();
if(file==null)
return;
try {
PrintWriter pw=new PrintWriter(file);
pw.print(output1.getText());
pw.flush();
pw.print(output2.getText());
pw.flush();
}catch (IOException e1) {
e1.printStackTrace();
}
}
});
JPanel buttonPane=new JPanel();
buttonPane.add(open);
buttonPane.add(save);
this.add(buttonPane,BorderLayout.SOUTH);
}
public String[] getSentences(){
ArrayList<String> set=new ArrayList<String>();
int length=input.getText().length();
for(int i=0,last=0;i<length;i++){
String s=String.valueOf(input.getText().charAt(i));
if(s.equals("\n"))
last=i+1;
if(s.equals(".")||s.equals(",")||s.equals("。")||s.equals("。")||s.equals("!")||s.equals("?")||s.equals("?")||s.equals("!")||s.equals(",")){
set.add(input.getText().substring(last,i)+s);
last=i+1;
}
}
return set.<String>toArray(new String[set.size()]);
}
public String getKeySentences(String[] key,String[] sentences){
String result="";
A: for(int i=0;i<sentences.length;i++){
for (int k = 0; k < key.length; k++)
if (sentences[i].contains(key[k].subSequence(0, key[k].length()))) {
result += sentences[i] + "\n";
continue A;
}
}
return result;
}
private JTextArea input;
private JTextArea output1;
private JTextArea output2;
private JButton open;
private JButton save;
private String[] keyWords1;
private String[] keyWords2;
public static void main(String... args){
EventQueue.invokeLater(new Runnable(){
public void run(){
new Application2().setVisible(true);
}
});
}
}
I. 怎麼在一堆圖片中抓取關鍵詞
可以用抽取方法。
有監督無監督抽取方法:無監督關鍵詞提取方法主要有三類:基於統計特徵的關鍵詞提取(TF,TF-IDF);基於詞圖模型的關鍵詞提取(PageRank,TextRank);基於主題模型的關鍵詞提取(LDA)基於統計特徵的關鍵詞提取演算法的思想是利用文檔中詞語的統計信息抽取文檔的關鍵詞;基於詞圖模型的關鍵詞提取首先要構建文檔的語言網路圖,然後對語言進行網路圖分析,在這個圖上尋找具有重要作用的詞或者短語,這些短語就是文檔的關鍵詞;基於主題關鍵詞提取演算法主要利用的是主題模型中關於主題分布的性質進行關鍵詞提取;
將關鍵詞抽取過程視為二分類問題,先提取出候選詞,然後對於每個候選詞劃定標簽,要麼是關鍵詞,要麼不是關鍵詞,然後訓練關鍵詞抽取分類器。當新來一篇文檔時,提取出所有的候選詞,然後利用訓練好的關鍵詞提取分類器,對各個候選詞進行分類,最終將標簽為關鍵詞的候選詞作為關鍵詞。
J. php 要從文章內容,提取關鍵詞,要怎麼寫!
提取關鍵詞,你必須得有個詞庫。然後根據詞庫匹配文章內容。詞庫越多效率越低,文章內容長度橋冊越長敏櫻宏效率越低。
網上針對php有相乾的分詞演算法,你可以搜 」頌裂SCWS 中文分詞「 來看一下。你可以根據裡面的例子來做擴展