0. 寫在前面
節后第一篇,疫情還沒結束,黎明前的黑暗,中國加油,武漢加油,看了很多報道,發現只有中國人才會幫助中國人,誰說中國人一盤散沙?也許是年齡大了,看到全國各地的醫務人員源源不斷的告別家人去支援湖北,看到醫務人員、肺炎病人的故事,總會忍不住落淚,中國加油,中國人加油!
1. 場景描述
背景不寫了,只談技術,做的是文本相似性統計,因需要從文本描述性信息中分析同類信息,以便后續重點關注,數據量比較大,大概20多萬,人工效率低,需要算法來實現。
根據需求要從不同維度進行統計:
(1)分組不分句熱度統計(根據某列首先進行分組,然后再對描述類列進行相似性統計);
(2)分組分句熱度統計(根據某列首先進行分組,然后對描述類列按照標點符號進行拆分,然后再對這些句進行熱度統計);
(3)整句及分句熱度統計;(對描述類列/按標點符號進行分句,進行熱度統計)
(4)熱詞統計(對描述類類進行熱詞統計,反饋改方式做不不大)
2. 解決方案
在網上以及和同事都驗證了很多不同實現方案,具體過程就不說了,對比下來,jieba+gensim效果最好。
算法實現介紹:
(1)輸入文件是excel,數據大概20多萬,首先通過pandas獲取excel信息,通過jieba分詞進行處理,jieba分詞要首先自定義詞典以及排除信息,這樣效果會差異很大,然后形成一個二維數組。
(2)使用gensim 中的corpora模塊,將分詞形成后的二維數組生成詞典
(3)將二維數組通過doc2bow稀疏向量,形成語料庫
(4)剛開始使用TF模型算法,后來更改為:LsiModel模型算法,將語料庫計算出Tfidf值。
(5)獲取詞典token2id的特征數
(6)計算稀疏矩陣相似度,建立一個索引
(7)讀取excel行數據,通過jieba進行分詞處理
(8)通過doc2bow計算測試數據的稀疏向量
(9)求得測試數據與樣本數據的相似度
算法說明:
(1)這里有個點,7-9步會循環執行,針對文檔描述列中的每一行,會與在第六步中創建的索引就行比對,會統計與該行相似性超過50%的行數據,同時會將統計到的數據增加個數組中,后續不再執行比對,以免重復統計。
(2)第一步jieba算法中會用到專業術語詞典及stop詞典等,7-9部會循環執行,目前相似度閾值設置的為:50%,另外excel操作就不多說了(增加了匯總起來清單的超鏈,可以導航到清單)
(3)效率上,20多萬的數據,因需要轉換向量,大概需要20來分鍾。
(4)大的算法發是這樣的,下一篇再開始上代碼,針對不同需求,進行介紹。
I’m 「軟件老王」,如果覺得還可以的話,關注下唄,后續更新秒知!歡迎討論區、同名公眾號留言交流!