fete2306/summarization-hdbscan

集成textrank和hdbscan

Python

0

1 commits

updated Jul 31, 2025

See the code

README

TextRank-HDBSCAN 文本摘要 API

项目概述

该项目实现了一个基于 TextRank 算法和 HDBSCAN 聚结合的文本摘要生成 API 服务,主要功能包括:

  • 中文/多语言文本的自动分句处理
  • 基于 TextRank 算法的关键句抽取
  • 使用 HDBSCAN 进行句子聚类
  • 可配置的摘要参数调整
  • 简洁的 RESTful API 接口
  • 内置网页测试界面

安装与运行

依赖安装

pip install fastapi uvicorn text2vec networkx hdbscan scikit-learn jinja2

启动服务

uvicorn ApiMake:app --reload

服务默认运行在:http://localhost:8000

API 使用指南

摘要生成端点

  • URL: /summarize
  • Method: POST
  • Content-Type: application/json

请求参数

{
  "text": "需要摘要的长文本...",
  "num": 5,
  "WindowsSize": 3,
  "dbscan": false,
  "MinClusterSize": 3,
  "score": true,
  "label": false,
  "index": false
}
参数类型默认值说明
textstring必填要处理的原始文本
numint5要提取的摘要句子数量
WindowsSizeint3TextRank 窗口大小
dbscanboolfalse是否启用 HDBSCAN 聚类
MinClusterSizeint3HDBSCAN 最小聚类大小
scorebooltrue返回结果是否包含句子得分
labelboolfalse返回结果是否包含聚类标签
indexboolfalse返回结果是否包含句子索引

响应示例

{
  "result": "句子1 score = 0.0234\n句子2 score = 0.0211\n..."
}

网页测试界面

访问 http://localhost:8000/read 可使用内置的网页测试界面

算法参数说明

  1. TextRank 参数:

    • WindowsSize: 控制句子相似度计算的范围(建议值 2-5)
    • num: 最终返回的关键句数量
  2. HDBSCAN 参数:

    • dbscan: 是否启用聚类功能
    • MinClusterSize: 聚类的最小簇大小(建议值 3-5)
    • label: 返回聚类标签(仅当 dbscan=true 时有效)
  3. 输出控制:

    • score: 显示句子重要性得分
    • index: 显示原句索引位置
    • label: 显示聚类标签

工作原理

  1. 文本预处理:

    • 处理换行符和特殊字符
    • 智能分句(保留引号内容完整性)
    • 处理长文本的分段问题
  2. 特征提取:

    • 使用 text2vec-base-multilingual 模型生成句向量
    • 计算句子间余弦相似度
  3. 图算法:

    • 构建句子相似度图
    • 应用 PageRank 算法计算句子重要性
  4. 聚类处理:

    • 使用 HDBSCAN 进行句子聚类
    • 从每个簇中选取代表性句子
  5. 结果生成:

    • 根据参数组合输出最终摘要
    • 支持原始句子/带元数据多种格式

示例调用

import requests

url = "http://localhost:8000/summarize"
data = {
    "text": "长文本内容...", 
    "num": 3,
    "WindowsSize": 4,
    "dbscan": True,
    "score": True,
    "label": True
}

response = requests.post(url, json=data)
print(response.json()["result"])

注意事项

  1. 首次运行会自动下载 text2vec-base-multilingual 模型(约 400MB)
  2. 长文本处理可能需要较长时间(>1000 句子)
  3. 生产环境建议:
    • 设置特定 CORS 域名(修改 allow_origins)
    • 禁用 --reload 参数
    • 添加 API 认证机制
  4. 聚类参数调整建议:
    • 新闻类文本:MinClusterSize=3
    • 学术论文:MinClusterSize=5
    • 社交媒体内容:MinClusterSize=2

文件结构

project/
├── ApiMake.py          # FastAPI 主应用
├── TextRankForApi.py   # 摘要算法实现
├── templates/
│   └── READ.html       # 网页测试界面
└── static/             # 静态资源目录

fete2306/summarization-hdbscan

集成textrank和hdbscan

Python

0

1 commits

updated Jul 31, 2025

See the code

README

TextRank-HDBSCAN 文本摘要 API

项目概述

该项目实现了一个基于 TextRank 算法和 HDBSCAN 聚结合的文本摘要生成 API 服务,主要功能包括:

  • 中文/多语言文本的自动分句处理
  • 基于 TextRank 算法的关键句抽取
  • 使用 HDBSCAN 进行句子聚类
  • 可配置的摘要参数调整
  • 简洁的 RESTful API 接口
  • 内置网页测试界面

安装与运行

依赖安装

pip install fastapi uvicorn text2vec networkx hdbscan scikit-learn jinja2

启动服务

uvicorn ApiMake:app --reload

服务默认运行在:http://localhost:8000

API 使用指南

摘要生成端点

  • URL: /summarize
  • Method: POST
  • Content-Type: application/json

请求参数

{
  "text": "需要摘要的长文本...",
  "num": 5,
  "WindowsSize": 3,
  "dbscan": false,
  "MinClusterSize": 3,
  "score": true,
  "label": false,
  "index": false
}
参数类型默认值说明
textstring必填要处理的原始文本
numint5要提取的摘要句子数量
WindowsSizeint3TextRank 窗口大小
dbscanboolfalse是否启用 HDBSCAN 聚类
MinClusterSizeint3HDBSCAN 最小聚类大小
scorebooltrue返回结果是否包含句子得分
labelboolfalse返回结果是否包含聚类标签
indexboolfalse返回结果是否包含句子索引

响应示例

{
  "result": "句子1 score = 0.0234\n句子2 score = 0.0211\n..."
}

网页测试界面

访问 http://localhost:8000/read 可使用内置的网页测试界面

算法参数说明

  1. TextRank 参数:

    • WindowsSize: 控制句子相似度计算的范围(建议值 2-5)
    • num: 最终返回的关键句数量
  2. HDBSCAN 参数:

    • dbscan: 是否启用聚类功能
    • MinClusterSize: 聚类的最小簇大小(建议值 3-5)
    • label: 返回聚类标签(仅当 dbscan=true 时有效)
  3. 输出控制:

    • score: 显示句子重要性得分
    • index: 显示原句索引位置
    • label: 显示聚类标签

工作原理

  1. 文本预处理:

    • 处理换行符和特殊字符
    • 智能分句(保留引号内容完整性)
    • 处理长文本的分段问题
  2. 特征提取:

    • 使用 text2vec-base-multilingual 模型生成句向量
    • 计算句子间余弦相似度
  3. 图算法:

    • 构建句子相似度图
    • 应用 PageRank 算法计算句子重要性
  4. 聚类处理:

    • 使用 HDBSCAN 进行句子聚类
    • 从每个簇中选取代表性句子
  5. 结果生成:

    • 根据参数组合输出最终摘要
    • 支持原始句子/带元数据多种格式

示例调用

import requests

url = "http://localhost:8000/summarize"
data = {
    "text": "长文本内容...", 
    "num": 3,
    "WindowsSize": 4,
    "dbscan": True,
    "score": True,
    "label": True
}

response = requests.post(url, json=data)
print(response.json()["result"])

注意事项

  1. 首次运行会自动下载 text2vec-base-multilingual 模型(约 400MB)
  2. 长文本处理可能需要较长时间(>1000 句子)
  3. 生产环境建议:
    • 设置特定 CORS 域名(修改 allow_origins)
    • 禁用 --reload 参数
    • 添加 API 认证机制
  4. 聚类参数调整建议:
    • 新闻类文本:MinClusterSize=3
    • 学术论文:MinClusterSize=5
    • 社交媒体内容:MinClusterSize=2

文件结构

project/
├── ApiMake.py          # FastAPI 主应用
├── TextRankForApi.py   # 摘要算法实现
├── templates/
│   └── READ.html       # 网页测试界面
└── static/             # 静态资源目录