Я пытаюсь разобрать предложения в python - для любого предложения, которое я получаю, я должен брать только слова, которые появляются после слов «сказать» или «спросить» (если слова не появляются, я должен взять все предложение) я просто сделал это с регулярными выражениями:
sen = re.search('(?s)(?<=say|Say).*$', current_game_row["sentence"], re.M | re.I)
(это только для "сказать", но добавить "спросить" не проблема...)
Проблема в том, что если я получаю предложение с такими знаками препинания, как запятая, двоеточие (,:) после слова «говорить», оно тоже принимает его. Кто-то предложил мне использовать токенизацию nltk, чтобы определить ее, но я новичок в python и не понимаю, как ее использовать. Я вижу, что в nltk есть функция RegexpParser, но я не знаю, как ее использовать. Пожалуйста помогите :-)
** Я забыл упомянуть, что я также хочу распознавать «сказал» / спросил и т. Д. И не хочу ловить слова, включающие слово «сказать» или «спросить» (я не уверен, что есть такие слова. ..). Кроме того, если where многократно 'say' или 'ask' , я хочу поймать только первый токен в предложении. **
re.split(r'\b(?:say|ask)\b[,.;:!?]*', sentence)
и проверить, является ли результат более чем одним элементом. Что должно произойти, если имеется несколько токенов «говорить» или «спрашивать»? Как насчет интонаций, как сказал и спросил? - person tripleee   schedule 05.02.2021\b
предотвращают совпадение регулярного выражения в середине слова. Вам не нужно перечислять нижний и верхний регистр с помощьюre.I
(хотя тогда, конечно, это также будет соответствовать на aSkS и т. д.). - person tripleee   schedule 05.02.2021