跳转到主要内容

Pelican插件,根据向量空间模型为文章添加相似文章

项目描述

相似文章:Pelican插件

Build Status PyPI Version

相似文章 是一个Pelican插件,为每篇文章的上下文添加 similar_posts 变量。

相似度测量算法的输入是文章标签。因此,要使此插件发挥作用,至少部分文章必须在其元数据中包含一个 tags 元素。有关元数据的更多信息,请参阅此处

similar_posts 变量是一个包含 Article 对象的列表,如果没有找到至少有一个与给定文章具有相同标签的文章,则该列表为空。列表按相似度降序排列,然后按日期降序排列。

要求

此插件需要 Python 3.6 或更高版本。

它依赖于Gensim,它有自己的依赖项,例如NumPySciPysmart_open

安装

您可以通过以下方式安装此插件:

python -m pip install pelican-similar-posts

配置

默认情况下,最多列出五篇文章。您可以通过在 Pelican 设置文件中定义 SIMILAR_POSTS_MAX_COUNT 来自定义此值。例如

SIMILAR_POSTS_MAX_COUNT = 10

您还可以在设置文件中定义 SIMILAR_POSTS_MIN_SCORE。默认值为 .0001。值为 1.0 将将类似文章的列表限制为具有相同标签集的文章。任何大于 0.0 的值都作为相似度阈值,但为了调整此值,您可能需要通过经验找到适当的值。当使用 --debug 选项运行 Pelican 时,将显示类似文章的额外分数。

您可以在文章模板中输出 similar_posts 变量。这可能看起来像以下内容

```html+jinja
{% if article.similar_posts %}
    <ul>
    {% for similar in article.similar_posts %}
        <li><a href="{{ SITEURL }}/{{ similar.url }}">{{ similar.title }}</a></li>
    {% endfor %}
    </ul>
{% endif %}
```

相似度分数

相似度的度量基于向量空间模型,该模型将文本文档表示为向量。每个向量分量对应于语料库中存在的一个术语。因此,语料库可以表示为一个矩阵,其行对应于文档,其列对应于术语。

在此实现中,使用tf-idf 模型对术语(标签)进行加权,这意味着在整个语料库中很少出现的术语比非常常见的术语具有更大的值。这种想法是,存在于大量文档中的术语并不能提供很多特异性;它并不像只在少数文档中出现的术语那样有助于将一个文档与另一个文档联系起来。

假设我们有一个包含五个术语的语料库。一个文档的向量可能看起来像

[.9, .1, .0, .0, .3]

此文档有三个术语。第一个术语具有高值,意味着它在整个语料库中相对罕见。第二个术语具有低值,意味着它非常常见。接下来的两个术语未在此文档中出现,而最后一个术语在语料库中存在,并且与第二个术语一样常见,尽管不如第二个术语常见。例如,如果另一个文档仅包含第一个和最后一个术语,那么它应该比仅包含第一个和第二个术语或仅包含第二个和最后一个术语的另一个文档与此文档更为相关。

我们通过计算两个文档单位向量之间的角度的余弦值来衡量两个文档的相似度。得到的“分数”在 [0, 1] 范围内。具有相同方向的向量具有 余弦相似度 为 1。值越低,向量之间的角度越大;文档越不相似。

Related Posts 插件的比较

Related Posts 插件将具有最大数量共同标签的文章相关联,没有任何标签加权。如果许多文章具有相同的标签数,它们都将获得相同的分数。在大多数网站上,推荐文章的列表很短,因此如果所有文章都有相同的分数,最相关的文章往往会遗漏。

为了绕过这个问题,该插件允许您通过slug手动链接相关帖子。然而,这会给内容维护带来负担;旧帖子不会链接到新帖子,除非它们被手动编辑以添加链接。

贡献

欢迎并非常感谢贡献。每一份贡献都很有帮助。您可以通过改进文档、添加缺失的功能和修复错误来做出贡献。您还可以通过审查和评论现有问题来提供帮助。

要开始为此插件做出贡献,请查阅Pelican 贡献指南,从“贡献代码”部分开始。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

pelican-similar-posts-1.0.0.tar.gz (19.3 kB 查看哈希值)

上传时间 源代码

构建分发

pelican_similar_posts-1.0.0-py3-none-any.whl (19.4 kB 查看哈希值)

上传时间 Python 3

由...