算法 - python ahocorasick 從本地文件讀取文本,進(jìn)行關(guān)鍵字匹配,匹配失敗
問(wèn)題描述
使用Python+pyahocorasick,匹配關(guān)鍵字,關(guān)鍵字大概在10-20個(gè)漢字之間。
構(gòu)建ahocorasick的文本,是從本地文件key_word的讀入。格式如下:
母嬰專(zhuān)區(qū)<輔食<面仔/面條:嬰幼兒,幼兒,嬰兒,兒童,寶寶面條,細(xì)面,粗面,手工面,蔬菜面,營(yíng)養(yǎng)面,碎面,掛面,面仔匹配結(jié)果為空。
代碼如下:
import ahocorasickA = ahocorasick.Automaton()title = ’Hello Kitty3色蔬菜細(xì)面300克 嬰兒幼兒營(yíng)養(yǎng)面條寶寶輔食面條’with open(’key_word’, ’r’) as f: for line in f.readlines():line = line.strip()line = str(line.split(’<’)) A.add_word(line, line)A.make_automaton()aa = A.iter(title)for item in aa: print(item) # 打印為空值
請(qǐng)有操作過(guò)這種問(wèn)題的大大,幫忙看看,能提供示例代碼,或者提供處理思路,謝謝!
問(wèn)題解答
回答1:研究了兩天,自己實(shí)現(xiàn)了這個(gè)功能
本地文件有太多重復(fù)關(guān)鍵字,匹配并不是100%,供參考
參考代碼如下:
import ahocorasickA = ahocorasick.Automaton()titles = [’Hello Kitty3色蔬菜細(xì)面300克 嬰兒幼兒營(yíng)養(yǎng)面條寶寶輔食面條’]word_dict = {}with open(’categories.csv’, ’r’) as f: for line in f.readlines():line = line.strip()word_key = line.split(’:’)[0]word_value = list(line.split(’:’)[1].split(’|’))word_dict[word_key] = word_valueline = (line.split(’:’)[1].split(’|’))for word in line: if word == '':continue A.add_word(word, word)A.make_automaton()for title in titles: category = [] aa = A.iter(title) ret = [] matches = {} for (k,v) in aa:matches[v] = 1 for (k,v) in matches.items():ret.append(k) for value in word_dict.items():if ret[0] in value[1]: category.append(value[0]) #關(guān)鍵字太多,所以寫(xiě)死了一個(gè)keyword匹配的結(jié)果 #print(ret[0], value[0], value[1]) print(category[0])
打印結(jié)果:母嬰專(zhuān)區(qū)<輔食<面仔/面條
