关于Excel表操作-通过gensim实现模糊匹配
gensim是一個Python的自然語言處理庫,能夠?qū)⑽臋n根據(jù)TF-IDF,LDA,LSI等模型轉(zhuǎn)換成向量模式,此外,gensim還實現(xiàn)了word2vec,能夠?qū)卧~轉(zhuǎn)換為詞向量。
gensim的一些常見概念:
語料Corpus: 一組原始文本的集合,用于無監(jiān)督地訓(xùn)練文本主題的隱層結(jié)構(gòu),語料中不需要人工標(biāo)注的附加信息。在Gensim中,Corpus通常是一個可迭代的對象(比如列表)。每次迭代返回一個可用于表達(dá)文本對象的稀疏向量。
向量Vector: 由一組文本特征構(gòu)成的列表,是一段文本在Gensim中的內(nèi)容部表達(dá)。
稀疏向量SparseVector: 通常 我們可以略去向量中多余的0元素,此時向量中的每一個元素是一個(key,value)的tuple.
模型Model: 是一個抽象的術(shù)語,定義了兩個向量空間的變換(即從文本的一種向量表達(dá)變換為另一種向量表達(dá))
下面為相關(guān)代碼,代碼結(jié)構(gòu)和前面的Fuzzywuzzy是類似的,不過執(zhí)行起來,效率是前者的幾十倍上百倍。
關(guān)于本文的步驟:
1、讀取Excel表格
2、進(jìn)行jieba分詞
3、構(gòu)建語料字典
4、通過doc2bow轉(zhuǎn)換為稀疏向量
5、構(gòu)建TfidfModel模型,進(jìn)行訓(xùn)練
6、實現(xiàn)相似度查找
from gensim import corpora, similarities, models import jieba import pandas as pd import datetime filename=r'C:\Users\baoqi\Documents\比較清單.xlsx' targetfilename=r'C:\Users\baoqi\Documents\目標(biāo)文件.xlsx' # A比B多 21409 CONT_NAME # B比A多 3236 HTMC # ---------------------------寫入財務(wù)域比資產(chǎn)域多的非物資合同補(bǔ)充列------------------- data = pd.read_excel(filename,sheet_name='B比A多',engine='openpyxl')find= pd.read_excel(filename,sheet_name='B比A多',engine='openpyxl')data_split_word = data.CONT_NAME.apply(jieba.lcut) dictionary = corpora.Dictionary(data_split_word.values) data_corpus = data_split_word.apply(dictionary.doc2bow) find_corpus=find.HTMC.apply(lambda x:dictionary.doc2bow(jieba.lcut(x))) tfidf = models.TfidfModel(data_corpus.to_list()) index = similarities.SparseMatrixSimilarity(tfidf[data_corpus], num_features=len(dictionary)) result = [] for corpus in find_corpus.values:sim = pd.Series(index[corpus])result.append(['\t'.join([str(s) for s in data.CONT_NAME[sim.nlargest(2).index].values]), '','\t'.join([str(s) for s in sim.nlargest(2).values]), '']) result = pd.DataFrame(result) result.rename(columns={0:'匹配值1',1:'匹配值2',2:'閾值1',3:'閾值2'}, inplace=True) result = pd.concat([find, result], axis=1)writer = pd.ExcelWriter(targetfilename, mode="w", engine="openpyxl") result.to_excel(writer,index=False,sheet_name='匹配值') writer.save() writer.close()通過實際測試,閾值70%的結(jié)果可信度還是比較高的
最后,謝謝關(guān)注,謝謝支持!
總結(jié)
以上是生活随笔為你收集整理的关于Excel表操作-通过gensim实现模糊匹配的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python+Selenium:初步使用
- 下一篇: 「硬见小百科」很全的CPU处理器技术架构