GeneralNewsExtractor icon indicating copy to clipboard operation
GeneralNewsExtractor copied to clipboard

[讨论] 对于MD类文章的支持

Open x956606865 opened this issue 6 years ago • 3 comments

看到作者的这个工具后,因为刚好在学Rust,就尝试按照论文用rust也写了个类似的工具。但是感觉还是有点瑕疵。

论文主要针对的是标准的新闻页面,所以最后打分的时候会加入p标签的权重来打分,因为标准新闻页面分段必然是p标签,所以正文的p标签密度会影响到分数。

然后我就想着试试技术类文章页面呢?我尝试了掘金和简书,发现几乎无法提取到有效内容。对比html后发现,这两个都是将MD转换成html来的,所以内容中p标签极少,大部分都是li、code等标签。段落分段也是直接使用的div标签。

所以我尝试把div的直接文本子元素包裹一层p标签,发现效果没有什么提升。

然后我又尝试把li、code等能直接包裹文本的块级文本标签直接当成p标签计数,发现也没有什么提升。

再检查所有标签的打分数据后,发现最主要的影响元素是因为MD转换的html文章,正文内部包裹了太多的标签了,正文长度26523的一篇文章,内部标签有接近2700个,导致实际的正文标签的文本密度极低,如果有一个p标签内容较长,那么他的文本密度就会极高,最后打分也会远高于真正的正文标签。

所以,我在想是否有什么方法可以更好的支持MD的这种正文提取?

测试用的文章:<https://juejin.im/post/5d9bf530518825427b27639d>

正文标签数据:article(score:5.696602582296532, p_tag_num:67, td:10, sd: 0 , link_tag_num: 17, link_tag_text_length:214,tag_num:2526, text_length:26199)

部分p标签数据:p(score:5.977026284633939, p_tag_num:1, td:90, sd:0 , link_tag_num: 1, link_tag_text_length:9,tag_num:2, text_length:99):

x956606865 avatar Oct 11 '19 03:10 x956606865

突然发现,打分时候用到的p标签数这个数量是不是指的该节点的直系子标签?因为我计算的是所有后代的p标签总数,导致拉低的父级的评分?

x956606865 avatar Oct 11 '19 04:10 x956606865

这个问题是这篇论文的致命缺点。所以我认为,对于技术类文章、MD转换的文章,应该放弃试用文本密度这种方案。并且,对于技术类文章,必需要保持代码的格式和缩进,不能擅自把代码中的纯文本提取出来。

kingname avatar Mar 13 '20 04:03 kingname

相反,对于MD转的代码,他们的格式高度一致,这种情况下直接指定正文所在主标签的XPath,把正文整体的HTML提取出来即可解决问题。

kingname avatar Mar 13 '20 04:03 kingname