Как убрать пунктуацию в питоне? - PullRequest
0 голосов
/ 07 декабря 2018

У меня проблема:

Например, у меня есть предложение

s = "AAA? BBB. CCC!" 

Итак, я делаю:

import string
table = str.maketrans('', '', string.punctuation)
s = [w.translate(table) for w in s]

И все в порядке.Мое новое предложение будет:

s = "AAA BBB CCC"

Но, если у меня будет входное предложение типа:

s = "AAA? BBB. CCC! DDD.EEE"

после удаления знаков препинания тем же способом, что и ниже, у меня будет

s = "AAA BBB CCC DDDEEE"

но нужно:

s = "AAA BBB CCC DDD EEE"

Есть какие-нибудь идеи / методы, как решить эту проблему?

Ответы [ 6 ]

0 голосов
/ 15 июля 2019

Попробуйте это:

import string
exclude = set(string.punctuation)
exclude.remove(".")
doc = "AAA? BBB. CCC! DDD.EEE"
for punctuation in exclude:
    doc = doc.replace(punctuation,"")
doc = doc.replace("."," ")
doc = doc.split()
print(" ".join(doc))
0 голосов
/ 07 декабря 2018

Использование:

import re

" ".join(re.split('\W+', s))

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

0 голосов
/ 07 декабря 2018

Это один подход с использованием str.strip и простой итерацией.

Пример:

from string import punctuation

s = "AAA? BBB. CCC! DDD.EEE"

def cleanString(strval):
    return "".join(" " if i in punctuation else i for i in strval.strip(punctuation))

s = " ".join(cleanString(i) for i in s.split())
print(s)

Выход:

AAA BBB CCC DDD EEE
0 голосов
/ 07 декабря 2018

Вы также можете сделать это так:

punctuation = "!@#$%^&*()_+<>?:.,;"  # add whatever you want

s = "AAA? BBB. CCC!" 
for c in s:
    if c in punctuation:
        s = s.replace(c, "")

print(s)

>>> "AAA BBB CCC"
0 голосов
/ 07 декабря 2018

Проверьте это:

if __name__ == "__main__":
    test_string = "AAA? BBB. CCC! DDD.EEE"
    result = "".join((char if char.isalpha() else " ") for char in test_string)
    print(result)


Result: AAA  BBB  CCC  DDD EEE
0 голосов
/ 07 декабря 2018

Попробуйте этот код:

import re

input_str = "AAA? BBB. CCC! DDD.EEE"
output_str = re.sub('[^A-Za-z0-9]+', ' ', input_str)
print output_str

'AAA BBB CCC DDD EEE'

...