6.5 KiB
6.5 KiB
nie robimy 2 nowych linii w bloku funkcji. sentences[::2] oraz sentences[1::2] powinny być przypisane do osobnych zmiennych
import re
tekst = "Pies ten pochodzi z południowych Chin, z terenów prowincji Guangdong! Został rozpropagowany i hodowany w celach wystawowych przez hodowców w USA. Nazwa psa, pochodząca z chińskiego, oznacza dosłownie piaszczysta skóra. Chart polski polska rasa psa myśliwskiego, znana prawdopodobnie od czasów Galla Anonima, zaliczana do grupy chartów."
def split_sentences(text):
sentences = re.split(r'([.!?]\s+)(?=[A-Z])', text)
full_sentences = [''.join(pair) for pair in zip(sentences[::2], sentences[1::2])]
for sentence in full_sentences:
print(sentence)
print(full_sentences)
split_sentences(tekst)
Pies ten pochodzi z południowych Chin, z terenów prowincji Guangdong! Został rozpropagowany i hodowany w celach wystawowych przez hodowców w USA. Nazwa psa, pochodząca z chińskiego, oznacza dosłownie piaszczysta skóra. ['Pies ten pochodzi z południowych Chin, z terenów prowincji Guangdong! ', 'Został rozpropagowany i hodowany w celach wystawowych przez hodowców w USA. ', 'Nazwa psa, pochodząca z chińskiego, oznacza dosłownie piaszczysta skóra. ']
Niewłaściwa nazwa funkcji switch_letter (robi coś innego, niż nazwa na to wskazuje). Linijka z sum jest nieczytelna.
text = "kurde faja."
vulgar_words_base = ["kurd", "choler"]
def switch_letter(word, vulgar_word_list):
word = word.lower()
for bad_word in vulgar_word_list:
switched_letters = sum(1 for a, b in zip(word, bad_word) if a != b)
if switched_letters == 1:
return True
return False
def censor_text(text):
pattern = re.compile(r'[^\s]*(' + '|'.join([f'{word}' for word in vulgar_words_base]) + r')[^\s]*', re.IGNORECASE)
censored_text = pattern.sub("---", text)
censored_text_list = censored_text.split()
for i, word in enumerate(censored_text_list):
if switch_letter(word, vulgar_words_base):
censored_text_list[i] = "---"
final_censored_text = " ".join(censored_text_list)
return final_censored_text
print(censor_text(text))
--- faja.
switch_letter("kurcze", ["kurzce"])
False
Jeżeli nie ma takiej konieczności nie iterujemy po rozdzielonym na słowa tekście, tylko na całym tekście.
# Solution 2
text = 'Siała baba mak. Czy wiedziała jak? Dziadek wiedział, nie powiedział, a to było tak!'
sentences = []
def split_sentences(text):
sentence = ''
for word in text.split():
x = re.search(r'[a-zA-Z0-9]+[.?!]', word)
if x is None:
sentence += f'{word} '
else:
sentence += word
sentences.append(sentence)
sentence = ''
for result in sentences:
print(result)
split_sentences(text)
Siała baba mak. Czy wiedziała jak? Dziadek wiedział, nie powiedział, a to było tak!
Nie stosujemy zapisu if {zmienna}, tylko if {zmienna} is True/False. Kod dla danego warunku przenosimy do nowej linii
import re
def validate_name(name):
valid = re.match(r'^[A-Z][a-z]{1,}',name)
if valid: return True
else: return False
Przykład właściwego zastosowania komentarza
def censor_text(text):
prefixes = r'(do|na|o|od|pod|po|prze|przy|roz|s|u|w|y|za|z|u)*'
# profanities according to prof. Jerzy Bralczyk
profanities = [
rf'\b{prefixes}(kurw[aąeęyi]\w*)|(ku(z|ź)w\w*)|(kurew\w*)\b',
rf'\b{prefixes}(pierd\w*)\b',
rf'\b{prefixes}(chuj\w*)\b',
rf'\b{prefixes}(pizd\w*)\b',
rf'\b{prefixes}(jeb\w*)\b',
]
profanity_pattern = re.compile('|'.join(profanities), re.IGNORECASE)
return profanity_pattern.sub('---', text)