1、安装
pip install flashtext
2、使用示例
提取文本中字典涉及的关键词并将多个词归一化为某个关键词
from flashtext import KeywordProcessor
keyword_processor = KeywordProcessor()
# keyword_processor.add_keyword(<unclean name>, <standardised name>)
keyword_processor.add_keyword('Big Apple', 'New York')
keyword_processor.add_keyword('Bay Area')
keywords_found = keyword_processor.extract_keywords('I love Big Apple and Bay Area.')
keywords_found
具体用法可参考:
https://github.com/vi3k6i5/flashtext
3、中文匹配问题
3.1 中文匹配关键词遗漏的问题
3.2 中文、数字混合字符遗漏匹配
4、解决方法
4.1 中文匹配关键词遗漏的问题问题解决方法
修改pyenv/lib/python3.6/site-packages/flashtext/keyword.py 523行的代码idx = sequence_end_pos 为idx = sequence_end_pos - 1
4.2 中文、数字混合字符遗漏匹配问题解决方法
from flashtext import KeywordProcessor
keyword_processor = KeywordProcessor()
keyword_processor.set_non_word_boundaries(set('-'))
keyword_processor.add_keyword('测试')
keyword_processor.extract_keywords('3测试')
5、中文多词匹配
思路:
1)为多词匹配设置别名,原始词为多词中的单词,附加信息为多词串,例如【中学】为原始词,【中学&教材】为中学的附加信息
keyword_processor.add_keyword('中学', '中学&教材')
2)匹配信息返回多词串,再判断多词串是否都在目标字符串中
from flashtext import KeywordProcessor
keyword_processor = KeywordProcessor()
keyword_processor.set_non_word_boundaries(set('-'))
keyword_processor.add_keyword('中学', '中学&教材')
keyword_processor.add_keyword('教材', '中学&教材')
string = '中学教材很好'
keywords_found = set(keyword_processor.extract_keywords(string))
for keyword in keywords_found:
if '&' in keyword:
keyword_seg = keyword.split('&')
flag = True
for seg in keyword_seg:
if seg not in string:
flag = False
if flag:
print(keyword + 'is matched')
参考: