p.....k
p.....k
#naukaprogramowania #python

chcę podzielić string na słowa i wyciąć całą resztę

words = sentence.split(" ")
filtered = filter(str.isalpha, ???

w sensie na litery umiem podzielić, ale nie na słowa
  • Najlepsze
  • Wszystkie komentarze
p.....k
p.....k
@croppz: words = re.findall(r'[a-z]+\'[a-z]+|[a-z]+|\d+', sentence.lower())
udało się wreszcie. skopiuj sobie i schowaj bezpiecznie w jakimś folderze.
croppz
@ponuryrolnik: [''.join(filter(str.isalpha, word)) for word in words]
croppz
@ponuryrolnik: tak. Masz, pobaw się.
JakTamCoTam
@ponuryrolnik: a skąd ma program wiedzieć co jest wyrazem? Musisz mu przekazać te wyrazy.
p.....k
p.....k
@JakTamCoTam: no to podzieliłem, ale nie umiem odfiltrować z tych słów
l.....k
l.....k
@ponuryrolnik: podaj przykład to się zobaczy. Bo dzielisz poprawnie
L.....k
L.....k
@ponuryrolnik: Musisz jeszcze wziąć pod uwagę wszystkie znaki specjalne. Plus skróty językowe - "np." zakończone kropką.
W pythonie masz paczkę nltk do przetwarzania języka naturalnego, obczaj funkcję "word_tokenize". Powinna się przydac
p.....k
p.....k
@luukasek: filtered = filter(str.isalpha, words.lower())
wywala się
L.....k
L.....k
@ponuryrolnik: words to lista, lower() to metoda ze stringa
l.....k
l.....k
@ponuryrolnik: ja nie podalem tego sposobu, prosiłem o przyklad tego co chcesz filtrowac.
p.....k
p.....k
@croppz: tak, teraz dzieli dobrze... muszę jeszcze pokombinować, żeby ciąg cyfr liczyło jako słowa... może filtrować to drugi raz z isadigit i dodać do listy

a jest isalnum
croppz
@ponuryrolnik: a cyfry wymieszane z literami spełniają twoją definicję słowa? Bo jak tak to zmień funkcję filtrującą na str.isalnum i tyle.
p.....k
p.....k
@croppz: działa, ale muszę się pobawić z tym filtrowaniem
asterix61
@ponuryrolnik: a co za znaki tam jeszcze masz, które chcesz odrzucić? Użyj split bez argumentu (https://stackoverflow.com/questions/61566711/which-characters-are-considered-whitespace-by-split)
p.....k
p.....k
@asterix61: takie ćwiczenie robię, ale chcą też żeby adam's i adams13212i39### było słowami adam's i adams xD albo adam i jola jolanta_oraz_adam też dzieliło na słowa... dużo tego
p.....k
p.....k
@asterix61: może zamienić _ na spacje, a potem podzielić
asterix61
@ponuryrolnik: ło jezu to widzę większa magia w tym zadaniu, nie zazdroszczę xd

No ja bym zrobił najpierw replace('_', ' ') a potem split().
A w kwestii słów to regex albo ręczne sprawdzanie znak po znaku każdego stringa i odpowiednie odfiltrowywanie ich :)
p.....k
p.....k
@asterix61: jako Easy jest zaznaczone to zadanie
p.....k
p.....k
@asterix61: a da się używając filter() ignorować jakieś znaki?

albo zobaczymy solucje, bo tu musi być jakiś trik zastosowany
p.....k
p.....k
@asterix61: tak, regex. nawet ostatnio oglądałem o tym filmik