# Search for any name in entity extraction

**URL:** <https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380>\
**Category:** Rasa Open Source\
**Created:** [July 15, 2020, 3:28pm UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380 "2020-07-15T15:28:58Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![omkarcpatil](https://avatars.discourse-cdn.com/v4/letter/o/e95f7d/32.png) [@omkarcpatil](https://forum.rasa.com/u/omkarcpatil)\
**Post date:** [July 15, 2020, 3:28pm UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380/1 "2020-07-15T15:28:58Z")

</div>

Hello

with following intent in my nlu.md file.

## intent:name

- anurag
- suraj
- simran
- kajal
- omkar

I can only retrieve these 5 names only when asked,

how can I extract the entity for any name, as I can not add all the existing names in my nlu file

---

<div class="post-metadata">

**Author:** ![omkarcpatil](https://avatars.discourse-cdn.com/v4/letter/o/e95f7d/32.png) [@omkarcpatil](https://forum.rasa.com/u/omkarcpatil)\
**Post date:** [July 16, 2020, 4:51am UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380/2 "2020-07-16T04:51:09Z")

</div>

@MuraliChandran14, @Michael, @mashagua if you could answer?

---

<div class="post-metadata">

**Author:** ![MuraliChandran14](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/muralichandran14/32/9120_2.png) [@MuraliChandran14](https://forum.rasa.com/u/MuraliChandran14)\
**Post date:** [July 16, 2020, 6:07am UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380/3 "2020-07-16T06:07:36Z")

</div>

@omkarcpatil

`name = tracker.latest_message['text']`. This will help you get the latest text from the user in your actions.py.

You have to create a story like

```
## name test
*greet
-utter_enter_yourname
-actions.py
-utter_hello_name

```

This will not use entity extraction

---

<div class="post-metadata">

**Author:** ![omkarcpatil](https://avatars.discourse-cdn.com/v4/letter/o/e95f7d/32.png) [@omkarcpatil](https://forum.rasa.com/u/omkarcpatil)\
**Post date:** [July 16, 2020, 7:11am UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380/4 "2020-07-16T07:11:04Z")

</div>

Hello @MuraliChandran14

i can get that, but if i am putting any name other those 5 that is not getting extracted how can i do it?

---

<div class="post-metadata">

**Author:** ![MuraliChandran14](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/muralichandran14/32/9120_2.png) [@MuraliChandran14](https://forum.rasa.com/u/MuraliChandran14)\
**Post date:** [July 16, 2020, 8:05am UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380/5 "2020-07-16T08:05:05Z")

</div>

What is your stories.md look like?, Did you trigger action by `name` intent.

---

<div class="post-metadata">

**Author:** ![omkarcpatil](https://avatars.discourse-cdn.com/v4/letter/o/e95f7d/32.png) [@omkarcpatil](https://forum.rasa.com/u/omkarcpatil)\
**Post date:** [July 16, 2020, 8:44am UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380/6 "2020-07-16T08:44:45Z")

</div>

[form\_action.py](https://forum.rasa.com/uploads/short-url/yXWTmfnOzXXMXixc63pNID1O5lI.py) (2.1 KB)

Stories.md

## mongo exist

- find\_in\_mongo
  - actions\_find\_in\_mongo
  - action\_form\_ask\_name ## here asking for the name
  - form{“name”: “name”}
  - form{“name”: null}

- thanks

- utter\_goodbye

I have put it inside a form, (actions form file is uploaded) here I can only mention those 5 names, any other name is not accepted

---

<div class="post-metadata">

**Author:** ![MuraliChandran14](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/muralichandran14/32/9120_2.png) [@MuraliChandran14](https://forum.rasa.com/u/MuraliChandran14)\
**Post date:** [July 16, 2020, 8:46am UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380/7 "2020-07-16T08:46:45Z")

</div>

Got it, If you are using `form action`. Then you have to use `self.from_text()` this will get user input.

In your `slot mappings`, Instead of `self.from_entity()` you have to change it to` self.from_text()` on `name` slot

> **[Forms](https://rasa.com/docs/rasa/forms/)**
>
> Follow a rule-based process of information gathering using forms in open source bot framework Rasa.

---

<div class="post-metadata">

**Author:** ![omkarcpatil](https://avatars.discourse-cdn.com/v4/letter/o/e95f7d/32.png) [@omkarcpatil](https://forum.rasa.com/u/omkarcpatil)\
**Post date:** [July 16, 2020, 8:49am UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380/8 "2020-07-16T08:49:34Z")

</div>

will that accept any other name than 5 mentioned in nlu file? consider if i give murali as my name?

---

<div class="post-metadata">

**Author:** ![MuraliChandran14](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/muralichandran14/32/9120_2.png) [@MuraliChandran14](https://forum.rasa.com/u/MuraliChandran14)\
**Post date:** [July 16, 2020, 8:50am UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380/9 "2020-07-16T08:50:40Z")

</div>

yep.

---

<div class="post-metadata">

**Author:** ![omkarcpatil](https://avatars.discourse-cdn.com/v4/letter/o/e95f7d/32.png) [@omkarcpatil](https://forum.rasa.com/u/omkarcpatil)\
**Post date:** [July 16, 2020, 12:06pm UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380/10 "2020-07-16T12:06:56Z")

</div>

@MuraliChandran14,

thank you for suggestion, but that solution didn’t work

i tried with following variations:

1.“name”: self.from\_text(entity=“name”, intent=[“name”]),

1. “name”: self.from\_text(entity=“name”),

2. “name”: self.from\_text(),

nothing is working

---

<div class="post-metadata">

**Author:** ![MuraliChandran14](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/muralichandran14/32/9120_2.png) [@MuraliChandran14](https://forum.rasa.com/u/MuraliChandran14)\
**Post date:** [July 16, 2020, 1:21pm UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380/11 "2020-07-16T13:21:40Z")

</div>

you can just use `self.from_text(),`.

Kindly check your form action is running or not.

 ![image](https://europe1.discourse-cdn.com/flex013/uploads/rasa/original/2X/6/65c71756b8b5c9c00f55e30c67647b4b398827d7.png)

---

<div class="post-metadata">

**Author:** ![omkarcpatil](https://avatars.discourse-cdn.com/v4/letter/o/e95f7d/32.png) [@omkarcpatil](https://forum.rasa.com/u/omkarcpatil)\
**Post date:** [July 16, 2020, 2:42pm UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380/12 "2020-07-16T14:42:39Z")

</div>

No success

## mongo exist

- find\_in\_mongo
  - actions\_find\_in\_mongo ## FYI, from this action I am internally calling next FollowupAction
  - action\_form\_ask\_name
  - form{“name”: “action\_form\_ask\_name”}
  - form{“name”: null}

- thanks

- utter\_goodbye

- utter\_goodbye

I tried with the above stories and your mentioned slot mapping for name

```
def slot_mappings(self) -> Dict[Text, Any]:
    # return {"name": self.from_entity(entity="name",
    # intent=["name"]),
    return {"name": [self.from_text()],
            "email": self.from_entity(entity="email",
                                         # intent="inform")}
                                         intent=["email"])}

```

as I only need name ,for email I already have a regex

---

<div class="post-metadata">

**Author:** ![MuraliChandran14](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/muralichandran14/32/9120_2.png) [@MuraliChandran14](https://forum.rasa.com/u/MuraliChandran14)\
**Post date:** [July 16, 2020, 3:47pm UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380/13 "2020-07-16T15:47:18Z")

</div>

can you share your output, what is storing in name slot, when you give random name.

---

<div class="post-metadata">

**Author:** ![omkarcpatil](https://avatars.discourse-cdn.com/v4/letter/o/e95f7d/32.png) [@omkarcpatil](https://forum.rasa.com/u/omkarcpatil)\
**Post date:** [July 17, 2020, 7:28am UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380/14 "2020-07-17T07:28:34Z")

</div>

Hello @MuraliChandran14,

thanks for the solution, i didnt notice that in my policies “formpolicy” was not mentioned which didnt validate my entity in forms, it was only taking input from rasa NLU

---

<div class="post-metadata">

**Author:** ![MuraliChandran14](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/muralichandran14/32/9120_2.png) [@MuraliChandran14](https://forum.rasa.com/u/MuraliChandran14)\
**Post date:** [July 17, 2020, 8:12am UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380/15 "2020-07-17T08:12:56Z")

</div>

Hope it helped 🙂

---

<div class="post-metadata">

**Author:** ![sarah1](https://avatars.discourse-cdn.com/v4/letter/s/f05b48/32.png) [@sarah1](https://forum.rasa.com/u/sarah1)\
**Post date:** [July 17, 2020, 6:17pm UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380/16 "2020-07-17T18:17:38Z")

</div>

Hello, I’ve had the same problem, I can’t extract the name. How do you do if that name is in a sentence, for exemple " My name is John" ? I try to extract it with the entity “PERSON” but it did not work. Could you please tell me how do I have to do please ?

---

<div class="post-metadata">

**Author:** ![flore](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/flore/32/9959_2.png) [@flore](https://forum.rasa.com/u/flore)\
**Post date:** [July 17, 2020, 9:21pm UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380/17 "2020-07-17T21:21:50Z")

</div>

Hi @omkarcpatil !

You can use self.from\_text() in slot\_mapping() method of the form, but this will catch whatever phrase user write, even if it is not his name.

You can also try with SpacyEntityExtractor which comes with various pre-trained models. In my case I used the spanish model and it works very well with names!

---

<div class="post-metadata">

**Author:** ![omkarcpatil](https://avatars.discourse-cdn.com/v4/letter/o/e95f7d/32.png) [@omkarcpatil](https://forum.rasa.com/u/omkarcpatil)\
**Post date:** [July 20, 2020, 2:56pm UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380/18 "2020-07-20T14:56:27Z")

</div>

@sarah1,

keep few examples in your nlu.md file for intent PERSON eg. (“John Cena” , “my name is John Cena”)

as per form policies after slot\_mapping function it goes in validate function, you can override that function, only use following code for validate function:

it is defined as def validate\_\<slot\_name\>, so in your case def validate\_PERSON:

```
def validate_name(
        self,
        value: Text,
        dispatcher: CollectingDispatcher,
        tracker: Tracker,
        domain: Dict[Text, Any],
) -> Dict[Text, Any]:
      

    print(tracker.slots) # just to show you what is actually happening, else not needed
    If (tracker.slots['name']):
         value = tracker.slots['name']
   
    return {"name": value}
```

---

<div class="post-metadata">

**Author:** ![omkarcpatil](https://avatars.discourse-cdn.com/v4/letter/o/e95f7d/32.png) [@omkarcpatil](https://forum.rasa.com/u/omkarcpatil)\
**Post date:** [July 20, 2020, 2:59pm UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380/19 "2020-07-20T14:59:05Z")

</div>

hello @flore,

great solution, but that would be difficult for extracting indian names, do spacy have model for Indian names too?

---

<div class="post-metadata">

**Author:** ![flore](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/flore/32/9959_2.png) [@flore](https://forum.rasa.com/u/flore)\
**Post date:** [July 20, 2020, 3:06pm UTC](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380/20 "2020-07-20T15:06:06Z")

</div>

@omkarcpatil sorry I see now that spacy have not indian model. Here are the availables models -\> [https://spacy.io/models](https://spacy.io/models)

[Next page](https://forum.rasa.com/t/search-for-any-name-in-entity-extraction/31380.md?page=2)
