使用rabbitmq對文字使用tf_idf演算法進行分析的專案記錄
之前用爬蟲爬了三個源,共爬取了30w左右的部落格,爬蟲專案:itmap_spiders。
接著對這些文字進行分析,要求是找出每篇文章的關鍵詞。我對TF*IDF演算法有一些瞭解,就選擇了它。專案:itmap_data_analysis。
業務架構
由於資料量有點大,所以使用訊息佇列進行拆分,拆分標準是按照步驟來。具體的步驟如下圖所示。
技術棧:
使用pika
來與RabbitMQ
連線。
使用click
來編寫命令列命令。
使用mongodb
來儲存結果。
遇到的問題
logging
使用click
時發現一直沒有列印日誌,解決方法是設定日誌級別:
logging.basicConfig(level=logging.INFO)
click
跟隨另一位同夥的程式碼,第一次使用click,真是好用啊!
需要能夠多次輸入collection時,需要增加引數multiple
,這樣在命令列使用時,可以多次新增--collection collection_name
或-c collection_name
。
@click.command()
@click.option('--collection', '-c', type=click.Choice(collections), multiple=True, help='mongo中的collection名')
def func(collection):
for c in collection:
pass
pymongo
速度
計算TF的步驟,由於消費者執行速度實在太慢(rabbit的admin介面對應的queue的state大部分情況下是idle
狀態),所以稍微優化了下。
目前主要是通過使用bulk-write來提速。另外,對於計算TF步驟而言,設計的時候是一次只對一篇文章進行計算,但是發現這樣做太耗費與mongodb
的連線了,所以改成了一次對100篇文章進行計算。
與消費者的龜速成鮮明對比的是,生產者往佇列裡塞得極快!至於計算TF後面倆步驟是什麼情況,還得等我先跑完TF再看。。。
auth
terminal中輸入mongo
use admin
db.auth(‘username’,’password’)
備份
terminal中輸入
mongodump -u username -p password --authenticationDatabase=admin -d data -o /data/db
-u 是username -p是password,不填會報authentication的錯, --authenticationDatabase需要指明auth在哪個db中
-d 是要備份的db,不指明就是所有
-o 是dump檔案儲存的地方,不指明就是當前目錄
還可以使用-h 來指明是哪個mongod,比如127.0.0.1:27017,埠可不填
恢復
terminal中輸入
mongorestore -h localhost:27017 -d data . -u root -p Song123654 --authenticationDatabase=admin
各個引數同上,那個點表示是當前目錄
*nix命令
*nix 使用scp傳輸檔案
scp ubuntu@111.112.113.114:~/datadir/data/article-juejin.bson article-juejin.bson
前面和ssh登入一樣,因為scp也是使用ssh,後面同cp命令
修改檔案的使用者組
chgrp [-R] group_name file_name
修改檔案所有者
chown [-R] owner_name file_name
-R表示遞迴,會將目錄下的所有檔案同時做修改
也可以這麼用:
chown group_name:owner_name file_name
docker-compose命令
docker-compose up -d service_name
docker-compose build/start/stop/restart service_name
docker-compose scale service_name=2
docker-compose logs -f service_name
defaultdict
想要將defaultdict的預設值也設定為defaultdict:
defaultdict(lambda: defaultdict(int))
若直接寫,會報錯,是因為defaultdict(int)
並不是可呼叫物件:
In [2]: defaultdict(defaultdict(int))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-535a33200cb5> in <module>()
----> 1 defaultdict(defaultdict(int))
TypeError: first argument must be callable or None
相關文章
- [BI專案記]-對專案檔案進行規劃
- 使用Jest對原生TypeScript專案進行UI測試TypeScriptUI
- 使用 functrace 輔助進行 Go 專案原始碼分析Go原始碼
- 使用Project進行專案管理Project專案管理
- 使用科大訊飛語音轉文字的服務進行電話錄音分析
- 使用 Intervention/image 對 Laravel 專案中的圖片進行處理Laravel
- 使用apriori演算法進行關聯分析演算法
- 藉助 webpack 對專案進行分析優化Web優化
- 使用GnuPG對檔案進行加密(轉)加密
- asp.net Web專案中使用Log4Net進行錯誤日誌記錄ASP.NETWeb
- Gin 框架 - 使用 logrus 進行日誌記錄框架
- 使用Log4j進行日誌記錄
- .Net Core中使用DiagnosticSource進行日誌記錄
- 資訊保安:資料加密實戰!對專案中資料使用MD5演算法進行加密加密演算法
- Linux下對檔案進行加密備份的操作記錄Linux加密
- Docker中使用Xhprof 對程式碼進行效能分析Docker
- 使用node爬蟲做了一個vue小專案記錄使用筆記爬蟲Vue筆記
- 使用Git進行小專案程式碼管理Git
- 使用awk+sort+uniq進行文字分析
- Java使用Collections對中文字元進行首字母排序Java字元排序
- rabbitmq 記錄MQ
- 使用pprof進行效能分析
- 對比Elasticsearch,使用Doris進行高效日誌分析(下)Elasticsearch
- 對比Elasticsearch,使用Doris進行高效日誌分析(上)Elasticsearch
- RabbitMQ和Elasticsearch的使用筆記MQElasticsearch筆記
- 使用RSEM進行轉錄組測序的差異表達分析
- 離職後,對專案的記錄、總結
- 黑猴子的家:IDEA 使用 Git 進行專案管理IdeaGit專案管理
- 【進階篇】Java 專案中對使用遞迴的理解分享Java遞迴
- 業務需求:使用遊標對查詢出來的記錄進行更新過程中,不允許其它人進行更改
- 使用機器學習對數十億影像中的文字進行索引,會發生什麼?機器學習索引
- 怎樣使用NLPIR平臺進行文字分析
- 使用vue-cli3建立專案,踩坑記錄Vue
- 在雲環境上使用SLF4J對Java程式進行日誌記錄Java
- 2.RabbitMQ的5種模式,並使用java進行模擬操作-學習筆記MQ模式Java筆記
- 使用 Dynatrace 對 Node.js 應用的效能資料進行分析Node.js
- 使用shell進行日誌分析
- 使用HangFG進行Oracle Hang分析Oracle