nonebot2/nl_processor.py
2017-02-15 18:07:36 +08:00

45 lines
1.4 KiB
Python

import re
import jieba.posseg
_processors = []
_processors_without_keyword = []
def as_processor(keywords=None):
def decorator(func):
if keywords:
_processors.append((keywords, func))
else:
_processors_without_keyword.append(func)
return func
return decorator
def parse_potential_commands(sentence):
segmentation = list(jieba.posseg.cut(sentence=sentence))
print('分词结果:', ' '.join(['[' + s.flag + ']' + s.word for s in segmentation]))
potential_commands = []
for processor in _processors:
processed = False
for regex in processor[0]:
for s in segmentation:
word, flag = s.word, s.flag
if re.search(regex, word):
result = processor[1](sentence, segmentation)
if result:
potential_commands.append(result)
processed = True
# A word matched, skip the rest of words
break
if processed:
# Current processor has processed, skip the rest of keywords
break
for func in _processors_without_keyword:
result = func(sentence, segmentation)
if result:
potential_commands.append(result)
print('可能的命令:', potential_commands)
return potential_commands