Как исправить неверную синтаксическую ошибку для удаления пунктуации с помощью регулярных выражений? - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь удалить пунктуацию (кроме - &.) С помощью регулярных выражений.Вход для удаления пунктуации - это предварительно обработанный токен.Тем не менее я получаю синтаксическую ошибку (SyntaxError: неверный синтаксис) для моего кода.Где мне нужно изменить, чтобы исправить синтаксическую ошибку?

Я попытался исправить это, изменив регулярное выражение.Я относительно новичок в регулярных выражениях.Некоторые рекомендации могут помочь мне исправить ошибку или определить мои ошибки.

Мой код выглядит следующим образом:

regex = re.compile('[%s]' % re.escape(string.punctuation))

token_without_punctuation = []

for x in tokenized_doc1:
    y = []
    for token in x:
        tokens = regex.sub(ur"\p{P}(?<![\-.])", "", token)
          y.append(tokens)

    token_without_punctuation.append(y)

print(token_without_punctuation)

Для моего кода введите следующие данные:

[['The', 'intelligent', 'directory', 'enquiry', 'assistant', '(', 'YPA', ')', 'project', 'is', 'an', 'example', '(', 'going', 'back', 'quite', 'a', 'few', 'years', 'now', '...', ')', 'where', 'the', 'extraction', 'of', 'information', 'from', 'partially', 'structured', 'data', 'together', 'with', 'engineering', 'issues', 'played', 'major', 'roles', 'in', 'making', 'the', 'YPA', 'a', 'usable', 'online', 'system', '.'], ['I', 'am', 'developing', 'techniques', 'that', 'allow', 'the', 'extraction', 'of', 'conceptual', 'information', 'from', 'document', 'collections', 'and', 'the', 'utilization', 'of', 'such', 'knowledge', 'in', 'retrieval', 'tasks', '.'], ['The', 'type', 'of', 'documents', 'can', 'range', 'from', 'Web', 'pages', 'to', 'newspaper', 'articles', 'or', 'other', 'forms', 'of', 'vaguely/partially', 'structured', 'data', '.']]

Ошибка заключается в следующем

  File "<ipython-input-108-0c96ff0d8e79>", line 10
    tokens = regex.sub(ur"\p{P}(?<![\-.])", "", token)
                                         ^
SyntaxError: invalid syntax

Было бы здорово, если бы кто-то помог выявить мои ошибки.

Дополнительная информация:

Я также пробовал использовать приведенный ниже код.

tokens = regex.sub(u'', token)
        if not token == u'':

Вышеупомянутые строки исправляют ошибку, но она удаляет все знаки пунктуации.Я также пытался с tokens = regex.sub(u'\p{P}(?<![\-.])', token).В этом случае я получаю еще одну ошибку, которая выглядит следующим образом:

TypeError: 'str' object cannot be interpreted as an integer

Как я могу удалить знаки препинания (кроме и -) без получения ошибки?

1 Ответ

0 голосов
/ 17 февраля 2019

Переменная regex в вашем коде является скомпилированным re объектом.Позже вы используете его в качестве ссылки на модуль PyPi regex, вы даже используете регулярное выражение, которое «поймет» только модуль PyPi regex.Это совсем не правильно.

Обратите внимание, что для устранения всей неопределенности между re и regex я предлагаю переименовать переменную regex в punct_rx.

Теперь вы формируете регулярное выражение пунктуации, используя код '[%s]' % re.escape(string.punctuation),Вы получаете [\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^_\`\{\|\}\~] ( демо ).Возможно, имеет смысл удалить - и . при построении регулярного выражения.Измените этот код на re.compile('[%s]' % re.escape(string.punctuation.replace(".", "").replace("-", ""))), и вы получите шаблон [\!\"\#\$\%\&\'\(\)\*\+\,\/\:\;\<\=\>\?\@\[\\\]\^_\`\{\|\}\~] ( demo ).

Затем все, что осталось, это исправить код замены как tokens = punct_rx.sub("", token).

См. Полное исправление:

import re, string

tokenized_doc1 = [['The', 'intelligent', 'directory', 'enquiry', 'assistant', '(', 'YPA', ')', 'project', 'is', 'an', 'example', '(', 'going', 'back', 'quite', 'a', 'few', 'years', 'now', '...', ')', 'where', 'the', 'extraction', 'of', 'information', 'from', 'partially', 'structured', 'data', 'together', 'with', 'engineering', 'issues', 'played', 'major', 'roles', 'in', 'making', 'the', 'YPA', 'a', 'usable', 'online', 'system', '.'], ['I', 'am', 'developing', 'techniques', 'that', 'allow', 'the', 'extraction', 'of', 'conceptual', 'information', 'from', 'document', 'collections', 'and', 'the', 'utilization', 'of', 'such', 'knowledge', 'in', 'retrieval', 'tasks', '.'], ['The', 'type', 'of', 'documents', 'can', 'range', 'from', 'Web', 'pages', 'to', 'newspaper', 'articles', 'or', 'other', 'forms', 'of', 'vaguely/partially', 'structured', 'data', '.']]
punct_rx = re.compile('[%s]' % re.escape(string.punctuation.replace(".", "").replace("-", "")))
token_without_punctuation = []

for x in tokenized_doc1:
    y = []
    for token in x:
        tokens = punct_rx.sub("", token)
        y.append(tokens)
    token_without_punctuation.append(y)

print(token_without_punctuation)

См. Демонстрационную версию Python .

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