In my chatbot I have a list of stop words. So I build a custom component to to filter these stop word. But I’m sure how to return filtered message from custom component.
- name: “SpacyNLP”
- name: “SpacyTokenizer”
- name: “custom_components.stop_word.StopWordDeductor”
- name: “SpacyFeaturizer” return_sequence: true
- name: “RegexFeaturizer”
- name: “CRFEntityExtractor”
- name: “EntitySynonymMapper”
- name: “SklearnIntentClassifier”
Custom Component file:
class StopWordDeductor(Component): name = "stopword_deductor" provides = ["tokens"] requires = ["spacy_doc"] def __init__(self, component_config=None): super(StopWordDeductor, self).__init__(component_config) def process(self, message, **kwargs): unfiltered_message = str(message.text) print(unfiltered_message) stop_words = ["a", "b", "c", "d"] # meassge_tokens = word_tokenize(message) message_tokens = list(unfiltered_message.split(" ")) print(message_tokens) filtered_word_list = [w for w in message_tokens if not w in stop_words] filtered_message = ' '.join([str(element) for element in filtered_word_list]) print(filtered_message) message.text = filtered_message print(message.text) return message def persist(self, file_name, model_dir): """Pass because a pre-trained model is already persisted""" pass
So, here my stop words are a, b, c, d; if user message contains any of these token that’s should be filtered out, which is actually working in process function. But in chatbot backend I found:
rasa.core.processor - Received user message ‘some_text_input_by_user’,
this some_text_input_by_user is the message which I’m trying to filter. I did filtering but not able to return that to next component, cause rasa.core.processor is showing some_text_input_by_user without filtering.
What I’m missing here?