乐趣区

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

退出移动版