文件A有2500万个正常关键词,一行一个(正常关键词,每个关键词字符较长)
文件B有5万个关键词,一行一个(黑名单词根,每个关键词字符较短),都是utf8编码
用Python来实现匹配的话,匹配规则:
条件1:不含B中的任何一个词根:
条件2:不含0-9数字
条件3:不含a-zA-Z字母
条件4:不含r'>|<|+|=|-|)|(|)|(|&|%|……|^|¥|$|#|@|】|【| |-|.|*|amp|nbsp|;|/|]|[|{|}|:|;|》|《|、|:|。' 这些特殊字符
文件A中符合以上四个条件的将该关键词保存在文件D。
已经解决:如果A中的某个关键词含有B中的任何一个词根,则将该关键词保存在文件C
用ac自动机
import ahocorasick
import time
def main():
t1 = time.time()
A = ahocorasick.Automaton()
#向trie树中添加单词
with open("blackword.txt",'r') as fp:
for line in fp:
bkw = line.strip()
A.add_word(bkw,(1,bkw))
#将trie树转化为Aho-Corasick自动机
A.make_automaton()
g1 = open("result_dangdang.txt", 'a+')
for line in open("dangdang.txt"):
for k,(i,t) in A.iter(line.strip()):
print line.strip()+t
g1.write(line.strip()+":"+t+"\n")
g1.close()
t2 = time.time()
print "cost time is ", t2 - t1
main()