您的位置:首页技术文章
文章详情页

算法 - python ahocorasick 从本地文件读取文本,进行关键字匹配,匹配失败

【字号: 日期:2022-07-23 09:06:00浏览:45作者:猪猪

问题描述

使用Python+pyahocorasick,匹配关键字,关键字大概在10-20个汉字之间。

构建ahocorasick的文本,是从本地文件key_word的读入。格式如下:

母婴专区<辅食<面仔/面条:婴幼儿,幼儿,婴儿,儿童,宝宝面条,细面,粗面,手工面,蔬菜面,营养面,碎面,挂面,面仔

匹配结果为空。

代码如下:

import ahocorasickA = ahocorasick.Automaton()title = ’Hello Kitty3色蔬菜细面300克 婴儿幼儿营养面条宝宝辅食面条’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) # 打印为空值

请有操作过这种问题的大大,帮忙看看,能提供示例代码,或者提供处理思路,谢谢!

问题解答

回答1:

研究了两天,自己实现了这个功能

本地文件有太多重复关键字,匹配并不是100%,供参考

参考代码如下:

import ahocorasickA = ahocorasick.Automaton()titles = [’Hello Kitty3色蔬菜细面300克 婴儿幼儿营养面条宝宝辅食面条’]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]) #关键字太多,所以写死了一个keyword匹配的结果 #print(ret[0], value[0], value[1]) print(category[0])

打印结果:母婴专区<辅食<面仔/面条

标签: Python 编程