Python 连接MongoDB并比较两个字符串相似度的简单示例
本文介绍一个示例:使用 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并比较两个字符串相似度的简单示例的更多相关文章
- 爬虫入门【8】Python连接MongoDB的用法简介
MongoDB的连接和数据存取 MongoDB是一种跨平台,面向文档的NoSQL数据库,提供高性能,高可用性并且易于扩展. 包含数据库,集合,文档等几个重要概念. 我们在这里不介绍MongoDB的特点 ...
- python学习--python 连接SQLServer数据库(两种方法)
1. python 学习.安装教程参照: http://www.runoob.com/python/python-tutorial.html 2. 集成开发环境 JetBrains PyCharm C ...
- Python连接MongoDB数据库并执行操作
原文:https://blog.51cto.com/1767340368/2092813 环境设置: [root@mongodb ~]# cat /etc/redhat-release CentOS ...
- 左手Mongodb右手Redis 通过python连接mongodb
首先需要安装第三方包pymongo pip install pymongodb """ 通过python连接mongodb数据库 首先需要初始化数据库连接 "& ...
- python连接mongodb数据库
之前使用过python连接mysql数据库(用到pymysql库),公司也有使用mongodb数据库,所以就整理了一份python连接mongodb数据库的代码出来,以供记录和分享. 首先我们要用到 ...
- MongoDB聚合查询及Python连接MongoDB操作
今日内容概要 聚合查询 Python操作MongoDB 第三方可视化视图工具 今日内容详细 聚合查询 Python操作MongoDB 数据准备 from pymongo import MongoCli ...
- python连接MongoDB
1.安装pymongo库 windows下: pip install pymongo 或者 easy_install install pymongo 2.使用pymongo模块连接mongoDB数据库 ...
- Python连接MongoDB操作
1.安装PyMongo 注意:请勿安装“bson”软件包. PyMongo配有自己的bson包; 执行“pip install bson”或“easy_install bson”则会安装与PyMong ...
- Python连接mongodb提取部分字段内数据并写入txt文件
#coding=utf-8 import sys reload(sys) sys.setdefaultencoding('utf-8') from pymongo import MongoClient ...
随机推荐
- Codeforces | CF1029D 【Concatenated Multiples】
\(qwq\)昨天晚上\(Div.3\)过了这道题...早上交了\(1A\)...看在\(CF\)上\(hack\)的情况并不乐观而且也没人来交这题的份上...我决定发一篇题解帮\((zhuang)\ ...
- mysql安转过程中出现的问题! Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exis
net start mysql启动失败,报错信息如上,因缺少mysql这个库 所以跳过 在my.ini中添加 --skip-grant-tables 再启动mysql 然后进入mysql 倒入一个从其 ...
- HDU-6370 Werewolf(杭电多校6I)
一群人在玩狼人杀,村民只会说真话,狼人会说真话和假话,要你求出那些人一定是村民或者那些人一定是狼人.想到了并查集不会用... 1,如果全部人都是狼人,一定可以所以一定是村民的人一定是0. 2, 加入是 ...
- [CERC2017]Intrinsic Interval(神仙+线段树)
题目大意:给一个1-n的排列,有一堆询问区间,定义一个好的区间为它的值域区间长度等于它的区间长度,求包这个询问区间的最小好的区间. 题解 做法太神了,根本想不到. %%%i207m. 结论:当一个区间 ...
- centos7系统排错
系统排错 troubleshooting winPE --光盘或u盘启动盘 产生一个PE系统(类似内存上跑的临时系统) 系统排错 rescue 模式 (挽救模式) 类似windows winPE模式 ...
- OO第一阶段纪实
$ 0 写在前面 在DDL一次次的推动下,历经三个周期的更迭,一个月的时光匆匆而过.谨撰此博文,以记录这一段见证成长的心路历程. $ 0-0 JAVA“一天速成”没有修习过传说中的“OO先导课”,在学 ...
- 你应该要知道的vue.js
前言 小组同事最近都在学习前端,目前我们小组前端技术栈主要是vue.在和同事交流过程成,发现他们对vue都不了解,所以整理了问的比较多的问题. 组件data为什么必须是函数? 因为组件可能被多处使用, ...
- Error:Failed to resolve: :Base:
这个问题是变通了一下,原来是: //implementation(name: "Base", ext: "aar") 修改成: implementation f ...
- mac host文件配置
Shift+Command+G 三个组合按键,并输入 Hosts 文件的所在路径:/etc/hosts /private/etc/hosts
- xrange与range的区别
xrange属于类,继承自object. 用法: xrange(stop) -> xrange object xrange(start, stop[, step]) -> xrange o ...