Python 连接MongoDB并比较两个字符串相似度的简单示例

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:

本文介绍一个示例:使用 pymongo 连接 MongoDB,查询MongoDB中的 字符串 记录,并比较字符串之间的相似度。

一,Python连接MongoDB

大致步骤:创建MongoClient---> 获取 DataBase --->获取Collection,代码如下:

client = MongoClient(host="127.0.0.1", port=10001)
db = client['database_name']
db.authenticate(name="user_name", password="password")
coll = db.get_collection("collection_name")

 

二,Python MongoDB 查询

以uid为条件进行查询。由于 collection_name 中定义了多个字段,这里只想返回 chat 字段的内容,并且不返回 _id 字段内容。故查询条件如下:(find方法的第一个参数指定查询的条件,第二个参数指定 待 返回的 字段)

coll.find({"uid": 123456789}, {"_id": 0, "chat": 1})

 

MongoDB查询返回的每一条记录都是一个 dict:{"chat":"这是一条发言内容"},再将之转化成 chats列表(list) 存储每一条发言内容:

 list_chat = list(coll.find({"uid": 123456789}, {"_id": 0, "chat": 1}))
 chats = [d['chat'] for d in list_chat]

 

三,Python比较两个字符串的相似度

给定一个列表(list),列表中的每个元素都是一个字符串,计算列表中相邻两个元素的相似度。

#查找chats 列表 里面 相邻 字符串 之间的 相似度
def compute_similar():
    chats = uid_chats()
    for index in range(len(chats) - 1):
        ratios = similar_ratio(chats[index], chats[index+1])
        print(ratios)

具体的字符串相似度计算,由SequenceMatcher实现,它忽略了字符串中存在空格的情况。

#lambda 表达式表示忽略 “  ”(空格),空格不参与相似度地计算
SequenceMatcher(lambda x:x==" ", strA, strB).ratio()

 

四,判断 "nick"字段是否包含 emoji字符

打开Anaconda,安装 emoji 处理包

pip install emoji --upgrade

代码如下:

复制代码
from pymongo import MongoClient
import emoji

client = MongoClient(host="127.0.0.2", port=10001)
db = client['db_name']
db.authenticate(name="user_name", password="xxxx")
coll = db.get_collection("coll_name")

def extract_emojis(str_chat):
    return ' '.join(c for c in str_chat if c in emoji.UNICODE_EMOJI)

def uid_chats(uid):
    list_chat = list(coll.find({"uid": uid}, {"_id": 0, "nick": 1}))
    chats = [d['nick'] for d in list_chat]
    print(chats)
    return chats

if __name__ == "__main__":
    chatList = uid_chats(123456789)
    for chat in chatList:
        result = extract_emojis(chat)
        print(result)
复制代码

 

五,完整代码

系统环境 pycharm2016.3  Anaconda3 Python3.6

复制代码
from pymongo import MongoClient
from difflib import SequenceMatcher

client = MongoClient(host="127.0.0.1", port=10001)
db = client['database_name']
db.authenticate(name="user_name", password="password")

coll = db.get_collection("collection_name")

def uid_chats():
    list_chat = list(coll.find({"uid": 123456789}, {"_id": 0, "chat": 1}))
    chats = [d['chat'] for d in list_chat]
    print(chats)
    return chats


def similar_ratio(strA, strB):
    return SequenceMatcher(lambda x:x==" ", strA, strB).ratio()

#查找list里面相邻字符串之间的相似度
def compute_similar():
    chats = uid_chats()
    for index in range(len(chats) - 1):
        ratios = similar_ratio(chats[index], chats[index+1])
        print(ratios)


if __name__ == "__main__":
    compute_similar()
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
3月前
|
数据挖掘 Python
Python示例,展示如何找到最近一次死叉之后尚未形成金叉的位置
【10月更文挑战第7天】金融分析中,“死叉”指短期移动平均线(如MA5)跌破长期移动平均线(如MA10),而“金叉”则相反。本文提供Python代码示例,用于找出最近一次死叉后未形成金叉的位置,涵盖移动平均线计算、交叉点判断及结果输出等步骤,适合金融数据分析。
55 4
|
2月前
|
Python
在 Python 中,如何将日期时间类型转换为字符串?
在 Python 中,如何将日期时间类型转换为字符串?
131 64
|
2月前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
139 68
|
1月前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
73 8
|
1月前
|
API Python
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
55 11
|
1月前
|
存储 测试技术 Python
Python 中别再用 ‘+‘ 拼接字符串了!
通过选择合适的字符串拼接方法,可以显著提升 Python 代码的效率和可读性。在实际开发中,根据具体需求和场景选择最佳的方法,避免不必要的性能损失。
52 5
|
1月前
|
Python
使用Python计算字符串的SHA-256散列值
使用Python计算字符串的SHA-256散列值
49 7
|
2月前
|
网络安全 Python
Python网络编程小示例:生成CIDR表示的IP地址范围
本文介绍了如何使用Python生成CIDR表示的IP地址范围,通过解析CIDR字符串,将其转换为二进制形式,应用子网掩码,最终生成该CIDR块内所有可用的IP地址列表。示例代码利用了Python的`ipaddress`模块,展示了从指定CIDR表达式中提取所有IP地址的过程。
62 6
|
2月前
|
Python
在 Python 中,如何将字符串中的日期格式转换为日期时间类型?
在 Python 中,如何将字符串中的日期格式转换为日期时间类型?
45 6
|
2月前
|
数据挖掘 Python
Python示例,展示如何找到最近一次死叉之后尚未形成金叉的位置
金融分析中,“死叉”指短期移动平均线(如MA5)跌破长期移动平均线(如MA10),而“金叉”则相反。本文提供Python代码示例,用于找出最近一次死叉后未形成金叉的位置,涵盖移动平均线计算、交叉点判断及结果输出等步骤,适合金融数据分析。
30 1