当前位置: 首页 > news >正文

【RAGFlow代码详解-10】文本处理和查询处理

概述

文本处理和查询处理系统将自然语言查询转换为与 RAGFlow 的文档存储后端配合使用的优化搜索表达式。该系统支持中英文文本处理,具有专门的标记化、术语加权和查询增强技术。

在这里插入图片描述

核心组件

FulltextQueryer 类

FulltextQueryer 类是查询处理和文本分析的主要接口。它协调标记化、术语加权和查询构造。

元件目的关键方法
FulltextQueryer主查询处理控制器question()、paragraph()、hybrid_similarity()
RagTokenizer文本标记化和分段tokenize()、fine_grained_tokenize()
Dealer术语加权和预处理权重()、 预代币()、拆分()

系统使用预定义的查询字段进行初始化,这些字段在搜索期间接收不同的提升权重:

query_fields = ["title_tks^10",      # Title tokens (highest boost)"title_sm_tks^5",    # Title small tokens  "important_kwd^30",  # Important keywords (highest boost)"important_tks^20",  # Important tokens"question_tks^20",   # Question tokens"content_ltks^2",    # Content large tokens"content_sm_ltks"    # Content small tokens (base weight)
]

代币化系统

RagTokenizer 使用基于 trie 的方法进行中文文本分割,使用 NLTK 进行英文处理:

在这里插入图片描述

术语权重和评分

Dealer 类使用 IDF 分数和语言特征实现复杂的术语加权:

加权因子公式目的
频率 IDFlog10(10 + (N - s + 0.5) / (s + 0.5))惩罚常用术语
文档频率 IDF与文档计数类似的公式上下文感知权重
NER 权重命名实体类型乘数提升重要实体
POS 重量基于词性的评分语法重要性

最终权重结合了以下因素: (0.3 * freq_idf + 0.7 * df_idf) * ner_weight * pos_weight

查询处理管道

问题处理

question() 方法将用户查询转换为与 Elasticsearch 兼容的查询表达式:

在这里插入图片描述

文本预处理函数

该系统包括几个文本预处理实用程序:

功能目的实现
subSpecialChar()转义 Elasticsearch 特殊字符re.sub(r"([:{}/[]-*"()
isChinese()检测中文文本优势基于比率的性格分析
rmWWW()删除疑问词和停用词基于正则表达式的多种语言过滤
add_space_between_eng_zh()在英文和中文之间添加空格基于正则表达式的文本规范化

相似性计算

混合相似性评分

hybrid_similarity() 方法将向量相似性与基于标记的相似性相结合:
在这里插入图片描述
公式为: vector_sim * 0.7 + token_sim * 0.3

代币相似度算法

代币相似性使用加权术语匹配:

# Simplified version of the similarity calculation
def similarity(self, qtwt, dtwt):s = 1e-9  # Small constant to avoid division by zerofor k, v in qtwt.items():if k in dtwt:s += v  # Add query term weight if present in documentq = 1e-9  # Query normalization factor  for k, v in qtwt.items():q += v  # Sum all query term weightsreturn s/q  # Normalized similarity score

段落处理

paragraph() 方法通过从文本内容中提取和加权关键术语来生成基于内容的检索查询:

在这里插入图片描述
该方法构造具有动态最小匹配要求的查询:min(3, len(keywords) // 10)

与文档存储集成

查询处理系统生成与 RAGFlow 的文档存储层集成的 MatchTextExpr 对象:

参数目的示例值
query_fields要使用权重搜索的字段[“title_tks^10”, “content_ltks^2”]
query_stringElasticsearch 查询表达式(term1^1.5 OR synonyms^0.2)
boost总体查询提升因子100
minimum_should_match最低匹配项0.6 或 3

配置和定制

系统使用多个可配置资源:

资源位置目的
字典rag/res/huqie.txt中文分割词典
NER 数据rag/res/ner.json命名实体识别映射
术语频率rag/res/term.freq文档频率统计
停用词内置套装要过滤的常用词
http://www.dtcms.com/a/351680.html

相关文章:

  • 深度学习(五):正则化:约束模型的复杂度
  • 什么样的 IP 能穿越周期,持续被用户买单?​
  • 深入解析交换机端口安全:Sticky MAC的工作原理与应用实践
  • 自动化测试概念与 Web 自动化实战(基于 Selenium)
  • 第一篇:MySQL安装部署全攻略
  • 计算机毕业设计 java 养老院管理系统 基于 Java 的养老院管理平台 Java 开发的养老服务系统
  • Linux云计算运维简明教程02 应用运维
  • 视频合成素材视频-多合一功能-青柠剪吧
  • 智能手机使用(2015-2019)
  • 基于MATLAB的运动模糊图像修复方法研究(LW+源码+讲解+部署)
  • vue2+elementui 表格单元格增加背景色,根据每列数据的大小 颜色依次变浅显示
  • 科研笔记:SCI论文中的功能性图表
  • 【技术教程】如何将文档编辑器集成到用 .Net 编写的网络应用程序中
  • VScode,设置自动保存
  • 支持向量机学习
  • Ubuntu22.04 安装和使用标注工具labelImg
  • GZ-CTF平台pwn题目部署
  • GitHub 热榜项目 - 日榜(2025-08-26)
  • word批量修改交叉引用颜色
  • 【RAGFlow代码详解-28】部署和基础设施
  • 国标28181 国标视频平台
  • 四、Python 脚本常用模块(续)
  • Linux虚拟机ansible部署
  • 机器视觉学习-day04-形态学变换
  • Spring Boot 与传统 Spring:从 WAR 到可执行 JAR,颠覆性的部署哲学
  • MEMS陀螺定向短节与传统陀螺工具的区别?
  • 永磁同步电机无速度算法--传统脉振方波注入法(1)
  • 图片生成视频软件深度评测:浅谈视频音频提取技术
  • Boris FX Samplitude Suite 2025.0.0 音频录制/编辑和母带处理
  • 不增加 GPU,首 Token 延迟下降 50%|LLM 服务负载均衡的新实践