色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RAKE算法原理介紹

深度學習自然語言處理 ? 來源:ChallengeHub ? 作者:ChallengeHub ? 2022-08-22 10:50 ? 次閱讀

RAKE簡介

RAKE英文全稱為Rapid Automatic keyword extraction,中文稱為快速自動關鍵字提取,是一種非常高效的關鍵字提取算法,可對單個文檔進行操作,以實現對動態集合的應用,也可非常輕松地應用于新域,并且在處理多種類型的文檔時也非常有效。01af5d20-205e-11ed-ba43-dac502259ad0.png

2

算法思想

RAKE算法用來做關鍵詞(keyword)的提取,實際上提取的是關鍵的短語(phrase),并且傾向于較長的短語,在英文中,關鍵詞通常包括多個單詞,但很少包含標點符號和停用詞,例如and,the,of等,以及其他不包含語義信息的單詞。

RAKE算法首先使用標點符號(如半角的句號、問號、感嘆號、逗號等)將一篇文檔分成若干分句,然后對于每一個分句,使用停用詞作為分隔符將分句分為若干短語,這些短語作為最終提取出的關鍵詞的候選詞。

最后,每個短語可以再通過空格分為若干個單詞,可以通過給每個單詞賦予一個得分,通過累加得到每個短語的得分。一個關鍵點在于將這個短語中每個單詞的共現關系考慮進去。最終定義的公式是:

3

算法步驟

(1)算法首先對句子進行分詞,分詞后去除停用詞,根據停 用詞劃分短語;

(2)之后計算每一個詞在短語的共現詞數,并構建 詞共現矩陣;

(3)共現矩陣的每一列的值即為該詞的度deg(是一個網絡中的概念,每與一個單詞共現在一個短語中,度就加1,考慮該單詞本身),每個詞在文本中出現的次數即為頻率freq;

(4)得分score為度deg與頻率 freq的商,score越大則該詞更重 ;

(5)最后按照得分的大小值降序 輸出該詞所在的短語。

01cbe4f4-205e-11ed-ba43-dac502259ad0.png

下面我們以一個中文例子具體解釋RAKE算法原理,例如“系統有聲音,但系統托盤的音量小喇叭圖標不見了”,經過分詞、去除停用詞處理 后得到的詞集W = {系統,聲音,托盤,音量,小喇叭,圖標,不見},短語集D={系統,聲音,系統托盤,音量小喇叭圖標不見},詞共現矩陣如表:01de99f0-205e-11ed-ba43-dac502259ad0.png

每一個詞的度為deg={"系統”:2,“聲音”:1,“托盤”:1; “音量” :3; “小喇叭” :3,“圖標” :3,“不見” :3},頻率freq = { “系統” :2, “聲音” :1, “托盤” :1 ;“音量” :1;“小喇叭” :1, “圖標”丄“不見” :1}, score ={“系統”:1,“聲音”:1,“托 盤” :1 ;“音量” :1小喇叭” :3, “圖標” :3, “不見” :3 },輸出結果為{音量小喇叭圖標不見 ,系統托盤,系統,聲音}

4

代碼實現

importstring

fromtypingimportDict,List,Set,Tuple

PUNCTUATION=string.punctuation.replace(''','')#Donotuseapostropheasadelimiter

ENGLISH_WORDS_STOPLIST:List[str]=[
'(',')','and','of','the','amongst','with','from','after','its','it','at','is',
'this',',','.','be','in','that','an','other','than','also','are','may','suggests',
'all','where','most','against','more','have','been','several','as','before',
'although','yet','likely','rather','over','a','for','can','these','considered',
'used','types','given','precedes',
]


defsplit_to_tokens(text:str)->List[str]:
'''
Splittextstringtotokens.
Behaviorissimilartostr.split(),
butemptylinesareomittedandpunctuationmarksareseparatedfromword.
Example:
split_to_tokens('Johnsaid'Hey!'(andsomeotherwords.)')->
->['John','said',''','Hey','!',''','(','and','some','other','words','.',')']
'''
result=[]
foritemintext.split():
whileitem[0]inPUNCTUATION:
result.append(item[0])
item=item[1:]
foriinrange(len(item)):
ifitem[-i-1]notinPUNCTUATION:
break
ifi==0:
result.append(item)
else:
result.append(item[:-i])
result.extend(item[-i:])
return[itemforiteminresultifitem]


defsplit_tokens_to_phrases(tokens:List[str],stoplist:List[str]=None)->List[str]:
"""
Mergetokensintophrases,delimitedbyitemsfromstoplist.
Phraseisasequenceoftokenthathasthefollowingproperties:
-phrasecontains1ormoretokens
-tokensfromphrasegoinarow
-phrasedoesnotcontaindelimitersfromstoplist
-eithertheprevious(notinaphrase)tokenbelongstostoplistoritisthebeginningoftokenslist
-eitherthenext(notinaphrase)tokenbelongstostoplistoritistheendoftokenslist
Example:
split_tokens_to_phrases(
tokens=['Mary','and','John',',','some','words','(','and','other','words',')'],
stoplist=['and',',','.','(',')'])->
->['Mary','John','somewords','otherwords']
"""
ifstoplistisNone:
stoplist=ENGLISH_WORDS_STOPLIST
stoplist+=list(PUNCTUATION)

current_phrase:List[str]=[]
all_phrases:List[str]=[]
stoplist_set:Set[str]={stopword.lower()forstopwordinstoplist}
fortokenintokens:
iftoken.lower()instoplist_set:
ifcurrent_phrase:
all_phrases.append(''.join(current_phrase))
current_phrase=[]
else:
current_phrase.append(token)
ifcurrent_phrase:
all_phrases.append(''.join(current_phrase))
returnall_phrases


defget_cooccurrence_graph(phrases:List[str])->Dict[str,Dict[str,int]]:
"""
Getgraphthatstorescooccurenceoftokensinphrases.
Matrixisstoredasdict,
wherekeyistoken,valueisdict(keyissecondtoken,valueisnumberofcooccurrence).
Example:
get_occurrence_graph(['Mary','John','somewords','otherwords'])->{
'mary':{'mary':1},
'john':{'john':1},
'some':{'some':1,'words':1},
'words':{'some':1,'words':2,'other':1},
'other':{'other':1,'words':1}
}
"""
graph:Dict[str,Dict[str,int]]={}
forphraseinphrases:
forfirst_tokeninphrase.lower().split():
forsecond_tokeninphrase.lower().split():
iffirst_tokennotingraph:
graph[first_token]={}
graph[first_token][second_token]=graph[first_token].get(second_token,0)+1
returngraph


defget_degrees(cooccurrence_graph:Dict[str,Dict[str,int]])->Dict[str,int]:
"""
Getdegreesforalltokensbycooccurrencegraph.
Resultisstoredasdict,
wherekeyistoken,valueisdegree(sumoflengthsofphrasesthatcontainthetoken).
Example:
get_degrees(
{
'mary':{'mary':1},
'john':{'john':1},
'some':{'some':1,'words':1},
'words':{'some':1,'words':2,'other':1},
'other':{'other':1,'words':1}
}
)->{'mary':1,'john':1,'some':2,'words':4,'other':2}
"""
return{token:sum(cooccurrence_graph[token].values())fortokenincooccurrence_graph}


defget_frequencies(cooccurrence_graph:Dict[str,Dict[str,int]])->Dict[str,int]:
"""
Getfrequenciesforalltokensbycooccurrencegraph.
Resultisstoredasdict,
wherekeyistoken,valueisfrequency(numberoftimesthetokenoccurs).
Example:
get_frequencies(
{
'mary':{'mary':1},
'john':{'john':1},
'some':{'some':1,'words':1},
'words':{'some':1,'words':2,'other':1},
'other':{'other':1,'words':1}
}
)->{'mary':1,'john':1,'some':1,'words':2,'other':1}
"""
return{token:cooccurrence_graph[token][token]fortokenincooccurrence_graph}


defget_ranked_phrases(phrases:List[str],*,
degrees:Dict[str,int],
frequencies:Dict[str,int])->List[Tuple[str,float]]:
"""
GetRAKEmeasureforeveryphrase.
Resultisstoredaslistoftuples,everytuplecontainsofphraseanditsRAKEmeasure.
Itemsaresortednon-ascendingbyRAKEmeasure,thanalphabeticallybyphrase.
"""
processed_phrases:Set[str]=set()
ranked_phrases:List[Tuple[str,float]]=[]
forphraseinphrases:
lowered_phrase=phrase.lower()
iflowered_phraseinprocessed_phrases:
continue
score:float=sum(degrees[token]/frequencies[token]fortokeninlowered_phrase.split())
ranked_phrases.append((lowered_phrase,round(score,2)))
processed_phrases.add(lowered_phrase)
#Sortbyscorethanbyphrasealphabetically.
ranked_phrases.sort(key=lambdaitem:(-item[1],item[0]))
returnranked_phrases


defrake_text(text:str)->List[Tuple[str,float]]:
"""
GetRAKEmeasureforeveryphraseintextstring.
Resultisstoredaslistoftuples,everytuplecontainsofphraseanditsRAKEmeasure.
Itemsaresortednon-ascendingbyRAKEmeasure,thanalphabeticallybyphrase.
"""
tokens:List[str]=split_to_tokens(text)
phrases:List[str]=split_tokens_to_phrases(tokens)
cooccurrence:Dict[str,Dict[str,int]]=get_cooccurrence_graph(phrases)
degrees:Dict[str,int]=get_degrees(cooccurrence)
frequencies:Dict[str,int]=get_frequencies(cooccurrence)
ranked_result:List[Tuple[str,float]]=get_ranked_phrases(phrases,degrees=degrees,frequencies=frequencies)
returnranked_result

執行效果:

if__name__=='__main__':
text='Mercy-classincludesUSNSMercyandUSNSComforthospitalships.Credit:USNavyphotoMassCommunicationSpecialist1stClassJasonPastrick.TheUSNavalAirWarfareCenterAircraftDivision(NAWCAD)LakehurstinNewJerseyisusinganadditivemanufacturingprocesstomakefaceshields.........'
ranked_result=rake_text(text)
print(ranked_result)

關鍵短語抽取效果如下:

[
('additivemanufacturingprocesstomakefaceshields.the3dprintingfaceshields',100.4),
('usnavyphotomasscommunicationspecialist1stclassjasonpastrick',98.33),
('usnavy’smercy-classhospitalshipusnscomfort.currentlystationed',53.33),
...
]
審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4608

    瀏覽量

    92844
  • 網絡
    +關注

    關注

    14

    文章

    7557

    瀏覽量

    88737
  • Rake
    +關注

    關注

    0

    文章

    2

    瀏覽量

    7335

原文標題:【NLP基礎】英文關鍵詞抽取RAKE算法

文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    指紋識別算法流程介紹

    本帖最后由 mr.pengyongche 于 2013-4-30 03:26 編輯 指紋識別算法流程介紹指紋識別算法在特征量的選擇方法和任意角度旋轉時不變的特征量照算法上具有鮮明
    發表于 11-09 17:31

    數學建模十大算法介紹

    算法是程序的靈魂,本資料詳細介紹了數學建模當中的主要幾個算法的應用分析,希望對大家在編程解決其他問題的時候有所幫助
    發表于 11-11 09:40

    Rake簡介和自定義Rake任務

    Rake簡介及如何自定義Rake任務(rake task)
    發表于 04-07 09:03

    SVPWM算法架構介紹

    簡要文檔說明算法介紹算法架構如下所示,其中采用SVPWM矢量控制,id=0。主要包括三個部分:轉速環PI調節器,電流環PI調節器,SVPWM算法等。主要參數計算3.1 轉速環ADRC理
    發表于 08-27 07:41

    SVPWM的原理及法則推導和控制算法介紹

    包含SVPWM的算法介紹,基本原理,以及詳細的公式推導,詳細的圖表示意,是初學FOC,準備自己手寫FOC庫或者理解FOC算法的工程師的有利手冊,手冊中也簡單介紹了SVPWM與SPWM的
    發表于 10-07 09:13

    在ADSP2181上實現Rake接收機路徑搜索

    在ADSP2181上實現Rake接收機路徑搜索
    發表于 05-09 14:56 ?19次下載

    用于TD-SCDMA通信終端的RAKE接收機

    用于TD-SCDMA通信終端的RAKE接收機 1引言 2數字檢測算法 3RAKE接收機的性能
    發表于 09-15 17:06 ?25次下載

    自適應RAKE接收技術

    傳統的RAKE接收機能夠在一定程度上檢測合并多徑干擾,但在多徑數大于分集數時性能下降。文中提出一種自適應RAKE接收機, 在多徑數大于分集數時明顯提高了RAKE接收機的性能。
    發表于 10-16 17:31 ?0次下載

    RAKE接收機與分集接收

    介紹了在移動通信系統中對抗多徑衰落的一種重要技術——分集接收技術,并分析了各種分集、合并技術的優缺點,提出了RAKE接收機的概念和結構。
    發表于 10-16 17:32 ?12次下載

    擴頻通信系統中Rake接收性能仿真研究

    在擴頻通信中,Rake接收是抵抗多徑衰落的有效方法。本文首先介紹無線移動通信的信道特性,然后對Rake接收的基本原理和接收機結構進行詳細描述,并對Rake接收性能進行了仿真比較。
    發表于 05-06 18:35 ?31次下載
    擴頻通信系統中<b class='flag-5'>Rake</b>接收性能仿真研究

    rake接收機的工作原理

    RAKE接收機是一種能分離多徑信號并有效合并多徑信號能量的最終接收機。 RAKE接收技術是第三代CDMA移動通信系統中的一項重要技術。在CDMA移動通信系統中,由于信號帶寬較寬,存在著復雜的多徑
    發表于 11-11 11:33 ?9295次閱讀

    RAKE接收機的合并方式

    RAKE接收機是一種能分離多徑信號并有效合并多徑信號能量的最終接收機。RAKE接收機合并時采用的準則和方式主要可以分為三種:最大比值合并、等增益合并、選擇式合并等。下面分別介紹
    發表于 11-13 08:55 ?7741次閱讀

    RAKE接收機的分集接收原理

     分集接收技術是一種重要的對抗多徑衰落的技術。使用分集接收技術的前提是系統的多徑分量的衰落相互獨立。同一通信系統中,可以同時采用多種分集方式以減小誤碼率。RAKE接收機就是通過將可分離的多徑按其強度成比例合并,從而把多徑中的能量收集起來。
    發表于 11-13 09:16 ?1.6w次閱讀

    RAKE接收機的作用及優缺點

    RAKE接收機是一種能分離多徑信號并有效合并多徑信號能量的最終接收機。 RAKE接收技術是第三代CDMA移動通信系統中的一項重要技術。在CDMA移動通信系統中,由于信號帶寬較寬,存在著復雜的多徑
    發表于 11-13 09:50 ?1.6w次閱讀

    RAKE接收機的原理介紹和使用MATLAB以及RAKE接收機的性能說明等介紹

    RAKE接收技術是第三代移動通信系統中的一項重要技術。在移動通信系統中,由于信號帶寬較寬,存在著復雜的多徑無線電信號,通信受到多徑衰落的影響。RAKE接收技術實際上是一種多徑分集接收技術,可以在時間上分辨出細微的多徑信號,對這些分辨出來的多徑信號分別進行加權調整、使之復合
    發表于 01-03 17:21 ?15次下載
    <b class='flag-5'>RAKE</b>接收機的原理<b class='flag-5'>介紹</b>和使用MATLAB以及<b class='flag-5'>RAKE</b>接收機的性能說明等<b class='flag-5'>介紹</b>
    主站蜘蛛池模板: 成年人国产视频| 欧美xxxxb| 亚洲国产精品一区二区三区在线观看| av先锋影音资源男人站| 麻豆国产精品久久人妻| 亚洲精品无AMM毛片| 国产精品99久久久久久WWW| 日本色呦呦| qvod伦理片| 欧美亚洲日韩欧洲不卡| a色毛片免费视频| 嫩草影院在线观看精品| 99精品视频一区在线视频免费观看 | 13小箩利洗澡无码视频APP| 九九九九九热| 亚洲午夜精品aaa级久久久久| 黑人性xxx| 亚洲午夜精品aaa级久久久久| 解开白丝老师的短裙猛烈进入| 亚洲精品m在线观看| 果冻传媒视频在线观看完整版免费 | 99爱在线观看| 免费在线视频成人| 99热在线免费播放| 欧美日韩国产高清综合二区| free18sex性自拍裸舞| 欧洲内射VIDEOXXX3D| 苍井空教师BD在线观看全集| 日本肉肉口番工全彩动漫| 高清mv视频免费观看| 甜涩性爱下载| 国产露脸无码A区久久| 亚洲蜜桃AV色情精品成人| 精品一区二区三区色花堂| 一区三区三区不卡| 老司机福利在视频在ae8| 97视频在线免费播放| 青青草原成人| 国产成人在线播放视频| 亚洲成熟人网站| 九色PORNY丨视频入口|