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

如何用抽象语法树工具ast解析str格式的文本数据

LLM时代很多时候需要处理的数据不是结构化数据,而是文本数据。比如

"[('AC/DC',), ('Accept',), ('Aerosmith',), ('Alanis Morissette',), ('Alice In Chains',), ('Antônio Carlos Jobim',), ('Apocalyptica',), ('Audioslave',), ('BackBeat',)]"

虽然我们知道这是一个list数据,但实际上它是str,它不能被python按list的方式处理。

这里先了解抽象语法书工具ast,然后尝试用ast解析python函数、文本print形式的list串。

1 ast工具

抽象语法树工具ast(Abstract Syntax Tree),可用于解析python类代码并将其转换为树状结构,解析后的树状结构称为抽象语法树,是一种中间表示形式,可用于代码分析、修改和生成。

抽象语法树是一个树状的数据结构,表示源代码的语法结构。每个节点都代表源代码中的一个结构,例如函数定义、循环语句、条件语句等。

将str格式文本转化为抽象语法树后,就可以直接进行多种后续处理,如代码分析、修改和生成。


 

2 ast解析函数

2.1 解析函数

以下是ast解析python函数示例

import astcode = """
def add(a, b):return a + b
"""tree = ast.parse(code)
for node in ast.walk(tree):print(ast.dump(node, indent=4))

2.2 语法树

输出如下所示,这是一个功能完整的抽象语法树。

Module(
    body=[
        FunctionDef(
            name='add',
            args=arguments(
                posonlyargs=[],
                args=[
                    arg(arg='a'),
                    arg(arg='b')],
                kwonlyargs=[],
                kw_defaults=[],
                defaults=[]),
            body=[
                Return(
                    value=BinOp(
                        left=Name(id='a', ctx=Load()),
                        op=Add(),
                        right=Name(id='b', ctx=Load())))],
            decorator_list=[])],
    type_ignores=[])
FunctionDef(
    name='add',
    args=arguments(
        posonlyargs=[],
        args=[
            arg(arg='a'),
            arg(arg='b')],
        kwonlyargs=[],
        kw_defaults=[],
        defaults=[]),
    body=[
        Return(
            value=BinOp(
                left=Name(id='a', ctx=Load()),
                op=Add(),
                right=Name(id='b', ctx=Load())))],
    decorator_list=[])
arguments(
    posonlyargs=[],
    args=[
        arg(arg='a'),
        arg(arg='b')],
    kwonlyargs=[],
    kw_defaults=[],
    defaults=[])
Return(
    value=BinOp(
        left=Name(id='a', ctx=Load()),
        op=Add(),
        right=Name(id='b', ctx=Load())))
arg(arg='a')
arg(arg='b')
BinOp(
    left=Name(id='a', ctx=Load()),
    op=Add(),
    right=Name(id='b', ctx=Load()))
Name(id='a', ctx=Load())
Add()
Name(id='b', ctx=Load())
Load()
Load()

3 ast解析list串

3.1 解析list

这里尝试用ast将str形式的list,解析为真实的list,ast示例程序如下所示。

import ast
import reorigin_txt = "[('AC/DC',), ('Accept',), ('Aerosmith',), ('Alanis Morissette',), ('Alice In Chains',), ('Antônio Carlos Jobim',), ('Apocalyptica',), ('Audioslave',), ('BackBeat',)]"
obj_list = ast.literal_eval(origin_txt)print(f"origin txt: {origin_txt}")
print("processed txt:")
for obj in obj_list:txt = obj[0]post_txt = re.sub(r"\b\d+\b", "", txt).strip()print(post_txt)

3.2 真实list

输出结果如下所示,可见ast成功将str格式list解析为真实list,以便后续程序直接处理。

origin txt: [('AC/DC',), ('Accept',), ('Aerosmith',), ('Alanis Morissette',), ('Alice In Chains',), ('Antônio Carlos Jobim',), ('Apocalyptica',), ('Audioslave',), ('BackBeat',)]
processed txt:
AC/DC
Accept
Aerosmith
Alanis Morissette
Alice In Chains
Antônio Carlos Jobim
Apocalyptica
Audioslave
BackBeat

reference

---

python中ast模块的详解与用法

https://blog.csdn.net/weixin_54897474/article/details/140095287

基于langgraph agent的SQL DB知识库系统

https://blog.csdn.net/liliang199/article/details/153317678

http://www.dtcms.com/a/574376.html

相关文章:

  • 商务网站开发流程建站之星和凡科
  • 龙岗企业网站建设北京网站开发哪里好薇
  • 宿迁哪里有做网站开发的wordpress 维基
  • 手机号网站源码网站源码本地演示
  • Twitter热点追踪--互动飙升
  • 安徽省级建设主管部门网站网站结构说明
  • 科技设计网站十堰网站建设专家
  • 大恒相机-mono12-python示例程序
  • 线程池和单例模式
  • 建站全过程品牌网站建站
  • Linux之rsyslog(3)模板配置
  • 做网站只用前端知识可以吗热点新闻
  • 免费夸克网盘不限速下载简单方法
  • 本地部署网站流量分析工具 Matomo 并实现外部访问
  • 光伏企业的智能仓储管理如何变革
  • 上海一家做服饰包鞋穿上用品的网站网站中文域名到期有没有影响
  • milvus向量化数据库部署
  • 接口测试知识总结
  • 什么是惊群效应
  • 装饰网站的业务员都是怎么做的做网站包括图片设计吗
  • 网站设计要点wordpress 屏蔽插件更新
  • 企业网站模板源代码下载wordpress 教程网
  • 番禺做网站开发产品外观设计图片
  • 从零开始搭建 flask 博客实验(5)
  • 时序数据库系列(三):InfluxDB数据写入Line Protocol详解
  • 网站个人和公司有什么区别是什么一些做义工的旅游网站
  • 学校门户网站建设的优势网站竞价推广哪个好
  • 公司网站策划宣传seo入门课程
  • 一种用于乳腺癌风险预测的新型时间衰减影像组学整合网络(TRINet)|文献速递-文献分享
  • 使用css 给div添加四角线框