【手撕 - 自然语言处理】手撕 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() 这两个奇怪的函数。这是因为我自己实现的时候用的特殊的字符串处理库,你们使用时需要自己找库来替换,当然,这两个函数自己写貌似也没特别大的难度。

    原文作者:LogM
    原文地址: https://segmentfault.com/a/1190000019794118
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞