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

作者:LogM

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

1. 概述

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

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

2. 致謝

首先要非常感謝3位大佬,我的代碼是借鑑了他們3人的代碼實現的。

主要借鑑的點:letiantian 對中文的處理;comoody 對圖的構建;lostfish 對 PageRank 的實現。

letiantian: https://github.com/letiantian/TextRank4ZH.git

comoody: https://github.com/comoody/TextRank.git

lostfish: https://github.com/lostfish/textrank.git

3. 我自己的實現

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

原本我是給自己定的以下幾個目標:

a. 遵循原論文思路;

b. 代碼簡潔;

c. 優化計算速度;

d. 考慮異常輸入。

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

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

4. 注意事項

代碼裏面會有 xxxx::toLowerCase()xxxx::split() 這兩個奇怪的函數。這是因爲我自己實現的時候用的特殊的字符串處理庫,你們使用時需要自己找庫來替換,當然,這兩個函數自己寫貌似也沒特別大的難度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章