精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

四虎5151久久欧美毛片| 丰满的护士2在线观看高清| 日韩成人伦理电影在线观看| 日韩在线视频网站| 中文字幕一区二区三区人妻在线视频| 91美女主播在线视频| 国产亚洲一区二区三区| 成人亚洲激情网| 日韩精品无码一区二区| 日本不卡免费一区| 精品国产免费一区二区三区香蕉| 男人亚洲天堂网| 免费a在线看| 91丨porny丨蝌蚪视频| 国产精品网站入口| 日韩精品在线不卡| 希岛爱理av一区二区三区| 亚洲丁香婷深爱综合| mm1313亚洲国产精品无码试看| 国产高清一区二区三区视频| 91在线码无精品| 成人中文字幕+乱码+中文字幕| 99热在线观看免费精品| 亚洲激情久久| 亚洲区免费影片| 2025中文字幕| 久久精品资源| 日韩欧美一区二区三区| 欧美一区二区视频在线播放| 成a人片在线观看www视频| 成年人国产精品| 亚洲va欧美va国产综合久久| 夜夜爽妓女8888视频免费观看| 国产综合网站| 久久国产天堂福利天堂| 国产精品麻豆免费版现看视频| 日本成人中文| 欧美精品一区二区三区在线播放| 在线能看的av网站| 福利一区二区| 欧美无砖专区一中文字| 熟妇人妻va精品中文字幕| 国产亚av手机在线观看| 亚洲精品国产精华液| 亚洲免费视频一区| 国产一级在线观看| 久久蜜臀中文字幕| 免费看成人午夜电影| 四虎影视精品成人| 99久久亚洲一区二区三区青草| av蓝导航精品导航| 99久久精品国产成人一区二区| 麻豆传媒一区二区三区| 国产精品欧美一区二区| 久操视频在线免费观看| 日本系列欧美系列| 国产精品久久久久久久久久免费| 伊人久久久久久久久久久久| 日本中文在线一区| 热99精品里视频精品| 日本午夜视频在线观看| 销魂美女一区二区三区视频在线| 欧洲亚洲免费在线| 蜜臀精品一区二区三区| 天堂va蜜桃一区二区三区| 日韩免费av在线| 真实新婚偷拍xxxxx| 久久国产精品第一页| 91视频免费在线| 精品黑人一区二区三区在线观看| 国产一区二区三区观看| 9a蜜桃久久久久久免费| 无码国产精品96久久久久| 99精品国产热久久91蜜凸| 鲁丝片一区二区三区| 欧美日韩在线中文字幕| 国产日韩精品一区二区三区 | 国产青青草视频| 国产剧情一区二区| 国产在线精品一区二区三区| 色就是色亚洲色图| 国产精品电影院| 久青草视频在线播放| 色多多在线观看| 欧美调教femdomvk| 亚洲欧洲国产视频| 免费电影一区二区三区| 日韩视频免费观看| 国产亚洲成人精品| 久久亚洲不卡| 91亚洲精品久久久| 手机亚洲第一页| 国产精品理伦片| 日本中文字幕网址| 成人在线观看免费视频| 精品久久人人做人人爽| 免费看污黄网站在线观看| 久久中文视频| 欧美一级片久久久久久久| 在线播放国产一区| youjizz久久| 亚洲精品二区| 高潮在线视频| 在线播放亚洲一区| 国产精品第七页| 91日韩免费| 欧美亚洲在线视频| www.av日韩| 中文av一区二区| 欧美变态另类刺激| 麻豆国产精品| 一区二区av在线| 国产午夜福利片| 美国十次了思思久久精品导航| 俄罗斯精品一区二区三区| 浮生影视网在线观看免费| 亚洲一区二区av在线| 日本人69视频| 国产乱码精品一区二区亚洲| 久久久久久久国产| av官网在线观看| 国产精品视频在线看| 国产网站免费在线观看| 日韩免费成人| 久久精品99久久久香蕉| 精品久久久久久久久久久国产字幕| 国产精品一区二区三区网站| 一区二区视频在线观看| 日本久久免费| 日韩精品免费视频| 国产一级片免费看| 国产精品亚洲第一区在线暖暖韩国| 欧美少妇一区| 高潮一区二区| 日韩av中文字幕在线| 久草视频免费在线| 国产一区二区福利视频| 亚洲啪啪av| 日韩大尺度黄色| 亚洲精品乱码久久久久久金桔影视| 国产精品久久久精品四季影院| 日韩福利视频导航| 日韩精品伦理第一区| 亚洲欧洲高清| 国产丝袜视频一区| 国产一级淫片a视频免费观看| av成人老司机| 妞干网在线观看视频| 国产96在线亚洲| 久久久久久久一区二区| 蜜桃视频污在线观看| 亚洲一区二三区| 亚洲精品国产成人av在线| 国产精品二区影院| 成人欧美视频在线| av资源中文在线| 日韩激情视频在线| 香蕉影院在线观看| 久久精品一区二区三区不卡牛牛 | 日韩脚交footjobhd| 日韩国产高清视频在线| 色老头在线视频| 欧美韩国日本一区| 潘金莲激情呻吟欲求不满视频| 国产精品久久天天影视| 91成人免费视频| av电影在线免费| 亚洲欧美一区二区三区情侣bbw | 欧美日韩一区小说| 国产三级精品三级观看| 国产综合久久久久久久久久久久| 国产女主播av| 欧美激情影院| 国产精品91在线观看| av中文字幕一区二区三区| 91麻豆精品国产自产在线观看一区 | 天堂网av手机版| 国产香蕉久久精品综合网| 人人干人人干人人| 欧美激情性爽国产精品17p| 国产精品日韩一区二区三区| 中文一区一区三区高中清不卡免费| 亚洲天堂视频在线观看| 97精品人妻一区二区三区香蕉| 一区二区三区在线免费视频| jizz欧美性20| 精品一区二区国语对白| 青草网在线观看| 国产精品午夜一区二区三区| 亚洲自拍另类欧美丝袜| 日本在线高清| 久久视频中文字幕| 香港三日本三级少妇66| 欧美性大战久久久| 久久久久久久蜜桃| 亚洲国产精品传媒在线观看| 日批视频在线看| 另类av一区二区| 400部精品国偷自产在线观看| 老司机成人在线| 成人激情视频免费在线| 黄在线观看免费网站ktv| 日韩在线精品视频| 亚洲色大成网站www| 欧美电影在线免费观看| 三级视频在线观看| 亚洲精品乱码久久久久久黑人| 黄色在线观看av| 国产成a人无v码亚洲福利| 国产a级片免费观看| 亚洲视频高清| 性欧美18一19内谢| 免费欧美一区| 精品国产乱码久久久久久蜜柚| www.91精品| 国产精品视频在线观看| 蜜桃av在线| 欧美丰满少妇xxxxx| 永久免费在线观看视频| 亚洲九九九在线观看| 国产手机av在线| 欧美日韩国产三级| 五月天激情四射| 婷婷国产在线综合| 久艹视频在线观看| 1024精品合集| 久久久久久久久福利| 91香蕉视频在线| 91视频在线免费| 东方欧美亚洲色图在线| 九九九久久久久久久| 蜜桃一区二区三区在线观看| 国产天堂在线播放| 久久精品九九| 欧美a在线视频| 日韩午夜高潮| 波多野结衣家庭教师在线播放| 欧美午夜a级限制福利片| 99精品一区二区三区的区别| 日韩欧美电影| 翔田千里亚洲一二三区| 狠狠操综合网| 欧美日韩亚洲免费| 亚洲宅男一区| 日本免费高清一区二区| 精品产国自在拍| 五月天亚洲综合情| 欧美日韩国产一区二区三区不卡| 欧美日韩在线一二三| 免费欧美激情| 天堂资源在线亚洲资源| 日韩欧美一区二区三区免费看| 色99中文字幕| 99热国内精品永久免费观看| 一区二区三区在线视频看| 日韩中文欧美| 亚洲欧洲国产精品久久| 日韩在线观看电影完整版高清免费悬疑悬疑| 欧美日韩在线精品一区二区三区| 国产亚洲电影| 亚洲国产日韩美| 99久久夜色精品国产亚洲96| 男插女免费视频| 欧美午夜不卡影院在线观看完整版免费| 日本福利视频在线观看| 亚洲区国产区| 无遮挡又爽又刺激的视频| 日韩成人一级大片| 99九九精品视频| 国产69精品久久99不卡| 国产在线观看无码免费视频| 久久久久久久国产精品影院| 影音先锋男人在线| 亚洲欧美日韩国产成人精品影院| 欧美精品乱码视频一二专区| 精品久久中文字幕| 中文字幕 国产精品| 777a∨成人精品桃花网| 亚洲乱码国产乱码精品精软件| 日韩电影网在线| 在线观看麻豆| 久久全国免费视频| 先锋欧美三级| 97se在线视频| 综合亚洲色图| 一区二区三区日韩视频| 99精品免费视频| 美女在线视频一区二区| 成人综合激情网| 亚洲色成人网站www永久四虎| 亚洲天堂精品在线观看| 日韩精品手机在线| 欧美日韩国产一区| 无码精品人妻一区二区| 中国日韩欧美久久久久久久久| 性欧美1819sex性高清大胸| 日韩美女主播视频| 综合激情五月婷婷| 欧洲成人一区二区| 韩国av一区| 中文字幕一区二区三区四区在线视频| 国产中文字幕一区| 久久久视频6r| 亚洲男人电影天堂| 欧美日韩a v| 精品国产精品一区二区夜夜嗨| 成人午夜影视| 韩剧1988在线观看免费完整版 | 成人久久久久爱| 小嫩嫩12欧美| 污污污污污污www网站免费| 日本va欧美va欧美va精品| 色欲欲www成人网站| 国产精品全国免费观看高清| 黄网在线观看视频| 精品美女被调教视频大全网站| gogogo高清在线观看免费完整版| 午夜美女久久久久爽久久| 免费一区二区三区在线视频| 图片区小说区区亚洲五月| 香蕉久久a毛片| a级一a一级在线观看| 一区二区三区日韩欧美| 中文字幕免费观看视频| 亚洲毛片在线免费观看| a天堂资源在线| 99久久自偷自偷国产精品不卡| 99热精品久久| 亚洲va综合va国产va中文| 欧美极品少妇xxxxⅹ高跟鞋| www.国产com| 亚洲成人黄色网址| 91精品久久久| 亚洲精品免费av| 99国产**精品****| 五月婷婷丁香色| 国产欧美精品一区二区三区四区| 人妻 日韩精品 中文字幕| 亚洲国产天堂久久综合网| 丁香花视频在线观看| 国产精品久久精品视| 一区视频在线| 91人妻一区二区| 亚洲综合色成人| 丰满大乳国产精品| 国模私拍视频一区| 精品福利网址导航| 青青青青草视频| 成人国产精品视频| 黄色片视频网站| 亚洲精品ady| 涩涩av在线| 欧洲一区二区在线| 日韩经典中文字幕一区| 一级二级黄色片| 欧美丰满美乳xxx高潮www| 超碰公开在线| 国产精品视频免费一区| 野花国产精品入口| 波多野结衣一本| 欧洲人成人精品| 婷婷在线视频| 91最新国产视频| 亚洲高清毛片| 鲁大师私人影院在线观看| 91福利在线免费观看| 99se视频在线观看| 成人国内精品久久久久一区| 你懂的一区二区| av av在线| 色偷偷久久一区二区三区| shkd中文字幕久久在线观看| 成人女保姆的销魂服务| 在线欧美福利| 精品国产av无码| 欧美日韩成人高清| 日本理论片午伦夜理片在线观看| 国产亚洲二区| 日本不卡中文字幕| 成年人av电影| 日韩国产一区三区| 免费视频观看成人| 国产高清www| 欧美激情一区二区三区不卡| 国产哺乳奶水91在线播放| 97国产精品视频人人做人人爱| 精品国产日韩欧美| 无码人妻丰满熟妇啪啪网站| 91电影在线观看| av理论在线观看| 欧美日韩精品久久| 国产精品亚洲成人| www.欧美色| 欧美男插女视频| 国产午夜一区| 精品久久久久一区二区| 欧美日韩在线播放一区| 丁香花视频在线观看| 中国成人亚色综合网站 | 国产三区二区一区久久|