Я разрабатываю простое приложение реагирования для отображения результатов поиска rasa HTTP api и хочу пометить сущности в предложении. Мой код хорошо работает для 1 слова, но разрывается на 2 слова (выделяется только первое слово)
Это то, что я делаю
const [colors, setColors] = useState([
"salmon",
"primary",
"purple",
"orange"
]);
const tagSentence = () => {
let sentence = props.data.text;
const entities = props.data.entities;
entities.map((e, eIndex) => {
sentence = sentence.replace(e.value, `<${eIndex}>${e.value}`);
});
return sentence.split(" ");
};
<Typography variant="h5" component="h2">
{props.data.entities.map(t => {
if (t.value.includes("<")) {
return (
<Chip
key={t.value}
label={t.slice(3, t.length)}
color="primary"
style={{ backgroundColor: colors[t.slice(1, 2)] }}
/>
);
} else {
return ` ${t} `;
}
})}
</Typography>
Объект Entities имеет индекс начала и конца слов, но я не могу понять, как его использовать.
Пример предложения:
Питер - мой лучший друг
{
"text" : "peter is my best friend"
"entities" : [{"entity": "PERSON", "value": "peter", "start": 1, "end": 5...}]
}
РЕДАКТИРОВАТЬ:
Закончилось этим, теперь посмотрим, как включить в JS целое слово
<Typography variant="h5" component="h2">
{props.data.text.split(" ").map((s, sIndex) => {
return props.data.entities.map((e, eIndex) => {
if (e.value.includes(s)) {
return (
<Chip
key={s}
label={s}
style={{ backgroundColor: colors[sIndex] }}
color="primary"
/>
);
} else {
return ` ${s} `;
}
});
})}
</Typography>