Rasa识别日期问题解决路径与方案

编程入门 行业动态 更新时间:2024-10-27 00:29:14

Rasa识别日期问题解决<a href=https://www.elefans.com/category/jswz/34/1771438.html style=路径与方案"/>

Rasa识别日期问题解决路径与方案

问题描述


在完成星座运势function的编写中,面临着用户不知道其星座的场景。此时用户将回答出生月日。bot需要把月和日的数字提取出来,换算到对应星座。
出现的问题:
1.无法将同为entities的两个数字提取出来 [7,15] -> [7]
2.无法将中文识别出来


初始代码

nlu中:
这里把month和day分开写的

- [1](month)月[2](day)日- [3](month)月[9](day)日- [4](month)月[12](day)日- [5](month)月[27](day)号- [7](month)月[2](day)日- [11](month)月[12](day)号- [八](month)月[十二](day)日- [九](month)月[二十一](day)日- [三](month)月[五](day)日- [十一](month)月[七](day)日- [七](month)月[六](day)号- [八](month)月[十五](day)日- [1](month)- [2](month)- [3](month)- [4](month)- [5](month)- [6](month)- [7](month)

story中:

- story: 用户询问星座+用户不知道自己星座+月份星座匹配steps:- intent: ask_horoscope_vague- action: utter_for_starsign- intent: user_not_know_starsign- action: utter_for_month_and_day- intent: informentities:- month: "五"- day: "十二"- action: action_return_star- action: action_report_horoscope

action中:
引入pycnnum对中文数字和阿拉伯数字进行转换
注意isnumeric()是对字符串中是否含有数字(中文阿拉伯均可)进行判断,isdigit()是判断是字符串还是数字

class ReturnStarAction(Action):def name(self) -> Text:return "action_return_star"def checkdate(self, tracker):month = tracker.get_slot("month")day = tracker.get_slot("day")date_accurate = Falseif month.isdigit() == False:month = pycnnum2num(month)if int(month) > 0 and int(month) < 13:date_accurate = Trueif day.isdigit() == False:day = pycnnum2num(day)if int(day) > 0 and int(day) < 32:date_accurate = Truereturn  month, day, date_accuratedef findstar(self, month, day):daylist = [20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22]starlist = ['摩羯座', '水瓶座', '双鱼座', '白羊座', '金牛座', '双子座', '巨蟹座', '狮子座', '处女座', '天秤座', '天蝎座', '射手座']if int(day) < daylist[int(month) - 1]:return starlist[int(month) - 1]else:return starlist[int(month)]def run(self, dispatcher: CollectingDispatcher,tracker: Tracker,domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:month, day, checkdate_status = self.checkdate(tracker)if checkdate_status == False:dispatcher.utter_message(text=f"我寻思着这日期只应天上有,要不您说个靠谱的?")return []else:star = self.findstar(month, day)dispatcher.utter_message(text=f"原来你是{star}~!")return [SlotSet('starsign_type', star)]

解决方案一

修改pipeline
因为中文字体不存在空格,有一些专门为英文设计的模型就不能使用,token出现错位的情况。可以通过修改pipeline中的模型来改善这个问题。
但在rasa论坛中找了一圈,也没找到合适的pipeline,这个跑通的版本是段老师给的。

在config文件中

language: "zh"pipeline:- name: zh_rasa.TFNLUClassifierepochs: 10encoder_path: .tar.gz- name: zh_rasa.TFNLUExtractorepochs: 30encoder_path: .tar.gzpolicies:- name: MemoizationPolicy- name: RulePolicy- name: TEDPolicymax_history: 5epochs: 200constrain_similarities: truemodel_confidence: linear_norm

解决方案二

把用户的整句话放到action中,然后用python正则表达式识别日期。
message = tracker.latest_message.text:用来返回用户的整句话
关于python正则表达提取日期

更多推荐

Rasa识别日期问题解决路径与方案

本文发布于:2024-03-23 17:13:06,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1740737.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:路径   日期   方案   Rasa

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!