Python——利用AC自动机进行关键词提取

Python——利用AC自动机进行关键词提取

目标:在之前写的文章【Python实现多模匹配——AC自动机】基础上,安装gcc(C编译器),再装ahocorasick ,并完成从文本中提取关键词的任务。

PS:由于原理之前已经介绍,本文只介绍安装过程,以及如何应用。还想看原理的朋友,请戳【模式匹配】Aho-Corasick自动机与Aho-Corasick自动机浅析。

1、安装ahocorasick(python3)

终端输入:

conda install pyahocorasick
anaconda search -t conda pyahocorasick
conda install -c https://conda.anaconda.org/conda-forge pyahocorasick
最后输入y,就安装完成了。参考博客:python中安装ahocorasick库(原博客已打不开)。

2、Python例子(参考,并优化ahocorasick 的使用中出现的问题和简单使用)

import ahocorasick
import time

class AhocorasickNer:
def __init__(self, user_dict_path):
self.user_dict_path = user_dict_path
self.actree = ahocorasick.Automaton()

def add_keywords(self):
flag = 0
with open(self.user_dict_path, “r”, encoding=”utf-8″) as file:
for line in file:
word, flag = line.strip(), flag + 1
self.actree.add_word(word, (flag, word))
self.actree.make_automaton()

def get_ner_results(self, sentence):
ner_results = []
# i的形式为(index1,(index2,word))
# index1: 提取后的结果在sentence中的末尾索引
# index2: 提取后的结果在self.actree中的索引
for i in self.actree.iter(sentence):
ner_results.append((i[1], i[0] + 1 – len(i[1][1]), i[0] + 1))
return ner_results

if name == “__main__”:
ahocorasick_ner = AhocorasickNer(user_dict_path=”../../funNLP/organization_dict.txt”)
ahocorasick_ner.add_keywords()

while True:
sentence = input(“\nINPUT : “)
ss = time.time()
res = ahocorasick_ner.get_ner_results(sentence)
print(“TIME : {0}ms!”. format(round(1000*(time.time() – ss), 3)))
print(“OUTPUT:{0}”.format(res))
输出:

说明:

1、代码中的文件【funNLP/organization_dict.txt】来自于:funNLP-公司名字词库,注册就能快速下载(比github快N倍);

2、文件中的词典属于百万级别,从文本中提取关键词的耗时在0.05ms左右(个人笔记本)。

补充:纯Python版本的AC自动机,代码如下(待更新):