精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

RapidFuzz , 一個神奇的 Python 庫

開發
RapidFuzz 是一個高性能的字符串匹配庫,用于計算字符串之間的相似度。它是 FuzzyWuzzy 的更快替代品,使用 C++ 實現并提供 Python 接口。

RapidFuzz 是一個高性能的字符串匹配庫,用于計算字符串之間的相似度。它是 FuzzyWuzzy 的更快替代品,使用 C++ 實現并提供 Python 接口。

官方資料

  • 文檔:https://rapidfuzz.github.io/RapidFuzz/
  • GitHub:https://github.com/rapidfuzz/RapidFuzz

安裝

pip install rapidfuzz

基本功能

(1) 簡單比率計算

計算兩個字符串的簡單相似度比率:

from rapidfuzz import fuzz
ratio = fuzz.ratio("hello world", "hello python")
print(ratio)  

# 輸出相似度百分比,例如 53.85

(2) 部分比率

部分字符串相似度(一個字符串是另一個的子集時特別有用):

from rapidfuzz import fuzz
partial_ratio = fuzz.partial_ratio("hello world", "world")
print(partial_ratio)  

# 輸出 100,因為"world"完全匹配

(3) 令牌排序比率

忽略單詞順序計算相似度:

from rapidfuzz import fuzz
token_sort_ratio = fuzz.token_sort_ratio("hello world", "world hello")
print(token_sort_ratio)  

# 輸出 100,因為單詞相同只是順序不同

(4) 令牌集比率

更靈活的相似度計算,考慮共同和獨特的令牌:

from rapidfuzz import fuzz
token_set_ratio = fuzz.token_set_ratio("hello world", "hello python world")
print(token_set_ratio)  

# 輸出較高的相似度,因為有共同單詞

高級功能

(1) 處理多個字符串

找出與查詢最匹配的字符串,獲取單個或多個匹配內容。

from rapidfuzz import process

choices = ["hello world", "hello python", "hello there", "world peace"]

best_match = process.extractOne("hello", choices)
print(best_match)  

# 輸出: ('hello world', 90.0)

# 獲取前3個匹配
top_3 = process.extract("hello", choices, limit=3)
print(top_3)  

# 輸出: [('hello world', 90.0), ('hello python', 90.0), ('hello there', 90.0)]

(2) 使用不同評分器

使用不同的相似度計算方法:

from rapidfuzz import process

choices = ["hello world", "hello python", "hello there", "world peace"]

best_partial=process.extractOne("world",choices,scorer=fuzz.partial_ratio)
print(best_partial)  

# 輸出: ('world peace', 100.0)

best_token=process.extractOne("pythonhello",choices,scorer=fuzz.token_sort_ratio)
print(best_token)  

# 輸出: ('hello python', 100.0)

(3) 自定義權重

可以組合多個評分方法:

def custom_scorer(s1, s2, processor=None, score_cutoff=None, **kwargs):
    if processor:
        s1 = processor(s1)
        s2 = processor(s2)

    score = (fuzz.ratio(s1, s2) + fuzz.token_sort_ratio(s1, s2)) / 2

    if score_cutoff isnotNoneand score < score_cutoff:
        return0

    return score

choices = ["hello world", "hello python", "hello there", "world peace"]

best_custom = process.extractOne("python hello", choices, scorer=custom_scorer)
print(best_custom)

(4) 處理大型數據集

對于大型數據集,可以使用更高效的提取方法,可以使用更快的提取方法(score_cutoff設置最低分數閾值)

large_choices = [...]  
results=process.extract("query",large_choices,corer=fuzz.WRatio, score_cutoff=80)

應用場景

(1) 數據清洗

import pandas as pd
from rapidfuzz import process, fuzz

df = pd.DataFrame({
    "name": ["John Doe", "Jon D.", "Jane Smith", "jane smith", "Robert Johnson"]
})

# 標準化姓名
unique_names = df['name'].unique()
standardized = {}

for name in df['name']:
    if name notin standardized:
       match, score, _ = process.extractOne(name, unique_names, scorer=fuzz.WRatio)
        if score > 85:  # 相似度閾值
            standardized[name] = match
        else:
            standardized[name] = name

df['standardized_name'] = df['name'].map(standardized)
print(df)

(2) 搜索查找

from rapidfuzz import process

products = ["iPhone 12", "iPhone 12 Pro", "Samsung Galaxy S21", "iPad Pro"]

def search_suggestions(query, items, limit=3):
    results = process.extract(query, items, limit=limit)
    return [item[0] for item in results]

print(search_suggestions("iphone", products))  # 輸出: ['iPhone 12', 'iPhone 12 Pro']

實戰

公司房源數據綁定通通鎖,有一個房源表,表中含有lock_id字段為通通鎖ID。維修人員安裝鎖并錄入鎖數據,往往錄入的鎖名稱和房源名稱 完全一致。 這給技術人員通過sql語句的=或like都不能完全實現。

(1) 思路

  • 房源數據在數據庫表中,包含 lock_id 字段
  • 智能鎖數據是外部的 JSON 集合
  • 需要將 JSON 中的智能鎖通過名稱模糊匹配綁定到房源

鎖數據如下:

smart_locks_json = [
{"id":"lock001", "name": "301室", "mac": "00:1A:2B:3C:4D:5E"},
{"id":"lock002", "name": "302-A", "mac": "00:1A:2B:3C:4D:5F"},
{"id":"lock003", "name": "三樓303", "mac": "00:1A:2B:3C:4D:60"},
]

數據表ORM:

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class House(Base):
    __tablename__ = 'houses'
    
    id = Column(Integer, primary_key=True)
    name = Column(String)  # 房源名稱,如 "3樓301號"
    address = Column(String)
    lock_id = Column(String)  # 存儲智能鎖ID,注意類型可能與JSON中的鎖ID一致

engine = create_engine('sqlite:///house.db')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
db = Session()

實現代碼如下:

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class House(Base):
    __tablename__ = 'houses'
    
    id = Column(Integer, primary_key=True)
    name = Column(String)  # 房源名稱,如 "3樓301號"
    address = Column(String)
    lock_id = Column(String)  # 存儲智能鎖ID,注意類型可能與JSON中的鎖ID一致

engine = create_engine('sqlite:///house.db')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
db = Session()
實現代碼如下:

from rapidfuzz import process, fuzz, utils
from typing import List, Dict, Tuple

def match_locks_to_properties(
    locks_data: List[Dict], 
    threshold: int = 80,
    limit_per_lock: int = 3
) -> List[Tuple[Dict, House, float]]:
    """
    將JSON中的智能鎖匹配到房源
    
    :param locks_data: 智能鎖JSON數據
    :param threshold: 最低匹配分數閾值
    :param limit_per_lock: 每個鎖返回的最大匹配項數
    :return: 返回匹配結果列表,每個元素是(鎖字典, 房源對象, 匹配分數)的元組
    """
    # 獲取所有未綁定鎖的房源
unassigned_properties=db.query(House).filter(House.lock_id.is_(None)).all()
    
    ifnot locks_data ornot unassigned_properties:
        return []
    
    # 準備數據用于匹配
property_names = [prop.name for prop in unassigned_properties]
    property_map = {prop.name: prop for prop in unassigned_properties}
    
    # 存儲匹配結果
    matches = []
    
    for lock in locks_data:
        lock_name = lock.get("name", "")
        ifnot lock_name:
            continue
            
        # 使用 RapidFuzz 找到最佳匹配
        results = process.extract(
            lock_name, 
            property_names, 
            scorer=fuzz.WRatio,  # 使用加權比率
            limit=limit_per_lock,
            score_cutoff=threshold
        )
        
        for prop_name, score, _ in results:
            prop = property_map[prop_name]
            matches.append((lock, prop, score))
    
    return matches

def apply_matches(matches: List[Tuple[Dict, House, float]]):
    """
    應用匹配結果到數據庫
    """
    for lock, prop, score in matches:
        print(f"匹配: 鎖 '{lock['name']}' (ID: {lock['id']}) -> 房源 '{prop.name}' (分數: {score:.2f})")
        prop.lock_id = lock['id']
    db.commit()
責任編輯:趙寧寧 來源: 程序員老朱
相關推薦

2025-06-04 08:05:00

Peewee?數據庫開發

2025-06-09 10:15:00

FastAPIPython

2025-05-27 08:00:00

Pythonemoji

2025-06-09 07:25:00

filelock數據庫

2025-08-01 06:15:00

RQPython

2025-06-10 08:00:00

Pygalpython

2025-06-04 10:05:00

Gooey開源Python

2025-05-29 10:00:00

ZODBPython數據庫

2025-06-05 08:10:00

PyneconePythonWeb 應用

2025-06-05 10:00:00

GensimPython

2024-04-01 05:00:00

GUIpythonDearPyGui

2025-05-28 08:00:00

Pythonpython-jos開發

2025-06-03 10:00:00

LiteLLMPython

2025-06-03 08:30:00

PotteryRedisPython

2014-04-23 11:11:27

Linux下載管理器uGet

2020-06-08 07:52:31

Python開發工具

2023-01-16 18:16:49

CinnamonLinux桌面環境

2011-11-02 12:38:12

華為華為ARG3

2023-11-28 14:22:54

Python音頻

2022-07-21 09:50:20

Python日期庫pendulum
點贊
收藏

51CTO技術棧公眾號

邻家有女韩剧在线观看国语| 日本一区二区免费在线观看| 外国成人毛片| 亚洲精品久久嫩草网站秘色| 国产高清在线一区| 天堂网中文字幕| 99re66热这里只有精品8| 欧美不卡激情三级在线观看| 日韩在线xxx| 成年视频在线观看| 久久亚洲精品国产精品紫薇| 成人网在线观看| 色网站在线播放| 欧美激情电影| 亚洲欧美精品suv| 国产伦精品一区二区三区妓女下载| av免费不卡国产观看| 国产精品日韩精品欧美在线| 狠狠色综合网站久久久久久久| 中文字幕乱码在线观看| 日韩视频一区| 欧美日韩xxx| 国产一二三av| 精品亚洲成人| 亚洲精品一区二区网址| 国产老头和老头xxxx×| 国产精品久久久久久吹潮| 精品日本高清在线播放| 欧美人与动牲交xxxxbbbb| 国产爆初菊在线观看免费视频网站| 国产99久久精品| 国产在线精品成人一区二区三区| 三级黄色在线视频| 雨宫琴音一区二区三区| 在线看日韩av| 级毛片内射视频| 偷拍自拍亚洲色图| 亚洲护士老师的毛茸茸最新章节| 欧美激情第3页| 国产精品蜜月aⅴ在线| 日韩欧美在线视频| 久色视频在线播放| 国产三级伦理在线| 亚洲精品美腿丝袜| 国产奶头好大揉着好爽视频| yiren22亚洲综合伊人22| 久久综合精品国产一区二区三区| 国产精选在线观看91| 精品国产av一区二区| 久久国产精品72免费观看| 国产精品久久一| 瑟瑟视频在线免费观看| 日韩二区三区在线观看| 国产99久久精品一区二区 夜夜躁日日躁| 日韩精品一区二区在线播放| 国户精品久久久久久久久久久不卡| 久久综合五月天| 日韩三级在线观看视频| 中国精品18videos性欧美| 精品国内自产拍在线观看| 日本 欧美 国产| 97在线精品| 欧美成人免费一级人片100| 中文国语毛片高清视频| 国产精品久久久久蜜臀| 久久久精品日本| 欧美成人免费观看视频| 亚洲高清在线| 日本久久亚洲电影| 欧美国产一级片| 麻豆精品视频在线观看| 亚洲一区中文字幕在线观看| 国产高清在线免费| fc2成人免费人成在线观看播放| 国产日韩一区二区| 久久久资源网| 136国产福利精品导航| 人妻无码一区二区三区四区| 国产传媒在线观看| 91福利区一区二区三区| 午夜激情影院在线观看| 久久aimee| 夜夜嗨av色一区二区不卡| 天堂网中文在线观看| 欧美天天在线| 国产成人精品久久二区二区91 | 999久久久精品国产| 久久亚洲精品一区| 亚洲欧美在线视频免费| 日本aⅴ免费视频一区二区三区| 成人免费激情视频| 秋霞网一区二区| 国产欧美一区二区三区鸳鸯浴| 久久久无码中文字幕久...| 91九色美女在线视频| 在线观看视频欧美| 91精品人妻一区二区三区蜜桃2| 天海翼亚洲一区二区三区| 色爱av美腿丝袜综合粉嫩av | 永久91嫩草亚洲精品人人| 69av成年福利视频| 国产精品人妻一区二区三区| 91免费版在线看| 中文字幕一区二区三区四区五区六区| 超碰在线最新网址| 欧美日韩午夜在线视频| 艳妇乳肉豪妇荡乳xxx| 欧美xxxxx视频| 欧美一级bbbbb性bbbb喷潮片| 97超碰人人草| 久久精品一级爱片| www.国产在线视频| 四虎视频在线精品免费网址| 亚洲老司机av| 免费网站观看www在线观| 日本中文字幕不卡| 国产亚洲第一区| 精品国产丝袜高跟鞋| 色一区在线观看| 国产大学生视频| 99久久www免费| 国产a∨精品一区二区三区不卡| 国产a级免费视频| 国产精品你懂的在线欣赏| 91免费视频网站在线观看| 欧美a在线观看| 色偷偷偷综合中文字幕;dd| 久久久久99精品成人片三人毛片| 国产成人免费xxxxxxxx| 黄色高清视频网站| 欧美aaa大片视频一二区| 日韩黄色av网站| 国产在线拍揄自揄拍无码视频| 麻豆精品视频在线| 欧美日韩亚洲免费| sese综合| 日韩精品视频免费| 日韩特黄一级片| 成人美女视频在线看| 激情五月六月婷婷| 中文一区二区三区四区| 久久国产色av| 国产成年妇视频| 亚洲码国产岛国毛片在线| 国内外成人免费在线视频| 国内成人精品| 国产91亚洲精品| 国产在线观看网站| 日本韩国欧美一区二区三区| 精品成人av一区二区三区| 99日韩精品| 久久青青草综合| 深夜在线视频| 精品在线小视频| 免费视频久久久| 久久九九影视网| 91精品亚洲一区在线观看| 亚洲男人都懂的| 亚洲18在线看污www麻豆 | 另类欧美日韩国产在线| 亚洲综合网中心| 亚洲伊人伊成久久人综合网| 久久精品视频免费播放| 国产视频在线观看免费| 一区二区不卡在线播放| xxxwww国产| 另类国产ts人妖高潮视频| 日韩电影大全在线观看| 欧美高清xxx| 久青草国产97香蕉在线视频| 亚洲精品国产片| 天天综合色天天综合色h| 中文字字幕码一二三区| 秋霞电影一区二区| 国产对白在线播放| 开心激情综合| 国产精品久久97| jizz性欧美| 日韩av网址在线| 中文字幕久久网| 亚洲永久免费av| 97人妻精品一区二区三区免 | 蜜桃视频久久一区免费观看入口| 天天综合天天综合色| 国产一区二区三区精品在线| 国产麻豆视频一区二区| 亚洲 欧美 日韩 国产综合 在线| 成人在线免费观看视频| 99久久伊人精品影院| 成人美女大片| 久久亚洲精品成人| 天堂av资源在线| 欧美日韩精品电影| 国产精品9191| 国产精品女同一区二区三区| 久久精品女同亚洲女同13| 日本人妖一区二区| 亚洲 欧美 综合 另类 中字| 精品久久精品| 国产伦精品一区二区三| 日本综合字幕| 久久久久久久久久久久av| 国产毛片在线看| 亚洲国产三级网| 一级全黄裸体免费视频| 色综合天天天天做夜夜夜夜做| 丰满少妇被猛烈进入一区二区| www成人在线观看| 日本女人黄色片| 蜜臀av一级做a爰片久久| 男女啪啪免费视频网站| 香蕉久久网站| 天堂资源在线亚洲视频| 狼人天天伊人久久| 亚洲a∨日韩av高清在线观看| 台湾佬中文娱乐久久久| 韩国v欧美v日本v亚洲| 免费黄色电影在线观看| 国产一区二区三区在线免费观看| 日韩一级免费视频| 日韩欧美亚洲另类制服综合在线| 国产精品免费无遮挡无码永久视频| 亚洲午夜影视影院在线观看| 日本黄色片免费观看| 亚洲国产精品99久久久久久久久| 亚洲一级av无码毛片精品| 国产精品一卡二卡在线观看| 一级片视频免费观看| 日韩精品亚洲专区| 无码人妻h动漫| 国产一区二区你懂的| 亚洲色成人www永久在线观看| 久久久国产精品| 亚洲蜜桃在线| 欧美日韩精品一区二区视频| 久久久综合香蕉尹人综合网| 欧美人体视频| 久久精品magnetxturnbtih| 成人精品毛片| 国产伦精品一区| 欧美有码在线| 精品伊人久久大线蕉色首页| 激情小说亚洲图片| 国内精品久久国产| av综合网址| 狠狠色综合网站久久久久久久| 欧美尿孔扩张虐视频| 精品一区久久| 久久综合影院| 亚洲免费视频一区| 天堂美国久久| 久久久久久久久影视| 小小影院久久| 人妻互换免费中文字幕| 激情久久综合| 欧美日韩亚洲第一| 日产欧产美韩系列久久99| 色乱码一区二区三区在线| 免费人成精品欧美精品| 欧美一级小视频| 国产成人综合自拍| 蜜臀aⅴ国产精品久久久国产老师| 高清av一区二区| 亚洲国产第一区| 国产亚洲欧美在线| 国产成人免费在线观看视频| 亚洲日本丝袜连裤袜办公室| 久久久美女视频| 精品久久久久久亚洲精品| 久久99国产综合精品免费| 在线精品观看国产| 国产老女人乱淫免费| 精品精品国产高清一毛片一天堂| 视频污在线观看| 中文字幕在线看视频国产欧美| 日本在线免费播放| 欧美高清自拍一区| 中文字幕一区久| 国产一区香蕉久久| 亚洲精品国产九九九| 久久riav| 色综合咪咪久久网| 日韩一级性生活片| 日本少妇一区二区| 老熟女高潮一区二区三区| 久久影院午夜片一区| 99热99这里只有精品| 五月综合激情网| 艳妇乳肉豪妇荡乳av| 精品人伦一区二区色婷婷| 手机在线观看毛片| 日韩亚洲一区二区| 亚洲美女尤物影院| 91超碰rencao97精品| 夜夜春成人影院| 在线观看三级网站| 久久蜜桃精品| 久久久男人的天堂| 中文在线一区二区 | 在线精品视频小说1| 精品久久久中文字幕人妻| 亚洲日韩欧美视频| 成人女同在线观看| 成人国内精品久久久久一区| 欧美成人一区在线观看| 久久最新免费视频| 青草国产精品久久久久久| 中文字幕 亚洲一区| 亚洲欧美一区二区不卡| 中文字幕乱伦视频| 日韩av一区二区在线| 神马午夜伦理不卡| 国产欧美日韩亚洲精品| 久久av电影| 国产精品自拍片| 国产成人亚洲综合a∨婷婷 | 久久高清精品| 日日碰狠狠躁久久躁婷婷| 国产不卡高清在线观看视频| 日韩一区二区三区四区视频| 色悠悠亚洲一区二区| 神马午夜精品95| 欧美精品久久久久久久| 国产在线不卡一区二区三区| 亚洲无玛一区| 免费观看在线色综合| 波多野结衣 在线| 精品人伦一区二区三区蜜桃网站| 亚洲经典一区二区三区| 久久精品男人天堂| 欧美午夜三级| 亚洲精品成人a8198a| 日韩精品亚洲一区二区三区免费| 国产美女视频免费观看下载软件| 亚洲综合久久av| 精品国产黄色片| 欧美精品电影免费在线观看| 欧美精品影院| 日韩一级免费看| 国产成人在线影院 | 亚洲午夜视频| 亚洲熟女乱综合一区二区| 综合自拍亚洲综合图不卡区| 性高潮视频在线观看| 中文字幕亚洲一区二区三区五十路| 美女福利一区二区| 欧美专区一二三 | 性感美女久久精品| 六月丁香色婷婷| 91超碰caoporn97人人| 亚洲精品456| 国产视频在线视频| 欧美国产日韩亚洲一区| 依依成人在线视频| 日韩小视频在线| 日本一区影院| 男人插女人视频在线观看| 波多野洁衣一区| 国产免费av一区| 中日韩美女免费视频网站在线观看| 国产香蕉久久| 伊人网在线免费| 成人av电影免费在线播放| 波多野结衣国产| 这里精品视频免费| 国产一区二区三区黄网站| 日韩日韩日韩日韩日韩| 久久久久久99久久久精品网站| 中文天堂在线视频| 久久久精品一区| 久久激情av| 国产精品一区二区小说| 亚洲码国产岛国毛片在线| 日本人妻丰满熟妇久久久久久| 国产999精品久久久| 国产精品毛片久久| 国产精品亚洲一区二区无码| 日本韩国精品在线| 黄色片免费在线观看| 国产精品视频500部| 爽爽淫人综合网网站| 激情综合五月网| 亚洲视频日韩精品| 99精品美女视频在线观看热舞| 91丨porny丨探花| 国产精品视频一二三| 黄色a在线观看| 国产精品入口免费视频一| 欧美三级视频| 日本一区二区视频在线播放| 日韩网站在线看片你懂的| 另类图片综合电影| 大地资源第二页在线观看高清版| 99视频精品在线| 国产乱子伦精品无码码专区| 欧美亚洲第一区| 亚洲欧美亚洲| 黄色三级生活片| 亚洲级视频在线观看免费1级| 国产精区一区二区|