Как убрать строку из знаков препинания, кроме апострофов для НЛП - PullRequest
1 голос
/ 23 января 2020

Я использую приведенный ниже «самый быстрый» способ удаления знаков препинания из строки:

text = file_open.translate(str.maketrans("", "", string.punctuation))

Однако он удаляет все знаки препинания, включая апострофы с токенами, такие как shouldn't, превращая его в shouldnt.

Проблема в том, что я использую библиотеку NLTK для стоп-слов, и стандартные стоп-слова не включают в себя такие примеры без апострофов, а вместо этого имеют токены, которые NLTK генерирует, если я использую токенайзер NLTK для разделения текста. Например, для shouldnt включены следующие стоп-слова: shouldn, shouldn't, t.

Я могу добавить дополнительные стоп-слова или удалить апострофы из стоп-слов NLTK. Но оба решения не кажутся «правильными» в некотором смысле, так как я считаю, что при очистке пунктуации следует оставлять апострофы.

Есть ли способ оставить апострофы при быстрой очистке пунктуации?

Ответы [ 3 ]

1 голос
/ 23 января 2020
>>> from string import punctuation
>>> type(punctuation)
<class 'str'>
>>> my_punctuation = punctuation.replace("'", "")
>>> my_punctuation
'!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~'
>>> "It's right, isn't it?".translate(str.maketrans("", "", my_punctuation))
"It's right isn't it"
1 голос
/ 23 января 2020

Отредактировано этот ответ .

import re

s = "This is a test string, with punctuation. This shouldn't fail...!"

text = re.sub(r'[^\w\d\s\']+', '', s)
print(text)

Возвращает:

Это тестовая строка с пунктуацией. Это не должно завершиться ошибкой

Объяснение регулярного выражения:

[^] соответствует всему, кроме всего, что содержится в кавычках
\w соответствует любому символу слова (равному [a-zA-Z0-9_])
\d соответствует di git (равно [0-9])
\s соответствует любому символу пробела (равно [\r\n\t\f\v ])
\' соответствует символу ' буквально (с учетом регистра)
+ соответствует от одного до неограниченного количества раз, столько раз, сколько возможно, возвращая при необходимости

И вы можете попробовать здесь .

1 голос
/ 23 января 2020

Как насчет использования

text = file_open.translate(str.maketrans(",.", "  "))

и добавления других символов, которые вы хотите игнорировать, в первую строку.

...