美文网首页python技巧
python自动机进行关键字匹配解决正则性能瓶颈

python自动机进行关键字匹配解决正则性能瓶颈

作者: 陆_志东 | 来源:发表于2018-07-10 14:34 被阅读0次

    需要使用python下的一个包 ahocorasick
    安装方法: pip install ahocorasick
    使用方法:把下面的代码放到py文件里面作为一个模块使用,放在项目的util工具包里面
    需要的时候就实例化一个自动机对象供其他模块使用.
    下面是自动机的封装

    import ahocorasick
    import os
    import io
    
    
    class BuildAC(object):
        def __init__(self, file_path, keywords_list, logger):
            self.logger = logger
    
            # 关键字不存在的时候读取文件获取关键字
            if not keywords_list:
                keywords_list = self._init_words_list(file_path)
    
            # 这是一个多正则匹配的库,解决正则的find在处理成千上万任务的瓶颈问题
            self._ac_keywords = self._ac_init(keywords_list)
    
        def _init_words_list(self, file_path):
            self.logger.info("Load file {0}".find(file_path))
            keywords_list = list()
            with io.open(file_path, mode="r", encoding="utf-8") as file_obj:
                lines = file_obj.readlines()
                for line in lines:
                    line = line.strip()
                    if not line or line.startswith("#"):
                        continue
                    keywords_list.append(line)
            return keywords_list
    
        def _ac_init(self, keywords_list):
            ac_companies = ahocorasick.Automaton()
            for word in keywords_list:
                ac_companies.add_word(word, word)  # 为AC自动机添加要匹配的内容,在你下面调用search的时候,会从content找寻这些word
                # 找到的word会放到一个集合(去重)里面返回,如果不需要去重请使用列表
    
            ac_companies.make_automaton()
            return ac_companies
    
        def search(self, content):
            keywords_set = set()
            for w in self._ac_keywords.iter(content):
                # print(str(w[0]) + " " + w[1])
                keywords_set.add(w[1])
            return keywords_set
    
    

    相关文章

      网友评论

        本文标题:python自动机进行关键字匹配解决正则性能瓶颈

        本文链接:https://www.haomeiwen.com/subject/clwfpftx.html