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

查看:352
本文介绍了算法 - python ahocorasick 从本地文件读取文本,进行关键字匹配,匹配失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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

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

母婴专区<辅食<面仔/面条:婴幼儿,幼儿,婴儿,儿童,宝宝 面条,细面,粗面,手工面,蔬菜面,营养面,碎面,挂面,面仔
  • 匹配结果为空。

  • 代码如下:

import ahocorasick

A = 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) # 打印为空值

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

解决方案

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

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

  • 参考代码如下:

import ahocorasick

A = 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_value
        line = (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 ahocorasick 从本地文件读取文本,进行关键字匹配,匹配失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆