Chcę, aby moja funkcja Python podzieliła zdanie (wejście) i zapisała każde słowo na liście. Mój obecny kod dzieli zdanie, ale nie przechowuje słów jako listy. Jak mogę to zrobić?
def split_line(text):
# split the text
words = text.split()
# for each word in the line:
for word in words:
# print the word
print(words)
python
list
split
text-segmentation
Dzięki
źródło
źródło
print(word)
jako swojej ostatniej linii.Odpowiedzi:
To powinno wystarczyć do zapisania każdego słowa na liście.
words
jest już listą słów z zdania, więc pętla nie jest potrzebna.Po drugie, może to być literówka, ale twoja pętla jest trochę pomieszana. Jeśli naprawdę chcesz użyć append, byłoby to:
nie
źródło
Dzieli ciąg znaków
text
na dowolne kolejne serie białych znaków.Podzielić ciąg w
text
separatora:","
.Zmienna słów będzie miała wartość a
list
i będzie zawierać słowa ztext
podziału na separatorze.źródło
str.split ()
źródło
W zależności od tego, co planujesz zrobić z listą zdań, możesz zajrzeć do zestawu Natural Language Took Kit . Zajmuje się głównie przetwarzaniem i oceną tekstu. Możesz go również użyć do rozwiązania problemu:
Ma to dodatkową zaletę polegającą na rozdzielaniu interpunkcji.
Przykład:
Pozwala to odfiltrować niepotrzebne znaki interpunkcyjne i używać tylko słów.
Pamiętaj, że inne stosowane rozwiązania
string.split()
są lepsze, jeśli nie planujesz wykonywać skomplikowanych manipulacji zdaniem.[Edytowane]
źródło
split()
opiera się na spacji jako separatorze, więc nie będzie w stanie oddzielić dzielonych wyrazów - a frazy oddzielone długim myślnikiem również się nie podzielą. A jeśli zdanie zawiera interpunkcję bez spacji, nie będą się one trzymać. Dla każdego parsowania tekstu w świecie rzeczywistym (jak w przypadku tego komentarza) twoja sugestia nltk jest znacznie lepsza niż split () `.','
i"'s"
nie są słowami. Zwykle, jeśli chcesz podzielić powyższe zdanie na „słowa” w sposób rozpoznający interpunkcję, możesz usunąć przecinek i otrzymać"fox's"
jedno słowo.Co powiesz na ten algorytm? Podziel tekst na białe znaki, a następnie przycinaj znaki interpunkcyjne. To ostrożnie usuwa interpunkcję z krawędzi słów, nie szkodząc apostrofom w słowach takich jak
we're
.źródło
e.g.
iMrs.
apostrof końcowy w dzierżawczymfrogs'
(jak wfrogs' legs
) są częścią słowa, ale zostaną usunięte przez ten algorytm. Obchodzenie skróty właściwie może być w przybliżeniu uzyskuje się poprzez wykrywanie kropka oddziela initialisms oraz przy użyciu słownika szczególnych przypadkach (jakMr.
,Mrs.
). Odróżnianie apostrofów dzierżawczych od pojedynczych cudzysłowów jest znacznie trudniejsze, ponieważ wymaga analizy gramatyki zdania, w którym słowo jest zawarte.str().split()
Sposób to robi, że ma ciąg, dzieli go na listę:Problem, który masz, to literówka, którą napisałeś
print(words)
zamiastprint(word)
:Zmieniając nazwę
word
zmiennej nacurrent_word
, właśnie to:... kiedy powinieneś zrobić:
Jeśli z jakiegoś powodu chcesz ręcznie utworzyć listę w pętli for, skorzystaj z
append()
metody list , być może dlatego, że chcesz małe litery wszystkich słów (na przykład):Lub bardziej schludnie, używając zrozumienia listy :
źródło
shlex ma
.split()
funkcję. Różni sięstr.split()
tym, że nie zachowuje cudzysłowów i traktuje cytowane wyrażenie jako pojedyncze słowo:źródło
Jeśli chcesz mieć wszystkie znaki słowa / zdania na liście, wykonaj następujące czynności:
źródło
Myślę, że jesteś zdezorientowany z powodu literówki.
Wymień
print(words)
sięprint(word)
wewnątrz pętli, że każde słowo drukowane na innej liniiźródło