注:请访问改进版,AC自动机https://github.com/liu-nlper/AhoCorasickAutomation
使用python实现了一个简单的trie树结构,可增加/查找/删除关键词,用于中文的关键词匹配、停用词删除等。
$ git clone https://github.com/liu-nlper/KeywordProcesser.git
$ cd KeywordProcesser
$ python/python3 setup.py install
- extract_keywords
- extract_keywords_yield
- extract_keywords_from_list
- extract_keywords_from_list_yield
from keyword_extract import KeywordProcesser
keyword_dict = {'苏州': 'GPE', '苏大': 'ORG', '沧浪区': 'GPE', '苏州大学': 'ORG'}
keyword_processer = KeywordProcesser(keyword_dict)
print(keyword_processer.keyword_count) # 4
text = '江苏省苏州市沧浪区干将东路333号苏州大学本部。'
# extract_keywords
keywords = keyword_processer.extract_keywords(text)
# [[3, 5, 'GPE'], [6, 9, 'GPE'], [17, 21, 'ORG']]
# extract_keywords_yield
for item in keyword_processer.extract_keywords_yield(text):
print(item)
# 匹配时忽略空格
text = '苏州 大学'
keywords = keyword_processer.extract_keywords(text)
# [[0, 2, 'GPE']] -> '苏州'
keyword_processer.set_ignore_space(True)
keywords = keyword_processer.extract_keywords(text)
# [[0, 5, 'ORG']] -> '苏州 大学'
# 从词序列中匹配关键词
keyword_dict = {'江苏省': 'GPE', '苏大': 'ORG', '北京': 'GPE', '苏州大学': 'ORG',
'苏有朋': 'PER', '苏有月': 'PER'}
keyword_processer = KeywordProcesser(keyword_dict)
words = ['江苏省', '苏州市', '沧浪区', '干将东路', '333号', '苏州大学', '本部', '。']
keywords = keyword_processer.extract_keywords_from_list(words)
print(keywords)
# [['江苏省', 0], ['苏州大学', 5]]
- remove_keywords_in_text: 从文本中删除关键词
- remove_keywords_in_words: 从词序列中删除关键词
stopwords = ['、', ',', '。', '的', '对', '和', '这个', '一切']
sentence = '这个时间落伍的计时机无意中对人生包涵的讽刺和感伤,深于一切语言、一切啼笑。'
keyword_processer = KeywordProcesser(stopwords)
sentence = keyword_processer.remove_keywords_in_text(sentence)
# 时间落伍计时机无意中人生包涵讽刺感伤深于语言啼笑
keyword_processer = KeywordProcesser(stopwords)
words = ['这个', '时间', '落伍', '的', '计时机', '无意', '中', '对', '人生', '包涵',
'的', '讽刺', '和', '感伤', ',', '深于', '一切', '语言', '、', '一切', '啼笑', '。']
print(words)
words = keyword_processer.remove_keywords_in_words(words)
print(''.join(words))
# 时间落伍计时机无意中人生包涵讽刺感伤深于语言啼笑
- add_keyword: 添加单个关键词;
- add_keyword_from_list: 从列表中添加关键词;
- add_keyword_from_dict: 从字典中添加关键词,{关键词: 关键词类型};
- add_keyword_from_file: 每个关键词占一行,若一行有多列,则第一列为关键词,第二列为关键词类型。
keyword_processer = KeywordProcesser()
# add_keyword
keyword_processer.add_keyword('苏州') # keyword_count is 1
# add_keyword_from_list
keyword_processer.add_keyword_from_list(['江苏', '苏州']) # keyword_count is 2
# add_keyword_from_dict
keyword_dict = {'苏州': 'GPE', '苏州大学': 'ORG'}
keyword_processer.add_keyword_from_dict(keyword_dict) # now, keyword_count is 3
# add_keyword_from_file
path = 'path_to_your_keywords'
keyword_processer.add_keyword_from_file(path, split='\t')
- delete_keyword
- delete_keyword_from_list
keyword_processer = KeywordProcesser()
# add_keyword
keyword_processer.add_keyword('苏州', 'GPE')
keyword_processer.add_keyword('北京', 'GPE')
# delete_keyword
keyword_processer.delete_keyword('苏州') # return True, keyword_count is 1
keyword_processer.delete_keyword('苏州') # return False
# delete_keyword_from_list
keyword_processer.delete_keyword_from_list(['苏州', '江苏'])
- get_keyword_type
keyword_processer = KeywordProcesser()
# add_keyword
keyword_processer.add_keyword('苏州', 'GPE')
keyword_processer.add_keyword('小明', 'PER')
# get_keyword_type
keyword_processer.get_keyword_type('苏州') # GPE
keyword_processer.get_keyword_type('苏州大学') # None
- contain_keyword
keyword_processer = KeywordProcesser()
# add_keyword
keyword_processer.add_keyword('苏州', 'GPE')
# contain_keyword
keyword_processer.contain_keyword('苏州') # return True
keyword_processer.delete_keyword('苏州')
keyword_processer.contain_keyword('苏州') # return False
- get_keywords
keyword_processer = KeywordProcesser()
# add_keyword
keyword_processer.add_keyword('苏州', 'GPE')
keyword_processer.add_keyword('苏州大学', 'ORG')
# get_keywords
keywords = keyword_processer.get_keywords()
# {'苏州': 'GPE', '苏州大学': 'ORG'}
- 2018-06-21:
- 添加删除关键词功能,可用于停用词的删除;
- 输入可以是词序列(list)或者纯文本(str)。
- 关键词替换
- other...