• 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

  • 相关阅读:
    [常用的Cmd运行命令]
    [Ajax三级联动 无刷新]
    [占位符   ]
    [String.Format(转换时间格式)]
    [ASP.NET应用到的时间处理函数]
    [SQL Server常用系统存储过程大全]
    [SQL Server创建视图时的注意点]
    [SQL Server 视图的创建- (create view必须是批处理中仅有的语句问题)]
    [SQL 高级查询运算符的用法 UNION (ALL),EXCEPT(ALL),INTERSECT(ALL) ]
    layui 表单遇到的小问题
  • 原文地址:https://www.cnblogs.com/hapjin/p/7895027.html
Copyright © 2020-2023  润新知