1.jiebaåè¯è¯¦è§£
2.如何用Python提取中文关键词?
3.图排序算法TextRank:Bringing Order into Texts
jiebaåè¯è¯¦è§£
âç»å·´âåè¯æ¯ä¸ä¸ªPython ä¸æåè¯ç»ä»¶ï¼åè§ /fxsjy/jiebaå¯ä»¥å¯¹ä¸æææ¬è¿è¡åè¯ãè¯æ§æ 注ãå ³é®è¯æ½åçåè½ï¼å¹¶ä¸æ¯æèªå®ä¹è¯å ¸ã
æ¬æå æ¬ä»¥ä¸å 容ï¼
1ãjiebaåè¯å çå®è£
2ãjiebaåè¯ç使ç¨æç¨
3ãjiebaåè¯çå·¥ä½åçä¸å·¥ä½æµç¨
4ãjiebaåè¯ææ¶åå°çHMMãTextRankãTF-IDFçç®æ³ä»ç»
å¯ä»¥ç´æ¥ä½¿ç¨pipæ¥è¿è¡å®è£ ï¼
sudo pip install jieba
æè
sudo pip3 install jieba
å ³é®è¯æ½åæ两ç§ç®æ³ï¼åºäºTF-IDFååºäºTextRankï¼
jiebaåè¯æä¸ç§ä¸åçåè¯æ¨¡å¼ï¼ç²¾ç¡®æ¨¡å¼ãå ¨æ¨¡å¼åæç´¢å¼æ模å¼ï¼
对åºçï¼å½æ°åå lå³æ¯å¯¹åºå¾å°listç»æçå½æ°ï¼
精确模å¼æ¯æ常ç¨çåè¯æ¹æ³ï¼å ¨æ¨¡å¼ä¼å°å¥åä¸ææå¯è½çè¯é½å举åºæ¥ï¼æç´¢å¼æ模å¼åéç¨äºæç´¢å¼æ使ç¨ãå ·ä½çå·®å«å¯å¨ä¸ä¸èå·¥ä½æµç¨çåæä¸è¯¦è¿°ã
å¨ä¸è¿°æ¯ä¸ªå½æ°ä¸ï¼é½æå为HMMçåæ°ãè¿ä¸é¡¹è¡¨ç¤ºæ¯å¦å¨åè¯è¿ç¨ä¸å©ç¨HMMè¿è¡æ°è¯åç°ãå ³äºHMMï¼æ¬æéå½ä¸å°ç®è¿°ç¸å ³ç¥è¯ã
å¦å¤åè¯æ¯æèªå®ä¹åå ¸ï¼è¯å ¸æ ¼å¼å dict.txt ä¸æ ·ï¼ä¸ä¸ªè¯å ä¸è¡ï¼æ¯ä¸è¡åä¸é¨åï¼è¯è¯ãè¯é¢ï¼å¯çç¥ï¼ãè¯æ§ï¼å¯çç¥ï¼ï¼ç¨ç©ºæ ¼éå¼ï¼é¡ºåºä¸å¯é¢ åã
å ·ä½ä½¿ç¨æ¹æ³ä¸ºï¼
å ³é®è¯æ½åç两个å½æ°çå®æ´åæ°ä¸ºï¼
å¯ä»¥éè¿
æ¥æå¼æå ³é并è¡åè¯åè½ã
个人æè§ä¸è¬ç¨ä¸å°ï¼å¤§æ件åè¯éè¦æå¨å®ç°å¤è¿ç¨å¹¶è¡ï¼å¥ååè¯ä¹ä¸è³äºç¨è¿ä¸ªã
jiebaåè¯ä¸»è¦éè¿è¯å ¸æ¥è¿è¡åè¯åè¯æ§æ 注ï¼ä¸¤è 使ç¨äºä¸ä¸ªç¸åçè¯å ¸ãæ£å å¦æ¤ï¼åè¯çç»æä¼å£å°å¾å¤§ç¨åº¦ä¸åå³äºè¯å ¸ï¼è½ç¶ä½¿ç¨äºHMMæ¥è¿è¡æ°è¯åç°ã
jiebaåè¯å æ´ä½çå·¥ä½æµç¨å¦ä¸å¾æ示ï¼
ä¸é¢å°æ ¹æ®æºç 详ç»å°åæå个模åçå·¥ä½æµç¨ã
å¨ä¹åå èä¸ï¼æ们å¨èè²çæ¹æ¡ä¸ç¤ºèäºå ³é®æ¥éª¤çè¾åºæ ·ä¾æè¯å ¸æ件çæ ¼å¼æ ·ä¾ãå¨æ¬èä¸é½éç¨ç±»ä¼¼ç表示æ¹å¼ã
jiebaåè¯ä¸ï¼é¦å éè¿å¯¹ç §å ¸çæå¥åçæåæ ç¯å¾ï¼åæ ¹æ®éæ©ç模å¼ä¸åï¼æ ¹æ®è¯å ¸å¯»æ¾æçè·¯å¾å对å¥åè¿è¡æªåæç´æ¥å¯¹å¥åè¿è¡æªåã对äºæªç»éè¯ï¼ä¸å¨è¯å ¸ä¸çè¯ï¼ä½¿ç¨HMMè¿è¡æ°è¯åç°ã
è¯å ¸çæ ¼å¼åºä¸º
word1 freq1 word_type1
word2 freq2 word_type2
â¦
å ¶ä¸èªå®ä¹ç¨æ·è¯å ¸ä¸è¯æ§word_typeå¯ä»¥çç¥ã
è¯å ¸å¨å ¶ä»æ¨¡åçæµç¨ä¸å¯è½ä¹ä¼ç¨å°ï¼ä¸ºæ¹ä¾¿åè¿°ï¼åç»çæµç¨å¾ä¸å°ä¼çç¥è¯å ¸çåå§åé¨åã
å¾bæ¼ç¤ºäºæç´¢å¼æ模å¼çå·¥ä½æµç¨ï¼å®ä¼å¨ç²¾ç¡®æ¨¡å¼åè¯çåºç¡ä¸ï¼å°é¿è¯å次è¿è¡ååã
å¨è¿éæ们åå®è¯»è å·²ç»äºè§£HMMç¸å ³ç¥è¯ï¼å¦æ没æå¯å è¡é 读ä¸ä¸ç« å 容ä¸çHMMç¸å ³é¨åæè è·³è¿æ¬èã
å¨jiebaåè¯ä¸ï¼å°åå¨è¯ä¸çä½ç½®BãMãEãSä½ä¸ºéèç¶æï¼åæ¯è§æµç¶æï¼ä½¿ç¨äºè¯å ¸æ件åå«åå¨åä¹é´ç表ç°æ¦çç©éµï¼finalseg/prob_emit.pyï¼ãåå§æ¦çåé(finalseg/prob_start.py)å转移æ¦çç©éµ(finalseg/prob_trans.py)ãè¿å°±æ¯ä¸ä¸ªæ åç解ç é®é¢ï¼æ ¹æ®æ¦çåå©ç¨viterbiç®æ³å¯¹æ大å¯è½çéèç¶æè¿è¡æ±è§£ã
è¯æ§åæé¨åä¸åè¯æ¨¡åç¨äºåä¸ä¸ªåºç¡çåè¯å¨ï¼å¯¹äºè¯å ¸è¯çè¯æ§ï¼å°ç´æ¥ä»è¯å ¸ä¸æåï¼ä½æ¯å¯¹äºæ°è¯ï¼è¯æ§åæé¨åæä¸ä¸ªä¸å±çæ°è¯åå ¶è¯æ§çåç°æ¨¡åã
ç¨äºè¯æ§æ 注çHMM模åä¸ç¨äºåè¯çHMM模åç¸ä¼¼ï¼åæ ·å°æååºåè§ä¸ºå¯è§ç¶æï¼ä½æ¯éèç¶æä¸åæ¯ååçè¯çä½ç½®ï¼B/E/M/Sï¼ï¼èåæäºè¯çä½ç½®ä¸è¯æ§çç»åï¼å¦(B,源码v)(B,n)(S,n)ççãå æ¤å ¶åå§æ¦çåéã转移æ¦çç©éµå表ç°æ¦çç©éµåä¸ä¸èä¸æç¨çç¸æ¯é½è¦åºå¤§çå¤ï¼ä½æ¯å ¶æ¬è´¨ä»¥åè¿ç®æ¥éª¤é½æ²¡æååã
å ·ä½çå·¥ä½æµç¨å¦ä¸å¾æ示ã
jiebaåè¯ä¸æ两ç§ä¸åçç¨äºå ³é®è¯æ½åçç®æ³ï¼åå«ä¸ºTextRankåTF-IDFãå®ç°æµç¨æ¯è¾ç®åï¼å ¶æ ¸å¿å¨äºç®æ³æ¬èº«ãä¸é¢ç®åå°ç»åºå®ç°æµç¨ï¼å ·ä½çç®æ³å¯ä»¥åé ä¸ä¸ç« å 容ã
TextRankæ¹æ³é»è®¤çéè¯æ§ï¼èTF-IDFæ¹æ³æ¨¡åä¸è¿è¡è¯æ§çéã
å¨æ¬ç« ä¸ï¼å°ä¼ç®åä»ç»ç¸å ³çç®æ³ç¥è¯ï¼ä¸»è¦å æ¬ç¨äºæ°è¯åç°çé马å°ç§å¤«æ¨¡ååç»´ç¹æ¯ç®æ³ãç¨äºå ³é®è¯æåçTextRankåTF-IDFç®æ³ã
HMMå³é马å°ç§å¤«æ¨¡åï¼æ¯ä¸ç§åºäºé©¬å°ç§å¤«å设çç»è®¡æ¨¡åãä¹æ以为âéâï¼æ¯å 为ç¸è¾äºé©¬å°ç§å¤«è¿ç¨HMMæçæªç¥çåæ°ãå¨ä¸çä¸ï¼è½çå°çå¾å¾é½æ¯è¡¨è±¡ï¼èäºç©ççæ£ç¶æå¾å¾é½éå«å¨è¡¨è±¡ä¹ä¸ï¼å¹¶ä¸ä¸è¡¨è±¡æä¸å®çå ³èå ³ç³»ã
å ¶ä¸ï¼SãOåå«è¡¨ç¤ºç¶æåºåä¸è§æµåºåã
å¦æ读è è¿å¯¹è¿é¨åå 容å¿åçé®ï¼ä¸å¦¨å å¾ä¸é 读ï¼ä¸é¢æ们å°ä»¥ä¸ä¸ªæ¯è¾ç®åçä¾å对HMMå解ç ç®æ³è¿è¡å®é 说æä¸æ¼ç¤ºï¼å¨è¯»å®ä¸ä¸å°èä¹åååæ¥çè¿äºå¼åï¼æ许è½å¤æç¶å¤§æã
ä¸é¢ä»¥ä¸ä¸ªç®åçä¾åæ¥è¿è¡éè¿°ï¼
å设å°ææä¸ä¸ªç½åå°çº¢ï¼å°çº¢æ¯å¤©é½ä¼å¨æåå说æèªå·±ä»å¤©åäºä»ä¹ï¼å¹¶ä¸åè®¾å ¶ä» åå½å¤©å¤©æ°çå½±åï¼èå½å¤©ç天æ°ä¹åªååä¸å¤©å¤©æ°çå½±åã
äºå°æèè¨ï¼å°çº¢æ¯å¤©åäºä»ä¹æ¯å¯è§ç¶æï¼èå°çº¢é£éç天æ°å¦ä½å°±æ¯éèç¶æï¼è¿å°±ææäºä¸ä¸ªHMM模åãä¸ä¸ªHMM模åéè¦æäºä¸ªè¦ç´ ï¼éèç¶æéãè§æµéã转移æ¦çãè§æµæ¦çååå§ç¶ææ¦çã
å³å¨ç¬¬j个éèç¶ææ¶ï¼è¡¨ç°ä¸ºi表ç°ç¶æçæ¦çãå¼ä¸çnåm表示éèç¶æéåè§æµéä¸çæ°éã
æ¬ä¾ä¸å¨ä¸åç天æ°ä¸ï¼å°çº¢è¦åä¸åäºæ çæ¦çä¹ä¸åï¼è§æµæ¦çä»¥è¡¨æ ¼çå½¢å¼åç°å¦ä¸ï¼
å ¶ä¸
é¤æ¤ä¹å¤ï¼è¿éè¦ä¸ä¸ªåå§ç¶ææ¦çåéÏï¼å®è¡¨ç¤ºäºè§æµå¼å§æ¶ï¼å³t=0æ¶ï¼éèç¶æçæ¦çå¼ãæ¬ä¾ä¸æ们æå®Ï={ 0,0,1}ã
è³æ¤ï¼ä¸ä¸ªå®æ´çé马å°ç§å¤«æ¨¡åå·²ç»å®ä¹å®æ¯äºã
HMMä¸è¬ç±ä¸ç±»é®é¢ï¼
æ¦ç计ç®é®é¢ï¼å³ç»å®A,B,Ïåéèç¶æåºåï¼è®¡ç®è§æµåºåçæ¦çï¼
é¢æµé®é¢ï¼ä¹æ解ç é®é¢ï¼å·²ç¥A,B,Ïåè§æµåºåï¼æ±æä¼å¯è½å¯¹åºçç¶æåºåï¼
å¦ä¹ é®é¢ï¼å·²ç¥è§æµåºåï¼ä¼°è®¡æ¨¡åçA,B,Ïåæ°ï¼ä½¿å¾å¨è¯¥æ¨¡åä¸è§æµåºåçæ¦çæ大ï¼å³ç¨æ大似ç¶ä¼°è®¡çæ¹æ³ä¼°è®¡åæ°ã
å¨jiebaåè¯ä¸æç¨çæ¯è§£ç é®é¢ï¼æ以æ¤å¤å¯¹é¢æµé®é¢åå¦ä¹ é®é¢ä¸åæ·±å ¥æ¢è®¨ï¼å¨ä¸ä¸å°èä¸æ们å°ç»§ç»ä»¥æ¬èä¸çä¾å为ä¾ï¼å¯¹è§£ç é®é¢è¿è¡æ±è§£ã
å¨jiebaåè¯ä¸ï¼éç¨äºHMMè¿è¡æ°è¯åç°ï¼å®å°æ¯ä¸ä¸ªå表示为B/M/E/Såå«ä»£è¡¨åºç°å¨è¯å¤´ãè¯ä¸ãè¯å°¾ä»¥åååæè¯ãå°B/M/E/Sä½ä¸ºHMMçéèç¶æï¼èè¿ç»çå个ååä½ä¸ºè§æµç¶æï¼å ¶ä»»å¡å³ä¸ºå©ç¨è§æµç¶æé¢æµéèç¶æï¼å¹¶ä¸å ¶æ¨¡åçA,B,Ïæ¦çå·²ç»ç»åºå¨æ件ä¸ï¼æ以è¿æ¯ä¸ä¸ªæ åç解ç é®é¢ãå¨jiebaåè¯ä¸éç¨äºViterbiç®æ³æ¥è¿è¡æ±è§£ã
Viterbiç®æ³çåºæ¬ææ³æ¯ï¼å¦ææ佳路å¾ç»è¿ä¸ä¸ªç¹ï¼é£ä¹èµ·å§ç¹å°è¿ä¸ªç¹çè·¯å¾ä¸å®æ¯æçè·¯å¾ï¼å¦åç¨èµ·å§ç¹å°è¿ç¹æ´ççä¸æ¡è·¯å¾ä»£æ¿è¿æ®µï¼å°±ä¼å¾å°æ´ççè·¯å¾ï¼è¿æ¾ç¶æ¯çç¾çï¼ä»èµ·å§ç¹å°ç»æç¹çè·¯å¾ï¼å¿ ç¶è¦ç»è¿ç¬¬n个æ¶å»ï¼åå¦ç¬¬n个æ¶å»æk个ç¶æï¼é£ä¹æç»è·¯å¾ä¸å®ç»è¿èµ·å§ç¹å°æ¶å»nä¸k个ç¶æéæçè·¯å¾çç¹ã
å°æ¶å»téèç¶æ为iææå¯è½çç¶æ转移路å¾i1å°i2çç¶ææ大å¼è®°ä¸º
ä¸é¢æ们继ç»ä»¥ä¸ä¸èä¸çä¾åæ¥å¯¹viterbiç®æ³è¿è¡éè¿°ï¼
å°æä¸ç¥éå°çº¢æ¯åªé人ï¼ä»åªè½éè¿å°çº¢æ¯å¤©çæ´»å¨æ¥æ¨æé£éç天æ°ã
å设è¿ç»ä¸å¤©ï¼å°çº¢çæ´»å¨ä¾æ¬¡ä¸ºï¼âç¡è§-æ游æ-éè¡âï¼æ们å°æ®æ¤è®¡ç®ææå¯è½ç天æ°æ åµã
表示第ä¸å¤©ä¸ºé¨å¤©è½å¤ä½¿å¾ç¬¬äºå¤©ä¸ºæ´å¤©çæ¦çæ大ï¼ä¹å°±æ¯è¯´å¦æ第äºå¤©æ¯æ´å¤©å¨æçè·¯å¾ä¸çè¯ï¼ç¬¬ä¸å¤©æ¯é¨å¤©ä¹ä¸å®å¨æçè·¯å¾ä¸ï¼åè§ä¸æä¸Viterbiç®æ³çåºæ¬ææ³ï¼
æ¤æ¶å·²ç»å°äºæåçæ¶å»ï¼æ们å¼å§å溯ã
å ¶è®¡ç®è¿ç¨ç¤ºæå¾å¦ä¸å¾æ示ã
ï¼çè·¯å¾ã
TF-IDFï¼è¯é¢-éææ¬é¢çï¼æ¯ä¸ç§ç¨ä»¥è¯ä¼°åè¯å¨ææ¡£ä¸éè¦ç¨åº¦çç»è®¡æ¹æ³ãå®çæ ¸å¿ææ³æ¯ï¼å¦ææ个è¯å¨ä¸ç¯æç« ä¸åºç°çé¢çå³TFé«ï¼å¹¶ä¸å¨å ¶ä»ææ¡£ä¸åºç°çå¾å°ï¼å认为è¿ä¸ªè¯æå¾å¥½çç±»å«åºåè½åã
å ¶ä¸ï¼
TextRankæ¯ä¸ç§ç¨ä»¥å ³é®è¯æåçç®æ³ï¼å 为æ¯åºäºPageRankçï¼æ以å ä»ç»PageRankã
PageRankéè¿äºèç½ä¸çè¶ é¾æ¥å ³ç³»ç¡®å®ä¸ä¸ªç½é¡µçæåï¼å ¶å ¬å¼æ¯éè¿ä¸ç§æ票çææ³æ¥è®¾è®¡çï¼å¦ææ们计ç®ç½é¡µAçPageRankå¼ï¼é£ä¹æ们éè¦ç¥éåªäºç½é¡µé¾æ¥å°Aï¼å³é¦å å¾å°Açå ¥é¾ï¼ç¶åéè¿å ¥é¾ç»ç½é¡µAè¿è¡æ票æ¥è®¡ç®AçPRå¼ãå ¶å ¬å¼ä¸ºï¼
å ¶ä¸ï¼
d为é»å°¼ç³»æ°ï¼åå¼èå´ä¸º0-1ï¼ä»£è¡¨ä»ä¸å®ç¹æåå ¶ä»ä»»æç¹çæ¦çï¼ä¸è¬åå¼0.ã
å°ä¸å¼å¤æ¬¡è¿ä»£å³å¯ç´å°æ¶æå³å¯å¾å°ç»æã
TextRankç®æ³åºäºPageRankçææ³ï¼å©ç¨æ票æºå¶å¯¹ææ¬ä¸éè¦æåè¿è¡æåºãå¦æ两个è¯å¨ä¸ä¸ªåºå®å¤§å°ççªå£å å ±ååºç°è¿ï¼å认为两个è¯ä¹é´åå¨è¿çº¿ã
å ¬å¼ä¸PageRankçåºæ¬ç¸åãå¤æ¬¡è¿ä»£ç´è³æ¶æï¼å³å¯å¾å°ç»æã
å¨jiebaåè¯ä¸ï¼TextRank设å®çè¯çªå£å¤§å°ä¸º5ï¼å°å ¬å¼1è¿ä»£æ¬¡çç»æä½ä¸ºæç»æéçç»æï¼èä¸ä¸å®è¿ä»£è³æ¶æã
如何用Python提取中文关键词?
本文引导你探索如何利用Python从中文文本中提取关键词。如果你希望快速了解文章主旨而无需阅读全文,源码本方法或许能助你一臂之力。源码
好友对自然语言处理产生了兴趣,源码计划借助自动化手段从长文本中抽取关键词,源码以把握文章主题。源码java源码共享他询问我如何实现这一目标。源码
我推荐他阅读《如何用Python从海量文本提取主题?》一文,源码但随后发现文章侧重于大量文档的源码聚类分析,并未覆盖单一文本关键词提取的源码介绍。因此,源码本文旨在补全这一部分知识。源码
关键词提取过程并不复杂,源码但需留意避免常见陷阱。源码首先,源码确保安装Python环境,推荐使用Anaconda集成环境。snabbdom源码下载并安装适合你操作系统的最新版本。
准备配套的GitHub项目,包括源代码文件和数据文件。下载压缩包解压后,目录结构应包含README.md文件、数据文件sample.txt以及程序源代码文件demo-extract-keyword.ipynb。
关键词提取工具选用结巴分词。在Jupyter笔记本环境中运行代码,peedit 源码导入结巴分词的关键词提取功能。通过读取sample.txt文件内容,分别使用TF-idf与TextRank方法提取关键词。默认显示个关键词,可按需调整topK参数。
TF-idf方法综合考虑词频与逆文档频率,旨在识别重要性较高的关键词。而TextRank则基于图论原理,ClassEditor源码通过迭代计算节点权重以识别关键词汇。两种方法的关键词提取结果可能存在差异,具体效果需根据实际文本内容而定。
本文提供了一个快速从中文文本中提取关键词的Python方案,包括环境准备、数据准备、关键词提取方法应用与原理简述。欢迎分享你的facegen源码经验和思考,与他人共同探讨关键词提取的最佳实践。
图排序算法TextRank:Bringing Order into Texts
图排序算法TextRank在文本处理中发挥着重要作用,它是一种无监督的排序技术,主要应用于关键词提取和句子提取。TextRank基于PageRank的“投票机制”,通过构建图来决定顶点的重要性,每个顶点(如单词、短语或句子)的得分反映了其在整个文本中的影响力。
算法的核心是迭代计算,每个顶点的得分取决于其连接的其他顶点。阻尼因子(通常设为0.)模拟了随机游走,使得算法在考虑局部上下文的同时,也能考虑全局信息。在文本应用中,构建图时,需要选择合适的文本单元(如词性过滤),并确定它们之间的关系,如共现或相似性。
关键词提取中,TextRank通过单词共现关系确定重要性;而在句子提取中,使用句子间的相似度进行连接。TextRank算法具有高度的可移植性,Python库如jieba提供了一键调用的接口,Scala也有多种实现方式供选择。
总的来说,TextRank通过巧妙地处理文本单位和关系构建,实现了对文本中关键信息的有效提取和排序,为自然语言处理任务提供了有力的工具。想要深入了解更多,可以参考文章末尾提供的源码链接和相关研究。