亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python調(diào)用本地大模型實(shí)現(xiàn)Excel表格數(shù)據(jù)匹配與填充

 更新時(shí)間:2025年05月12日 08:52:47   作者:玩人工智能的辣條哥  
這篇文章主要為大家詳細(xì)介紹了Python如何調(diào)用本地大模型實(shí)現(xiàn)Excel表格數(shù)據(jù)匹配與填充功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

環(huán)境

python3.10

ollama v0.6.1

問題描述

怎么使用python+本地大模型,根據(jù)tx.xlsx表格中B列學(xué)校對應(yīng)J列院校性質(zhì)、K列院校類型 L列院校特色,去xz.xlsx表格A列判斷并找到對應(yīng)A列院校性質(zhì)、B列院校類型 C列院校特色數(shù)據(jù)填入tx.xlsx表格中J、K、L單元格,示例:北京大學(xué) J列院校性質(zhì) 是公辦 K列院校類型 綜合類 L列院校特色985.

解決方案

利用本地部署的 Ollama72B Qwen 大模型 這種方法可以通過自然語言處理(NLP)技術(shù),動態(tài)分析學(xué)校名稱并推斷其屬性,從而解決手動匹配和動態(tài)規(guī)則覆蓋不全的問題。

以下是實(shí)現(xiàn)方法和代碼:

實(shí)現(xiàn)思路

Ollama 和 Qwen 模型

確保已經(jīng)在本地部署了 Ollama,并加載了 72B Qwen 大模型。

使用 Qwen 模型的文本生成能力,根據(jù)學(xué)校名稱推斷其屬性。

調(diào)用模型

通過 API 或命令行調(diào)用 Ollama 的 Qwen 模型,輸入學(xué)校名稱,獲取模型生成的屬性描述。

解析模型輸出,提取院校性質(zhì)、院校類型和院校特色。

填充表格

將模型推斷的結(jié)果填入 tx.xlsx 的 J、K、L 列。

緩存機(jī)制

為了提高效率,可以將已經(jīng)匹配的學(xué)校名稱和屬性緩存起來,避免重復(fù)調(diào)用模型。

實(shí)現(xiàn)代碼

以下是完整的 Python 腳本:

import pandas as pd
import requests
import json

# Ollama API 地址
OLLAMA_API_URL = "http://192.168.208.123:11434/api/generate"

# 緩存已匹配的學(xué)校名稱和屬性
school_cache = {}

# 調(diào)用 Ollama API 推斷學(xué)校屬性
def infer_school_properties(school_name):
    if school_name in school_cache:
        return school_cache[school_name]
    
    # 構(gòu)造提示詞
    prompt = f"根據(jù)學(xué)校名稱推斷其屬性。學(xué)校名稱:{school_name}。請返回以下屬性:院校性質(zhì)(公辦/民辦/不限)、院校類型(綜合/理工/師范/財(cái)經(jīng)/醫(yī)藥/不限)、院校特色(985/211/雙一流/不限)。"
    
    # 調(diào)用 Ollama API
    try:
        print(f"正在調(diào)用 Ollama API,學(xué)校名稱:{school_name}")
        response = requests.post(
            OLLAMA_API_URL,
            json={
                "model": "qwen2.5:72b",
                "prompt": prompt,
                "stream": False
            },
            timeout=10
        )
        response.raise_for_status()
        output = response.json()["response"].strip()
        print(f"API 返回結(jié)果:{output}")
    except Exception as e:
        print(f"調(diào)用 Ollama API 失敗:{e}")
        return {"院校性質(zhì)": "不限", "院校類型": "不限", "院校特色": "不限"}
    
    # 解析模型輸出
    properties = {"院校性質(zhì)": "不限", "院校類型": "不限", "院校特色": "不限"}
    if "公辦" in output:
        properties["院校性質(zhì)"] = "公辦"
    elif "民辦" in output:
        properties["院校性質(zhì)"] = "民辦"
    
    if "綜合" in output:
        properties["院校類型"] = "綜合"
    elif "理工" in output:
        properties["院校類型"] = "理工"
    elif "師范" in output:
        properties["院校類型"] = "師范"
    elif "財(cái)經(jīng)" in output:
        properties["院校類型"] = "財(cái)經(jīng)"
    elif "醫(yī)藥" in output:
        properties["院校類型"] = "醫(yī)藥"
    
    if "985" in output:
        properties["院校特色"] = "985"
    elif "211" in output:
        properties["院校特色"] = "211"
    elif "雙一流" in output:
        properties["院校特色"] = "雙一流"
    
    # 緩存結(jié)果
    school_cache[school_name] = properties
    return properties

# 讀取 tx.xlsx 文件
try:
    print("正在讀取 tx.xlsx 文件")
    tx_df = pd.read_excel('tx.xlsx')
    print("成功讀取 tx.xlsx 文件")
    print("列名:", tx_df.columns)  # 打印列名
    print(tx_df.head())  # 打印前幾行數(shù)據(jù)
except Exception as e:
    print(f"讀取 tx.xlsx 文件失?。簕e}")
    exit()

# 遍歷每一行,根據(jù)學(xué)校名稱填充屬性
for index, row in tx_df.iterrows():
    school_name = row['學(xué)校']  # 使用實(shí)際的列名
    print(f"正在處理學(xué)校:{school_name}")
    properties = infer_school_properties(school_name)
    tx_df.at[index, '院校性質(zhì)'] = properties["院校性質(zhì)"]
    tx_df.at[index, '院校類型'] = properties["院校類型"]
    tx_df.at[index, '院校特色'] = properties["院校特色"]

# 保存修改后的 tx.xlsx 文件
try:
    print("正在保存文件")
    tx_df.to_excel('tx_updated.xlsx', index=False)
    print("數(shù)據(jù)處理完成,結(jié)果已保存到 tx_updated.xlsx")
except Exception as e:
    print(f"保存文件失?。簕e}")

示例

輸入 tx.xlsx

ABCJKL
1北京大學(xué)
2清華大學(xué)
3未知學(xué)校

輸出 tx_updated.xlsx

ABCJKL
1北京大學(xué)公辦綜合985
2清華大學(xué)公辦理工985
3未知學(xué)校不限不限不限

優(yōu)化后腳本:

import pandas as pd
import requests
import json
import os
import re

# 先安裝 debugpy:pip install debugpy
import debugpy

# 監(jiān)聽 5678 端口,等待IDE連接
#print("等待調(diào)試器 attach ...")
#debugpy.listen(("0.0.0.0", 5678))
#debugpy.wait_for_client()
#print("調(diào)試器已連接,可以執(zhí)行遠(yuǎn)程命令")

# Ollama API 地址
OLLAMA_API_URL = "http://192.168.2.103:11434/api/generate"

# 緩存已匹配的學(xué)校名稱和屬性
school_cache = {}

# 斷點(diǎn)保存文件
CHECKPOINT_FILE = "checkpoint.json"

# 調(diào)用 Ollama API 推斷學(xué)校屬性
def infer_school_properties(school_name):
    if school_name in school_cache:
        return school_cache[school_name]
    
    # 構(gòu)造提示詞
    prompt = (
        f"根據(jù)學(xué)校名稱推斷其屬性。學(xué)校名稱:{school_name}。"
        "請僅返回以下屬性(用中文逗號分隔):"
        "院校性質(zhì)(不限、公辦、民辦、中外、港澳合作院校、新增院校、非新增院校),"
        "院校類型(不限、綜合、理工、農(nóng)林、醫(yī)藥、師范、語言、財(cái)經(jīng)、政法、體育、藝術(shù)、民族、軍事、其他),"
        "院校特色(不限、985、211、雙一流、強(qiáng)基院校、101計(jì)劃、研究生院、保研資格、國重點(diǎn)、省重點(diǎn)、部委院校、省屬、省部共建、CE國防七子、五院四系、兩電一郵、八大美院、雙高計(jì)劃、高水平學(xué)校建設(shè)單位、高水平專業(yè)群建設(shè)單位、國家級示范、國家級骨干、現(xiàn)代學(xué)徒制試點(diǎn)學(xué)院、香港高財(cái)通)。"
        "例如返回格式:公辦, 理工, 985"
    )
    
    # 調(diào)用 Ollama API
    try:
        print(f"正在調(diào)用 Ollama API,學(xué)校名稱:{school_name}")
        response = requests.post(
            OLLAMA_API_URL,
            json={
                "model": "qwen2.5:72b",
                "prompt": prompt,
                "stream": False
            },
            timeout=10
        )
        response.raise_for_status()
        output = response.json()["response"].strip()
        print(f"API 返回結(jié)果:{output}")
    except Exception as e:
        print(f"調(diào)用 Ollama API 失?。簕e}")
        return {"院校性質(zhì)": "不限", "院校類型": "不限", "院校特色": "不限"}
    
    # 初始化默認(rèn)值
    properties = {"院校性質(zhì)": "不限", "院校類型": "不限", "院校特色": "不限"}
    
    # 定義所有可能的選項(xiàng)
    院校性質(zhì)列表 = ["不限", "公辦", "民辦", "中外", "港澳合作院校", "新增院校", "非新增院校"]
    院校類型列表 = ["不限", "綜合", "理工", "農(nóng)林", "醫(yī)藥", "師范", "語言", "財(cái)經(jīng)", "政法", "體育",
                 "藝術(shù)", "民族", "軍事", "其他"]
    院校特色列表 = ["不限", "985", "211", "雙一流", "強(qiáng)基院校", "101計(jì)劃", "研究生院", "保研資格",
                 "國重點(diǎn)", "省重點(diǎn)", "部委院校", "省屬", "省部共建", "CE國防七子", "五院四系", "兩電一郵",
                 "八大美院", "雙高計(jì)劃", "高水平學(xué)校建設(shè)單位", "高水平專業(yè)群建設(shè)單位", "國家級示范",
                 "國家級骨干", "現(xiàn)代學(xué)徒制試點(diǎn)學(xué)院", "香港高財(cái)通"]
    
    # 拆分輸出(按逗號或頓號或空格分割)
    parts = re.split(r'[,,、\s]+', output)
    parts = [p.strip() for p in parts if p.strip()]
    
    # 嘗試匹配每個(gè)屬性
    for p in parts:
        if p in 院校性質(zhì)列表 and properties["院校性質(zhì)"] == "不限":
            properties["院校性質(zhì)"] = p
        elif p in 院校類型列表 and properties["院校類型"] == "不限":
            properties["院校類型"] = p
        elif p in 院校特色列表 and properties["院校特色"] == "不限":
            properties["院校特色"] = p
    
    # 緩存結(jié)果
    school_cache[school_name] = properties
    return properties

# 保存斷點(diǎn)
def save_checkpoint(index, df):
    checkpoint = {
        "last_index": index,
        "data": df.to_dict(orient="records")
    }
    with open(CHECKPOINT_FILE, "w", encoding="utf-8") as f:
        json.dump(checkpoint, f, ensure_ascii=False, indent=2)
    print(f"已保存斷點(diǎn),最后處理的行索引:{index}")

# 加載斷點(diǎn)
def load_checkpoint():
    if os.path.exists(CHECKPOINT_FILE):
        with open(CHECKPOINT_FILE, "r", encoding="utf-8") as f:
            checkpoint = json.load(f)
        return checkpoint["last_index"], pd.DataFrame(checkpoint["data"])
    return 0, None

# 讀取 tx.xlsx 文件
try:
    print("正在讀取 tx.xlsx 文件")
    tx_df = pd.read_excel('tx.xlsx')
    print("成功讀取 tx.xlsx 文件")
    print("列名:", tx_df.columns)  # 打印列名
    print(tx_df.head())  # 打印前幾行數(shù)據(jù)
except Exception as e:
    print(f"讀取 tx.xlsx 文件失?。簕e}")
    exit()

# 加載斷點(diǎn)
start_index, checkpoint_df = load_checkpoint()
if checkpoint_df is not None:
    tx_df = checkpoint_df
    print(f"從斷點(diǎn)繼續(xù)執(zhí)行,最后處理的行索引:{start_index}")

# 遍歷每一行,根據(jù)學(xué)校名稱填充屬性
for index, row in tx_df.iterrows():
    if index < start_index:
        continue  # 跳過已處理的行
    
    school_name = row['學(xué)校']  # 使用實(shí)際的列名
    print(f"正在處理學(xué)校:{school_name}")
    properties = infer_school_properties(school_name)
    tx_df.at[index, '院校性質(zhì)'] = properties["院校性質(zhì)"]
    tx_df.at[index, '院校類型'] = properties["院校類型"]
    tx_df.at[index, '院校特色'] = properties["院校特色"]

    # 每處理 50 條保存一次
    if (index + 1) % 50 == 0:
        save_checkpoint(index, tx_df)

# 保存最終結(jié)果
try:
    print("正在保存文件")
    tx_df.to_excel('tx_updated.xlsx', index=False)
    print("數(shù)據(jù)處理完成,結(jié)果已保存到 tx_updated.xlsx")
    # 刪除斷點(diǎn)文件
    if os.path.exists(CHECKPOINT_FILE):
        os.remove(CHECKPOINT_FILE)
        print("斷點(diǎn)文件已刪除")
except Exception as e:
    print(f"保存文件失?。簕e}")

運(yùn)行腳本

確保已安裝 pandas 庫,并正確部署了 Ollama 和 Qwen 模型。

將腳本保存為 update_excel_with_ollama.py,并確保 tx.xlsx 文件與腳本在同一目錄下。

運(yùn)行腳本:

python update_excel_with_ollama.py

處理結(jié)果將保存到 tx_updated.xlsx 文件中。

用時(shí)1小時(shí)多完成3138條數(shù)據(jù)匹對

注意事項(xiàng)

模型調(diào)用速度

調(diào)用本地模型可能需要一定時(shí)間,建議對大量數(shù)據(jù)時(shí)優(yōu)化調(diào)用邏輯或使用緩存機(jī)制。

模型輸出解析

需要根據(jù)模型的實(shí)際輸出調(diào)整解析邏輯,確保提取的屬性準(zhǔn)確。

錯(cuò)誤處理

如果模型調(diào)用失敗或輸出不符合預(yù)期,可以捕獲異常并填入默認(rèn)值。

到此這篇關(guān)于Python調(diào)用本地大模型實(shí)現(xiàn)Excel表格數(shù)據(jù)匹配與填充的文章就介紹到這了,更多相關(guān)Python Excel數(shù)據(jù)匹配與填充內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboo如何t動態(tài)修改配置文件屬性

    Springboo如何t動態(tài)修改配置文件屬性

    這篇文章主要介紹了Springboo如何t動態(tài)修改配置文件屬性問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • OpenCV 圖像旋轉(zhuǎn)、平移、縮放操作代碼

    OpenCV 圖像旋轉(zhuǎn)、平移、縮放操作代碼

    這篇文章主要介紹了OpenCV 圖像旋轉(zhuǎn)、平移、縮放,本文是 OpenCV圖像視覺入門之路的第7篇文章,本文詳細(xì)的進(jìn)行了圖像的縮放 cv2.resize()、旋轉(zhuǎn) cv2.flip()、平移 cv2.warpAffine()等操作,需要的朋友可以參考下
    2022-12-12
  • Python中的lstrip()方法使用簡介

    Python中的lstrip()方法使用簡介

    這篇文章主要介紹了Python中的lstrip()方法使用簡介,是Python入門的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • Python中l(wèi)en()函數(shù)用法使用示例

    Python中l(wèi)en()函數(shù)用法使用示例

    這篇文章主要介紹了Python中的len()函數(shù),包括其基礎(chǔ)用法、適用范圍、常見使用場景以及在第三方庫(如NumPy和pandas)中的應(yīng)用,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • 如何使用Python提取Chrome瀏覽器保存的密碼

    如何使用Python提取Chrome瀏覽器保存的密碼

    今天小編教大家怎么用Python提取Chrome瀏覽器保存的密碼,在這需要導(dǎo)入一些必要模塊定義一些有用的函數(shù)來幫助我們在主函數(shù)中調(diào)用,具體實(shí)例代碼跟隨小編一起學(xué)習(xí)下吧
    2021-06-06
  • 用python計(jì)算文件的MD5值

    用python計(jì)算文件的MD5值

    這篇文章主要介紹了用python計(jì)算文件的MD5值的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • Python用threading實(shí)現(xiàn)多線程詳解

    Python用threading實(shí)現(xiàn)多線程詳解

    這篇文章主要給大家介紹了Python用threading實(shí)現(xiàn)多線程的方法示例,文中介紹的很詳細(xì),對大家具有一定的參考借鑒價(jià)值,有需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-02-02
  • 簡單的命令查看安裝的python版本號

    簡單的命令查看安裝的python版本號

    在本篇內(nèi)容里小編給大家整理的是關(guān)于簡單的命令查看安裝的python版本號的文章,需要的朋友們可以參考下。
    2020-08-08
  • 使用Python生成200個(gè)激活碼的實(shí)現(xiàn)方法

    使用Python生成200個(gè)激活碼的實(shí)現(xiàn)方法

    這篇文章主要介紹了使用Python生成200個(gè)激活碼的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Python如何解除一個(gè)裝飾器

    Python如何解除一個(gè)裝飾器

    這篇文章主要介紹了Python如何解除一個(gè)裝飾器,幫助大家更好的理解和學(xué)習(xí)Python裝飾器,感興趣的朋友可以了解下
    2020-08-08

最新評論