【手撕 - 天然語言處理】手撕 TextRank(03)我本身實現的 C++ 版

做者:LogMgit

本文原載於 https://segmentfault.com/u/logm/articles ,不容許轉載~github

1. 概述

TextRank 論文地址: https://www.aclweb.org/anthology/W04-3252

上一篇博客 TextRank C++ 版本 提到,兩位大佬的代碼還有改進空間,因此我本身也實現了一個版本。web

2. 致謝

首先要很是感謝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

3. 我本身的實現

Github地址:https://github.com/imLogM/TextRank_Cpp.git字符串

本來我是給本身定的如下幾個目標:get

a. 遵循原論文思路;

b. 代碼簡潔;

c. 優化計算速度;

d. 考慮異常輸入。

後來我發現,要 b、c、d 兼得真的好難。爲了加速計算速度,用空間換時間,把一些計算中間值單拎了出來,代碼簡潔度--。爲了應對用戶各類奇葩的輸入,寫了不少判斷語句,代碼簡潔度--。

仍是,就是爲了兼容舊的編譯器,range-based for loop匿名函數 是確定不能用的,代碼簡潔度--。

4. 注意事項

代碼裏面會有 xxxx::toLowerCase()xxxx::split() 這兩個奇怪的函數。這是由於我本身實現的時候用的特殊的字符串處理庫,大家使用時須要本身找庫來替換,固然,這兩個函數本身寫貌似也沒特別大的難度。

相關文章
相關標籤/搜索