做者:LogMgit
本文原載於 https://segmentfault.com/u/logm/articles ,不容許轉載~github
TextRank 論文地址: https://www.aclweb.org/anthology/W04-3252
上一篇博客 TextRank C++ 版本 提到,兩位大佬的代碼還有改進空間,因此我本身也實現了一個版本。web
首先要很是感謝3位大佬,個人代碼是借鑑了他們3人的代碼實現的。segmentfault
主要借鑑的點:letiantian 對中文的處理;comoody 對圖的構建;lostfish 對 PageRank 的實現。函數
letiantian: https://github.com/letiantian/TextRank4ZH.gitoop
comoody: https://github.com/comoody/TextRank.git優化
lostfish: https://github.com/lostfish/textrank.gitcode
Github地址:https://github.com/imLogM/TextRank_Cpp.git字符串
本來我是給本身定的如下幾個目標:get
a. 遵循原論文思路;
b. 代碼簡潔;
c. 優化計算速度;
d. 考慮異常輸入。
後來我發現,要 b、c、d 兼得真的好難。爲了加速計算速度,用空間換時間,把一些計算中間值單拎了出來,代碼簡潔度--。爲了應對用戶各類奇葩的輸入,寫了不少判斷語句,代碼簡潔度--。
仍是,就是爲了兼容舊的編譯器,range-based for loop
和 匿名函數
是確定不能用的,代碼簡潔度--。
代碼裏面會有 xxxx::toLowerCase()
和 xxxx::split()
這兩個奇怪的函數。這是由於我本身實現的時候用的特殊的字符串處理庫,大家使用時須要本身找庫來替換,固然,這兩個函數本身寫貌似也沒特別大的難度。