开发者社区 > 大数据与机器学习 > 大数据计算 MaxCompute > 正文

我公司的数据现在存储在maxcompute基础版上。有一个商品表,里面有一个字段“商品文档”存储的是

我公司的数据现在存储在maxcompute基础版上。有一个商品表,里面有一个字段“商品文档”存储的是我司自定义的、json格式的文档。 我现在想在python 中调用odps或maxcompute的sdk api对这个josn格式的结构化文档进行文本相似度匹配的检索,请问该如何操作?

展开
收起
十一0204 2023-04-11 14:37:04 264 0
3 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    可以使用阿里云DataWorks中的MaxCompute SDK或者ODPS Python SDK来实现对MaxCompute基础版中表中的数据进行文本相似度检索。具体实现步骤如下:

    1. 在阿里云DataWorks中创建MaxCompute基础版项目,并通过MaxCompute SDK或者ODPS Python SDK进行连接和授权。

    2. 在MaxCompute基础版项目中创建表,并导入包含商品文档的json数据。

    3. 使用MaxCompute SDK或者ODPS Python SDK从MaxCompute基础版项目中查询并获取需要进行文本相似度检索的商品文档数据,并进行解析和处理。

    4. 使用Python中的相似度计算库(如gensim,nltk等)对商品文档进行相似度计算,并输出检索结果。

    下面是一个使用ODPS Python SDK实现对MaxCompute基础版项目中表中数据进行文本相似度检索的简单示例:

    # 导入ODPS Python SDK库
    from odps import ODPS
    
    # 创建ODPS实例并连接MaxCompute基础版项目
    odps = ODPS(project='your_project_name', endpoint='http://service.odps.aliyun.com/api')
    
    # 查询并获取MaxCompute基础版项目中的表数据
    table = odps.get_table('your_table_name')
    data = table.to_df()
    
    # 对商品文档进行相似度计算
    from gensim import models
    
    # 加载词向量模型
    model = models.Word2Vec.load('your_word2vec_model_file')
    
    # 计算相似度并输出结果
    for document in data['goods_doc']:
        # 对商品文档进行分词
        tokens = document.strip().split()
        
        # 过滤停用词
        tokens = [token for token in tokens if token not in stopwords]
        
        # 计算相似度
        sim = model.n_similarity(tokens, query_tokens)
        
        # 输出结果
        print('文档:', document)
        print('相似度:', sim)
    
    2023-04-27 10:23:56
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    你可以通过以下步骤来实现基于 Python SDK 对 MaxCompute 数据库中的 JSON 文档进行文本相似度匹配的检索:

    安装 MaxCompute Python SDK 你可以使用 pip 命令来安装 MaxCompute Python SDK:

    pip install odps 连接到 MaxCompute 数据库 使用 odps 模块中的 connect 方法连接到 MaxCompute 数据库:

    from odps import ODPS

    access_id = 'your_access_id' access_key = 'your_access_key' project = 'your_project_name' endpoint = 'your_endpoint'

    odps = ODPS(access_id=access_id, access_key=access_key, project=project, endpoint=endpoint) 其中,access_id 和 access_key 是你的阿里云账号的 AccessKey ID 和 AccessKey Secret,project 是你的 MaxCompute 项目名称,endpoint 是你的 MaxCompute 服务的访问地址。

    读取数据表 使用 odps 模块中的 read_table 方法读取数据表:

    table_name = 'your_table_name' table = odps.get_table(table_name) data = table.to_df() 其中,table_name 是你要读取的数据表名称。

    解析 JSON 数据 使用 json 模块解析 JSON 格式的文档:

    import json

    json_data = data['商品文档'].apply(lambda x: json.loads(x)) 其中,data['商品文档'] 是你要解析的 JSON 数据列,json.loads 方法将 JSON 格式的字符串转换为 Python 对象。

    计算文本相似度 使用 Python 中的文本相似度计算库,如 nltk、gensim 等,对解析后的 JSON 数据进行文本相似度计算。

    例如,使用 nltk 模块中的 jaccard_distance 方法计算 Jaccard 相似度:

    from nltk.metrics import jaccard_distance

    query = 'your_query_text' result = json_data.apply(lambda x: jaccard_distance(set(x.keys()), set(query.split()))) 其中,query 是你要匹配的查询文本,x.keys() 是每个 JSON 对象中的键集合,set(query.split()) 将查询文本中的单词转换为集合,jaccard_distance 方法计算两个集合之间的 Jaccard 相似度。

    输出匹配结果 将匹配结果输出到数据表中:

    result_table_name = 'your_result_table_name' result_table_schema = 'result STRING' result_table = odps.create_table(result_table_name, result_table_schema)

    with result_table.open_writer() as writer: for index, value in result.items(): writer.write([str(value)]) 其中,result_table_name 是你要输出结果的数据表名称,result_table_schema 是数据表的列名和类型,result_table 是创建的数据表对象,result.items() 是匹配结果的键值对集合,writer.write 方法将匹配结果写入数据表中。

    以上是一个基本的操作流程,你可以根据具体的需求进行调整和优化。

    2023-04-16 15:03:10
    赞同 展开评论 打赏
  • 坚持这件事孤独又漫长。

    可以使用 MaxCompute SDK 中提供的 odps模块调用MaxCompute SQL查询来完成对这个json格式的结构化文档进行文本相似度匹配的检索。具体操作步骤如下:

    1. 安装 MaxCompute SDK
    pip install odps
    
    1. 配置 MaxCompute 认证
    from odps import ODPS
    
    access_id = '<your-access-id>'
    access_key = '<your-access-key>'
    project = '<your-project>'
    endpoint = '<your-endpoint>'
    odps = ODPS(access_id=access_id, secret_access_key=access_key, project=project, endpoint=endpoint)
    
    1. 编写 SQL 查询语句
    -- 创建商品表
    CREATE TABLE IF NOT EXISTS commodity (
      id BIGINT COMMENT '商品ID',
      name STRING COMMENT '商品名称',
      doc STRING COMMENT '商品文档'
    );
    
    -- 插入测试数据
    INSERT INTO commodity VALUES
      (1, '商品1', '{"feature":"xxx","desc":"商品1的描述"}'),
      (2, '商品2', '{"feature":"yyy","desc":"商品2的描述"}'),
      (3, '商品3', '{"feature":"zzz","desc":"商品3的描述"}');
    
    -- 计算文本相似度匹配
    SELECT 
      id, 
      name, 
      doc,
      SIMHASH_MATCH(desc, "商品3的描述", "max-distance:3") as similarity
    FROM 
      commodity
    WHERE
      similarity > 0.5;
    

    其中 SIMHASH_MATCH 是 MaxCompute SQL 内置的文本相似度匹配函数,第一个参数是要匹配的字段,第二个参数是要匹配的文本,第三个参数是基于编辑距离计算的文本相似度阈值。

    1. 在 Python 中执行 SQL 查询
    # 创建MaxCompute 连接对象
    sql_task = odps.execute_sql('MaxCompute SQL dsl语句')
    # 打印查询结果
    for record in sql_task.open_reader():
        print(record.id, record.name, record.doc, record.similarity)
    
    • 这样就可以通过 Python 调用 MaxCompute SDK 完成对 json 格式的结构化文档进行文本相似度匹配的检索了。
    2023-04-11 19:21:09
    赞同 展开评论 打赏

MaxCompute(原ODPS)是一项面向分析的大数据计算服务,它以Serverless架构提供快速、全托管的在线数据仓库服务,消除传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您经济并高效的分析处理海量数据。

相关产品

  • 云原生大数据计算服务 MaxCompute
  • 相关电子书

    更多
    Data+AI时代大数据平台应该如何建设 立即下载
    大数据AI一体化的解读 立即下载
    极氪大数据 Serverless 应用实践 立即下载