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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM