最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

問(wèn)題描述

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

解決方案

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

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

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

Ollama 和 Qwen 模型

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

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

調(diào)用模型

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

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

填充表格

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

緩存機(jī)制

為了提高效率,可以將已經(jīng)匹配的學(xué)校名稱和屬性緩存起來(lái),避免重復(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}。請(qǐng)返回以下屬性:院校性質(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}。"
        "請(qǐng)僅返回以下屬性(用中文逗號(hào)分隔):"
        "院校性質(zhì)(不限、公辦、民辦、中外、港澳合作院校、新增院校、非新增院校),"
        "院校類型(不限、綜合、理工、農(nóng)林、醫(yī)藥、師范、語(yǔ)言、財(cái)經(jīng)、政法、體育、藝術(shù)、民族、軍事、其他),"
        "院校特色(不限、985、211、雙一流、強(qiáng)基院校、101計(jì)劃、研究生院、保研資格、國(guó)重點(diǎn)、省重點(diǎn)、部委院校、省屬、省部共建、CE國(guó)防七子、五院四系、兩電一郵、八大美院、雙高計(jì)劃、高水平學(xué)校建設(shè)單位、高水平專業(yè)群建設(shè)單位、國(guó)家級(jí)示范、國(guó)家級(jí)骨干、現(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ī)藥", "師范", "語(yǔ)言", "財(cái)經(jīng)", "政法", "體育",
                 "藝術(shù)", "民族", "軍事", "其他"]
    院校特色列表 = ["不限", "985", "211", "雙一流", "強(qiáng)基院校", "101計(jì)劃", "研究生院", "保研資格",
                 "國(guó)重點(diǎn)", "省重點(diǎn)", "部委院校", "省屬", "省部共建", "CE國(guó)防七子", "五院四系", "兩電一郵",
                 "八大美院", "雙高計(jì)劃", "高水平學(xué)校建設(shè)單位", "高水平專業(yè)群建設(shè)單位", "國(guó)家級(jí)示范",
                 "國(guó)家級(jí)骨干", "現(xiàn)代學(xué)徒制試點(diǎn)學(xué)院", "香港高財(cái)通"]
    
    # 拆分輸出(按逗號(hào)或頓號(hào)或空格分割)
    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  # 跳過(guò)已處理的行
    
    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 庫(kù),并正確部署了 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ù)匹對(duì)

注意事項(xiàng)

模型調(diào)用速度

調(diào)用本地模型可能需要一定時(shí)間,建議對(duì)大量數(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)統(tǒng)計(jì)給定字符串中重復(fù)模式最高子串功能示例

    Python實(shí)現(xiàn)統(tǒng)計(jì)給定字符串中重復(fù)模式最高子串功能示例

    這篇文章主要介紹了Python實(shí)現(xiàn)統(tǒng)計(jì)給定字符串中重復(fù)模式最高子串功能,涉及Python針對(duì)字符串的遍歷、排序、切片、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • Python文件循環(huán)寫入行時(shí)防止覆蓋的解決方法

    Python文件循環(huán)寫入行時(shí)防止覆蓋的解決方法

    今天小編就為大家分享一篇Python文件循環(huán)寫入行時(shí)防止覆蓋的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • Python數(shù)據(jù)結(jié)構(gòu)與算法中的隊(duì)列詳解(2)

    Python數(shù)據(jù)結(jié)構(gòu)與算法中的隊(duì)列詳解(2)

    這篇文章主要為大家詳細(xì)介紹了Python中的隊(duì)列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • python開發(fā)準(zhǔn)備工作之配置虛擬環(huán)境(非常重要)

    python開發(fā)準(zhǔn)備工作之配置虛擬環(huán)境(非常重要)

    這篇文章主要介紹了python開發(fā)準(zhǔn)備工作之配置虛擬環(huán)境(非常重要),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • Python中map,reduce,filter和sorted函數(shù)的使用方法

    Python中map,reduce,filter和sorted函數(shù)的使用方法

    這篇文章主要介紹了Python中map,reduce,filter和sorted函數(shù)的使用方法,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-08-08
  • 用60行代碼實(shí)現(xiàn)Python自動(dòng)搶微信紅包

    用60行代碼實(shí)現(xiàn)Python自動(dòng)搶微信紅包

    這篇文章主要介紹了用60行代碼實(shí)現(xiàn)Python自動(dòng)搶微信紅包,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Python 高效編程技巧分享

    Python 高效編程技巧分享

    工作中經(jīng)常要處理各種各樣的數(shù)據(jù),遇到項(xiàng)目趕進(jìn)度的時(shí)候自己寫函數(shù)容易浪費(fèi)時(shí)間。Python 中有很多內(nèi)置函數(shù)幫你提高工作效率。
    2020-09-09
  • Python利用Streamlit構(gòu)建一個(gè)簡(jiǎn)單的照片墻應(yīng)用

    Python利用Streamlit構(gòu)建一個(gè)簡(jiǎn)單的照片墻應(yīng)用

    在現(xiàn)代 web 開發(fā)中,快速構(gòu)建交互式應(yīng)用是一項(xiàng)重要的技能,Streamlit 是一個(gè)強(qiáng)大的 Python 庫(kù),允許開發(fā)者以最小的代碼量創(chuàng)建美觀且功能豐富的 web 應(yīng)用,今天,我們將通過(guò)分析一段簡(jiǎn)單的 Streamlit 代碼,展示如何構(gòu)建一個(gè)照片墻應(yīng)用,需要的朋友可以參考下
    2025-04-04
  • Python中類的繼承代碼實(shí)例

    Python中類的繼承代碼實(shí)例

    這篇文章主要介紹了Python中類的繼承代碼實(shí)例,本文直接給出代碼及運(yùn)行效果,需要的朋友可以參考下
    2014-10-10
  • 如何獲取numpy的第一個(gè)非0元素索引

    如何獲取numpy的第一個(gè)非0元素索引

    這篇文章主要介紹了如何獲取numpy的第一個(gè)非0元素索引,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05

最新評(píng)論

贵阳市| 大同市| 泗洪县| 长宁区| 永川市| 寻甸| 新建县| 察隅县| 孝感市| 长宁区| 新昌县| 长葛市| 双柏县| 郁南县| 青海省| 南充市| 平邑县| 兴海县| 兴文县| 辽中县| 海门市| 景泰县| 商水县| 辽阳县| 米林县| 潢川县| 华安县| 安吉县| 红桥区| 肥西县| 仙居县| 武威市| 吴江市| 宜兴市| 闽清县| 华池县| 贡山| 资中县| 彰化市| 涞水县| 自贡市|