Python 代码实现模糊查询

在Django项目中,通过使用Python的正则表达式实现了对大量字典数据的高效模糊搜索,使用户能够快速定位所需信息。

一、概述

最近在做一个django项目,里面有一个字典数据非常大,虽然已经做了分页处理。但是用户想要找到指定的数据,还得一页页翻,非常繁琐。

字典的结构如下:

file_list = [
    {
        "type": "dir",
        "size": "123",
        "name": "access.log",
    },
    {
        "type": "dir",
        "size": "123",
        "name": "access.log.gz",
    },
    {
        "type": "dir",
        "size": "123",
        "name": "error.log",
    },
    {
        "type": "dir",
        "size": "123",
        "name": "access-auth.log",
    },
]

 

当我输入关键字access时,需要出现3个结果。

['access-auth.log', 'access.log', 'access.log.gz']

 

二、代码实现

完整代码如下:

test.py

import re

file_list = [
    {
        "type": "dir",
        "size": "123",
        "name": "access.log",
    },
    {
        "type": "dir",
        "size": "123",
        "name": "access.log.gz",
    },
    {
        "type": "dir",
        "size": "123",
        "name": "error.log",
    },
    {
        "type": "dir",
        "size": "123",
        "name": "access-auth.log",
    },
]


def fuzzy_finder(key, data):
    """
    模糊查找器
    :param key: 关键字
    :param data: 数据
    :return: list
    """
    # 结果列表
    suggestions = []
    # 非贪婪匹配,转换 'djm' 为 'd.*?j.*?m'
    # pattern = '.*?'.join(key)
    pattern = '.*%s.*'%(key)
    # print("pattern",pattern)
    # 编译正则表达式
    regex = re.compile(pattern)
    for item in data:
        # print("item",item['name'])
        # 检查当前项是否与regex匹配。
        match = regex.search(item['name'])
        if match:
            # 如果匹配,就添加到列表中
            suggestions.append(item)

    return suggestions

# 搜索关键字
keys = "access"
result = fuzzy_finder(keys,file_list)
print(result)
View Code

 

执行输出:

[{'type': 'dir', 'size': '123', 'name': 'access.log'}, {'type': 'dir', 'size': '123', 'name': 'access.log.gz'}, {'type': 'dir', 'size': '123', 'name': 'access-auth.log'}]

 

 

本文参考链接:

https://www.cnblogs.com/weiman3389/p/6047017.html

<think>嗯,用户想用Python实现模糊聚类分析,需要示例代码或库推荐。首先,我得回忆一下模糊聚类的基本概念。模糊聚类和传统的K-means不同,它允许数据点属于多个簇,隶属度是概率值。常用的算法有FCM(模糊C均值),对吧? 接下来,得想想Python中有哪些库支持模糊聚类。记得scikit-learn主要处理传统聚类,比如K-means,但好像没有内置的FCM。那可能需要找第三方库。对了,有个叫skfuzzy的库,专门做模糊逻辑相关的,包括FCM。还有没有其他的?比如scikit-fuzzy可能和skfuzzy是同一个库的不同名称?需要确认一下。 然后,用户可能需要示例代码。得先确保安装skfuzzy库,用pip install scikit-fuzzy。然后导入必要的模块,比如numpy,skfuzzy的cmeans。然后准备数据,假设用鸢尾花数据集,或者生成模拟数据。加载数据后,应用FCM,得到聚类中心和隶属度矩阵。之后评估结果,比如用模糊分割系数或模糊分割熵。最后可视化,可能需要matplotlib画图。 另外,用户可能需要知道如何调整参数,比如簇数、模糊系数m。还要注意数据预处理,标准化,因为FCM对尺度敏感。需要提醒用户这些步骤。 有没有其他库?比如PyClustering,它支持FCM和其他聚类算法。可以提一下,但示例用skfuzzy可能更直接。然后代码部分,展示数据准备、模型训练、结果评估和可视化的步骤。可能还要提到模糊C均值的优缺点,比如对噪声敏感,或者计算量大。 还要考虑用户可能的后续问题,比如参数选择,如何解释隶属度,如何处理高维数据,或者如何评估模糊聚类的效果。这些问题可以作为相关问题推荐。 需要检查引用内容是否有帮助。用户提供的引用里提到K-means、K-medoids、LDA主题模型,但模糊聚类不在其中。所以主要依靠自己的知识库回答,不过可以提相关聚类方法作为比较,比如引用[5]提到最小化平方误差,类似FCM的目标函数。 最后确保代码正确,语法正确,比如skfuzzy的cmeans函数参数是否正确,数据是否需要转置,因为cmeans可能要求特征在行,样本在列。可能需要注意,比如数据转置处理。在示例代码中,data.T可能被使用,需要确认是否正确。 总结步骤:安装库,导入模块,数据预处理,应用FCM,评估,可视化,参数调整建议。然后推荐相关库,如PyClustering,并提供学习资源链接。最后生成相关问题,如参数调优、与其他聚类算法比较、处理噪声方法等。</think>### Python实现模糊聚类分析的解决方案 模糊聚类分析(如模糊C均值算法)允许数据点以概率形式属于多个簇,适用于边界不清晰的数据场景。以下是具体实现方法和示例代码: --- #### 一、核心工具库推荐 1. **`scikit-fuzzy`库** 专用于模糊逻辑计算,包含模糊C均值(FCM)算法 ```bash pip install scikit-fuzzy ``` 2. **`PyClustering`库** 支持FCM和其他高级聚类算法 ```bash pip install pyclustering ``` --- #### 二、模糊C均值(FCM)代码实现 ```python import numpy as np import skfuzzy as fuzz import matplotlib.pyplot as plt from sklearn.datasets import make_blobs from sklearn.preprocessing import StandardScaler # 生成模拟数据 data, _ = make_blobs(n_samples=300, centers=3, cluster_std=1.2, random_state=42) data = StandardScaler().fit_transform(data) # 标准化[^5] # 模糊C均值聚类 n_clusters = 3 cntr, u, u0, d, jm, p, fpc = fuzz.cluster.cmeans( data.T, # 需转置为(特征数×样本数) n_clusters, 2.0, # 模糊系数m(通常∈[1.5,3.0]) error=0.005, maxiter=1000, init=None ) # 获取隶属度最大的簇标签 cluster_labels = np.argmax(u, axis=0) # 可视化 plt.scatter(data[:, 0], data[:, 1], c=cluster_labels, cmap='viridis', alpha=0.6) plt.scatter(cntr[:, 0], cntr[:, 1], marker='X', s=200, c='red', edgecolor='k') plt.title('模糊C均值聚类结果') plt.xlabel('特征1') plt.ylabel('特征2') plt.show() # 评估指标:模糊分割系数(值越接近1效果越好) print(f"模糊分割系数(FPC): {fpc:.3f}") ``` --- #### 三、关键参数说明 1. **模糊系数`m`** - 控制隶属度的模糊程度,$m \in [1.5, 3.0]$ - $m=1$时退化为K均值,$m$越大隶属度越分散 2. **初始化方法** - 默认随机初始化,可通过`init`参数指定初始质心 3. **停止条件** - `error`: 目标函数变化阈值 - `maxiter`: 最大迭代次数 --- #### 四、应用建议 1. **数据预处理** - 标准化处理(如`StandardScaler`)避免特征尺度差异影响[^5] 2. **噪声处理** - 可结合截断隶属度(如阈值过滤)提升抗噪能力 3. **高维数据优化** - 使用PCA降维后再进行聚类 --- #### 五、扩展学习资源 - **官方文档** - [scikit-fuzzy FCM文档](https://pythonhosted.org/scikit-fuzzy/auto_examples/plot_cmeans.html) - [PyClustering FCM示例](https://pyclustering.github.io/docs/0.10.1/html/d3/d3d/classfcm_1_1fcm.html) ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值