mirror of
https://github.com/nonebot/nonebot2.git
synced 2024-11-24 09:05:04 +08:00
45 lines
1.4 KiB
Python
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
|