我有一個評論數據庫,并想在我的數據庫中創建一個新字段,指示評論是否包含與“池”相關的單詞。import reimport pandas as pdfrom pymongo import MongoClientclient = MongoClient()db = client.Hotels_Copenhagencollection = db.get_collection("hotel_review_table")data = pd.DataFrame(list(collection.find()))def common_member(a, b): a_set = set(a) b_set = set(b) if a_set & b_set: return True else: return Falsepool_set = {"pool","swim","swimming"}for single_review in data.review_text: make_it_lowercase = str(single_review).lower() tokenize_it = re.split("\s|\.|,", make_it_lowercase) pool_mentioned = common_member(tokenize_it, pool_set) db.hotel_review_table.update_one({}, {"$set":{"pool_mentioned": pool_mentioned}})在 python 中,我已經統計了包含與“pool”相關的單詞的評論數量,結果發現我的評論中有 1k/50k 談論的是 pool。我通過將 db.hotel_review_table.update_one 行移動到循環中解決了之前發布的在各處獲取相同條目的問題。這樣主要問題就解決了。然而,像這樣更新數據庫需要相當長的時間。還有其他方法可以讓它更快嗎?
1 回答

德瑪西亞99
TA貢獻1770條經驗 獲得超3個贊
您費了很大的勁才實現了 MongoDB 中開箱即用的功能。您需要使用文本索引。
創建文本索引(在 MongoDB shell 中):
db.hotel_review_table.createIndex( { "single_review": "text" } )
然后你的代碼可以簡化為:
from pymongo import MongoClient
db = MongoClient()['Hotels_Copenhagen']
for keyword in ['pool', 'swim', 'swimming']:
? ? db.hotel_review_table.update_many({'single_review': keyword}, {'$set': {'pool_mentioned': True}})
請注意,如果未提及,則不會將該值設置為 false;如果確實需要,您可以編寫另一個更新來將任何不為 true 的值設置為 false。
添加回答
舉報
0/150
提交
取消