сегментация текста на основе знаков препинания, особенно на уровне предложения - PullRequest
0 голосов
/ 24 апреля 2020

Я хочу сегментировать текст, когда мы встречаем знак препинания в предложении или абзаце. Если я использую запятую (,) в своем регулярном выражении, это также разбивает отдельные глаголы или прилагательные, разделенные запятой. Предположим, у нас есть «собаки, кошки, крысы и другие животные». Собаки становятся отдельным куском, чего я не хочу, чтобы произошло. Могу ли я в любом случае игнорировать использование регулярных выражений или любых других средств в nltk, где я могу получить только разделенное запятыми предложение как текстовый сегмент

Код

from nltk import sent_tokenize
import re
text = "Peter Mattei's 'Love in the Time of Money' is a visually stunning film to watch. Mrs. Mattei offers us a vivid portrait about human relations. This is a movie that seems to be telling us what money, power and success do to people in the different situation we encounter.
text= re.sub("(?<=..Dr|.Mrs|..Mr|..Ms|Prof)[.]","<prd>", text)
txt = re.split(r'\.\s|;|:|\?|\'\s|"\s|!|\s\'|\s\"', text)
print(txt)

1 Ответ

1 голос
/ 24 апреля 2020

Это слишком сложно, чтобы решить с помощью регулярного выражения: регулярное выражение не может знать, что в предложении-кандидате есть предикат (глагол), и если вы его развернете, вы разбьетесь на другое предложение.

Проблема, которую вы собираетесь решить, называется chunking в НЛП. Традиционно здесь использовались алгоритмы на основе регулярных выражений, основанные на POS-тегах (поэтому сначала нужно сделать POS-теги). NLTK имеет учебник для этого , однако это довольно устаревший подход.

Теперь, когда доступны быстрые и надежные тегеры и парсеры (например, в Spacy ). Я бы предложил сначала проанализировать предложение, а затем найти фрагменты в разборе избирательного округа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...