本文介绍一个示例:使用 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()

原文:http://www.cnblogs.com/hapjin/p/7895027.html

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

  1. 爬虫入门【8】Python连接MongoDB的用法简介

    MongoDB的连接和数据存取 MongoDB是一种跨平台,面向文档的NoSQL数据库,提供高性能,高可用性并且易于扩展. 包含数据库,集合,文档等几个重要概念. 我们在这里不介绍MongoDB的特点 ...

  2. python学习--python 连接SQLServer数据库(两种方法)

    1. python 学习.安装教程参照: http://www.runoob.com/python/python-tutorial.html 2. 集成开发环境 JetBrains PyCharm C ...

  3. Python连接MongoDB数据库并执行操作

    原文:https://blog.51cto.com/1767340368/2092813 环境设置: [root@mongodb ~]# cat /etc/redhat-release CentOS ...

  4. 左手Mongodb右手Redis 通过python连接mongodb

    首先需要安装第三方包pymongo pip install pymongodb """ 通过python连接mongodb数据库 首先需要初始化数据库连接 "& ...

  5. python连接mongodb数据库

    之前使用过python连接mysql数据库(用到pymysql库),公司也有使用mongodb数据库,所以就整理了一份python连接mongodb数据库的代码出来,以供记录和分享. 首先我们要用到 ...

  6. MongoDB聚合查询及Python连接MongoDB操作

    今日内容概要 聚合查询 Python操作MongoDB 第三方可视化视图工具 今日内容详细 聚合查询 Python操作MongoDB 数据准备 from pymongo import MongoCli ...

  7. python连接MongoDB

    1.安装pymongo库 windows下: pip install pymongo 或者 easy_install install pymongo 2.使用pymongo模块连接mongoDB数据库 ...

  8. Python连接MongoDB操作

    1.安装PyMongo 注意:请勿安装“bson”软件包. PyMongo配有自己的bson包; 执行“pip install bson”或“easy_install bson”则会安装与PyMong ...

  9. Python连接mongodb提取部分字段内数据并写入txt文件

    #coding=utf-8 import sys reload(sys) sys.setdefaultencoding('utf-8') from pymongo import MongoClient ...

随机推荐

  1. IDEA+Springboot+JRebel热部署实现

    步骤一:在IDEA中安装JRebel插件(File->settings->plugins->search in repositories),如下图 步骤二:安装完成之后,重启idea ...

  2. python3 元组tuple

    元组应小括号()表示: tuple(seq)将列表转换为一个元组: 不可变的,元组是不可变,但元素可以是可变数据类型: 可以迭代,可以切片: +连接元组,*复制元组: del不可以删除元素,但可以删除 ...

  3. 【Luogu2664】树上游戏(点分治)

    [Luogu2664]树上游戏(点分治) 题面 洛谷 题解 很好的一道点分治题. 首先直接点分治,考虑过每个分治重心的链的贡献. 我们从分治重心开始找每种颜色,强制令一种颜色只在其到分治重心的链上第一 ...

  4. 【BZOJ5323】[JXOI2018]游戏(组合计数,线性筛)

    [BZOJ5323][JXOI2018]游戏(组合计数,线性筛) 题面 BZOJ 洛谷 题解 显然要考虑的位置只有那些在\([l,r]\)中不存在任意一个约数的数. 假设这样的数有\(x\)个,那么剩 ...

  5. 【dfs】p1451 求细胞数量

    题目描述 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.(1<=m,n<=100)? 输入输出格式## ...

  6. [HAOI2012]道路(最短路DAG上计数)

    C国有n座城市,城市之间通过m条[b]单向[/b]道路连接.一条路径被称为最短路,当且仅当不存在从它的起点到终点的另外一条路径总长度比它小.两条最短路不同,当且仅当它们包含的道路序列不同.我们需要对每 ...

  7. Up-to-date cache with EclipseLink and Oracle

    Up-to-date cache with EclipseLink and Oracle One of the most useful feature provided by ORM librarie ...

  8. Manjaro更新出现冲突

    ➜ ~ sudo pacman -Syyu :: Synchronizing package databases... core 147.5 KiB 1378K/s 00:00 [########## ...

  9. Oracle的DQL

    基本查询: 链接语句: sqlplus scott/tiger@192.168.56.101:1521/orcl SQL> --清屏 SQL> host cls (host clear) ...

  10. python学习笔记-Day2 Numpy数组

    1. 实现两个数组相加,在数据量特别大的时候 产生数组: (1)  从列表产生数组:a=[0,1,2,3] a=np.array(1) a (2)  从列表传入 a=np.array([1,2,3,4 ...